Improve the situation with two transparent screens on top of each other
This commit is contained in:
parent
fc6879674e
commit
112b624257
2 changed files with 15 additions and 11 deletions
|
@ -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:
|
||||||
|
|
|
@ -90,7 +90,6 @@ public:
|
||||||
};
|
};
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
LAYER_SIDEMENU = 1,
|
|
||||||
LAYER_TRANSPARENT = 2,
|
LAYER_TRANSPARENT = 2,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue