diff --git a/Common/UI/Screen.cpp b/Common/UI/Screen.cpp index c67b3cfe9e..036473794b 100644 --- a/Common/UI/Screen.cpp +++ b/Common/UI/Screen.cpp @@ -156,30 +156,35 @@ void ScreenManager::resized() { void ScreenManager::render() { if (!stack_.empty()) { switch (stack_.back().flags) { - case LAYER_SIDEMENU: case LAYER_TRANSPARENT: if (stack_.size() == 1) { ERROR_LOG(SYSTEM, "Can't have sidemenu over nothing"); break; } else { - auto iter = stack_.end(); + auto last = stack_.end(); + auto iter = last; iter--; - iter--; - Layer backback = *iter; - - _assert_(backback.screen); + while (iter->flags == LAYER_TRANSPARENT) { + iter--; + } + auto first = iter; + _assert_(iter->screen); // TODO: Make really sure that this "mismatched" pre/post only happens // when screens are "compatible" (both are UIScreens, for example). - backback.screen->preRender(); - backback.screen->render(); + first->screen->preRender(); + while (iter < last) { + iter->screen->render(); + iter++; + } stack_.back().screen->render(); - if (postRenderCb_) + if (postRenderCb_) { postRenderCb_(getUIContext(), postRenderUserdata_); + } if (overlayScreen_) { overlayScreen_->render(); } - backback.screen->postRender(); + first->screen->postRender(); break; } default: diff --git a/Common/UI/Screen.h b/Common/UI/Screen.h index 4a45d54186..4f559f9ed7 100644 --- a/Common/UI/Screen.h +++ b/Common/UI/Screen.h @@ -90,7 +90,6 @@ public: }; enum { - LAYER_SIDEMENU = 1, LAYER_TRANSPARENT = 2, };