diff --git a/THEMES-DEV.md b/THEMES-DEV.md index 9e9e1815c..bbe13b521 100644 --- a/THEMES-DEV.md +++ b/THEMES-DEV.md @@ -987,6 +987,8 @@ It's strongly recommended to use the same image dimensions for all badges as var - Default is 3 * `zIndex` - type: FLOAT. - z-index value for component. Components will be rendered in order of z-index value from low to high. +* `legacyZIndexMode` - type: BOOLEAN + - If true, the carousel will ignore zIndex and always render on top of other components. The help system is a special element that displays a context-sensitive list of actions the user can take at any time. You should try and keep the position constant throughout every screen. Keep in mind the "default" settings (including position) are used whenever the user opens a menu. diff --git a/es-app/src/views/SystemView.cpp b/es-app/src/views/SystemView.cpp index 8159bacbd..f60a9a552 100644 --- a/es-app/src/views/SystemView.cpp +++ b/es-app/src/views/SystemView.cpp @@ -402,16 +402,35 @@ void SystemView::render(const glm::mat4& parentTrans) glm::mat4 trans{getTransform() * parentTrans}; - renderExtras(trans, INT16_MIN, INT16_MAX); + if (mCarousel.legacyZIndexMode) { + // Render all extras. + renderExtras(trans, INT16_MIN, INT16_MAX); - // Fade the screen if we're using fade transitions and we're currently transitioning. - // This basically renders a black rectangle on top of the currently visible extras - // (and beneath the carousel and help prompts). - if (mExtrasFadeOpacity) - renderFade(trans); + // Fade the screen if we're using fade transitions and we're currently transitioning. + // This basically renders a black rectangle on top of the currently visible extras + // (and beneath the carousel and help prompts). + if (mExtrasFadeOpacity) + renderFade(trans); - // Always render the carousel on top so that it's not faded. - renderCarousel(trans); + // Always render the carousel on top so that it's not faded. + renderCarousel(trans); + } + else { + // Render the extras that are below the carousel. + renderExtras(trans, INT16_MIN, mCarousel.zIndex); + + // Fade the screen if we're using fade transitions and we're currently transitioning. + // This basically renders a black rectangle on top of the currently visible extras + // (and beneath the carousel and help prompts). + if (mExtrasFadeOpacity) + renderFade(trans); + + // Render the carousel. + renderCarousel(trans); + + // Render the rest of the extras. + renderExtras(trans, mCarousel.zIndex, INT16_MAX); + } } std::vector SystemView::getHelpPrompts() @@ -730,4 +749,11 @@ void SystemView::getCarouselFromTheme(const ThemeData::ThemeElement* elem) else mCarousel.logoAlignment = ALIGN_CENTER; } + if (elem->has("legacyZIndexMode")) { + mCarousel.legacyZIndexMode = + elem->get("legacyZIndexMode").compare("true") == 0 ? true : false; + } + else { + mCarousel.legacyZIndexMode = true; + } } \ No newline at end of file diff --git a/es-app/src/views/SystemView.h b/es-app/src/views/SystemView.h index 6e590c971..5e0178a57 100644 --- a/es-app/src/views/SystemView.h +++ b/es-app/src/views/SystemView.h @@ -47,6 +47,7 @@ struct SystemViewCarousel { int maxLogoCount; // Number of logos shown on the carousel. glm::vec2 logoSize; float zIndex; + bool legacyZIndexMode; }; class SystemView : public IList diff --git a/es-core/src/ThemeData.cpp b/es-core/src/ThemeData.cpp index 2a1c7f07f..6f9e2020c 100644 --- a/es-core/src/ThemeData.cpp +++ b/es-core/src/ThemeData.cpp @@ -213,7 +213,8 @@ std::map> The {"logoSize", NORMALIZED_PAIR}, {"logoAlignment", STRING}, {"maxLogoCount", FLOAT}, - {"zIndex", FLOAT}}}}; + {"zIndex", FLOAT}, + {"legacyZIndexMode", STRING}}}}; #define MINIMUM_THEME_FORMAT_VERSION 3 #define CURRENT_THEME_FORMAT_VERSION 7