Improve the situation with two transparent screens on top of each other

This commit is contained in:
Henrik Rydgård 2023-08-02 13:03:08 +02:00
parent fc6879674e
commit 112b624257
2 changed files with 15 additions and 11 deletions

View file

@ -156,30 +156,35 @@ void ScreenManager::resized() {
void ScreenManager::render() { void ScreenManager::render() {
if (!stack_.empty()) { if (!stack_.empty()) {
switch (stack_.back().flags) { switch (stack_.back().flags) {
case LAYER_SIDEMENU:
case LAYER_TRANSPARENT: case LAYER_TRANSPARENT:
if (stack_.size() == 1) { if (stack_.size() == 1) {
ERROR_LOG(SYSTEM, "Can't have sidemenu over nothing"); ERROR_LOG(SYSTEM, "Can't have sidemenu over nothing");
break; break;
} else { } else {
auto iter = stack_.end(); auto last = stack_.end();
auto iter = last;
iter--; iter--;
while (iter->flags == LAYER_TRANSPARENT) {
iter--; iter--;
Layer backback = *iter; }
auto first = iter;
_assert_(backback.screen); _assert_(iter->screen);
// TODO: Make really sure that this "mismatched" pre/post only happens // TODO: Make really sure that this "mismatched" pre/post only happens
// when screens are "compatible" (both are UIScreens, for example). // when screens are "compatible" (both are UIScreens, for example).
backback.screen->preRender(); first->screen->preRender();
backback.screen->render(); while (iter < last) {
iter->screen->render();
iter++;
}
stack_.back().screen->render(); stack_.back().screen->render();
if (postRenderCb_) if (postRenderCb_) {
postRenderCb_(getUIContext(), postRenderUserdata_); postRenderCb_(getUIContext(), postRenderUserdata_);
}
if (overlayScreen_) { if (overlayScreen_) {
overlayScreen_->render(); overlayScreen_->render();
} }
backback.screen->postRender(); first->screen->postRender();
break; break;
} }
default: default:

View file

@ -90,7 +90,6 @@ public:
}; };
enum { enum {
LAYER_SIDEMENU = 1,
LAYER_TRANSPARENT = 2, LAYER_TRANSPARENT = 2,
}; };