From 28a3beb9cee8c0e6bad110e11f74d0e582793dee Mon Sep 17 00:00:00 2001 From: Leon Styhre Date: Thu, 10 Feb 2022 20:02:56 +0100 Subject: [PATCH] ScrollableContainer parameters are now themeable. --- es-app/src/views/GamelistView.cpp | 4 +-- es-core/src/ThemeData.cpp | 3 ++ .../src/components/ScrollableContainer.cpp | 28 +++++++++++++++++++ es-core/src/components/ScrollableContainer.h | 5 ++++ 4 files changed, 38 insertions(+), 2 deletions(-) diff --git a/es-app/src/views/GamelistView.cpp b/es-app/src/views/GamelistView.cpp index c70db67c4..247dbdb51 100644 --- a/es-app/src/views/GamelistView.cpp +++ b/es-app/src/views/GamelistView.cpp @@ -135,7 +135,6 @@ void GamelistView::onThemeChanged(const std::shared_ptr& theme) else if (element.second.type == "text") { if (element.second.has("container") && element.second.get("container")) { mContainerComponents.push_back(std::make_unique()); - mContainerComponents.back()->setAutoScroll(true); mContainerComponents.back()->setDefaultZIndex(40.0f); addChild(mContainerComponents.back().get()); mContainerTextComponents.push_back(std::make_unique()); @@ -144,11 +143,12 @@ void GamelistView::onThemeChanged(const std::shared_ptr& theme) mContainerComponents.back()->applyTheme(theme, "gamelist", element.first, POSITION | ThemeFlags::SIZE | Z_INDEX | VISIBLE); + mContainerComponents.back()->setAutoScroll(true); mContainerTextComponents.back()->setSize( mContainerComponents.back()->getSize().x, 0.0f); mContainerTextComponents.back()->applyTheme( theme, "gamelist", element.first, - (ALL ^ POSITION ^ Z_INDEX ^ ThemeFlags::SIZE ^ VISIBLE ^ ROTATION) | COLOR); + ALL ^ POSITION ^ Z_INDEX ^ ThemeFlags::SIZE ^ VISIBLE ^ ROTATION); mContainerComponents.back()->setScrollHide(true); } else { diff --git a/es-core/src/ThemeData.cpp b/es-core/src/ThemeData.cpp index cfc0164c3..99f1f54f2 100644 --- a/es-core/src/ThemeData.cpp +++ b/es-core/src/ThemeData.cpp @@ -145,6 +145,9 @@ std::map> {"text", STRING}, {"metadata", STRING}, {"container", BOOLEAN}, + {"containerScrollSpeed", FLOAT}, + {"containerStartDelay", FLOAT}, + {"containerResetDelay", FLOAT}, {"fontPath", PATH}, {"fontSize", FLOAT}, {"alignment", STRING}, diff --git a/es-core/src/components/ScrollableContainer.cpp b/es-core/src/components/ScrollableContainer.cpp index d299ce680..a937db9d2 100644 --- a/es-core/src/components/ScrollableContainer.cpp +++ b/es-core/src/components/ScrollableContainer.cpp @@ -77,6 +77,34 @@ void ScrollableContainer::reset() } } +void ScrollableContainer::applyTheme(const std::shared_ptr& theme, + const std::string& view, + const std::string& element, + unsigned int properties) +{ + using namespace ThemeFlags; + GuiComponent::applyTheme(theme, view, element, properties); + + const ThemeData::ThemeElement* elem {theme->getElement(view, element, "text")}; + if (!elem || !elem->has("container")) + return; + + if (elem->has("containerScrollSpeed")) { + mAutoScrollSpeedConstant = + AUTO_SCROLL_SPEED / glm::clamp(elem->get("containerScrollSpeed"), 0.1f, 10.0f); + } + + if (elem->has("containerStartDelay")) { + mAutoScrollDelayConstant = + glm::clamp(elem->get("containerStartDelay"), 0.0f, 10.0f) * 1000.0f; + } + + if (elem->has("containerResetDelay")) { + mAutoScrollResetDelayConstant = + glm::clamp(elem->get("containerResetDelay"), 0.0f, 20.0f) * 1000.0f; + } +} + void ScrollableContainer::update(int deltaTime) { if (mSize == glm::vec2 {0.0f, 0.0f}) diff --git a/es-core/src/components/ScrollableContainer.h b/es-core/src/components/ScrollableContainer.h index 500f7fd3c..4201810d5 100644 --- a/es-core/src/components/ScrollableContainer.h +++ b/es-core/src/components/ScrollableContainer.h @@ -33,6 +33,11 @@ public: float autoScrollSpeedConstant) override; void reset(); + void applyTheme(const std::shared_ptr& theme, + const std::string& view, + const std::string& element, + unsigned int properties) override; + void update(int deltaTime) override; void render(const glm::mat4& parentTrans) override;