From f47b00426a1b84d8c5c8fe24c5b7018c27195513 Mon Sep 17 00:00:00 2001 From: Desour Date: Tue, 22 Aug 2023 19:21:02 +0200 Subject: [PATCH] Revert "Get rid of guiroot" This reverts commit 45e7a800575f6d96ea307d99f1945aeb6c22a4e1. --- src/client/clientlauncher.cpp | 12 ++++++++++-- src/client/game.cpp | 8 ++++---- src/client/gameui.cpp | 2 -- src/gui/guiFormSpecMenu.cpp | 6 +++--- src/gui/mainmenumanager.h | 2 +- 5 files changed, 18 insertions(+), 12 deletions(-) diff --git a/src/client/clientlauncher.cpp b/src/client/clientlauncher.cpp index b7b58cff6..72452f9c2 100644 --- a/src/client/clientlauncher.cpp +++ b/src/client/clientlauncher.cpp @@ -42,6 +42,7 @@ with this program; if not, write to the Free Software Foundation, Inc., /* mainmenumanager.h */ gui::IGUIEnvironment *guienv = nullptr; +gui::IGUIStaticText *guiroot = nullptr; MainMenuManager g_menumgr; bool isMenuActive() @@ -217,6 +218,14 @@ bool ClientLauncher::run(GameStartData &start_data, const Settings &cmd_args) m_rendering_engine->get_gui_env()->clear(); + /* + We need some kind of a root node to be able to add + custom gui elements directly on the screen. + Otherwise they won't be automatically drawn. + */ + guiroot = m_rendering_engine->get_gui_env()->addStaticText(L"", + core::rect(0, 0, 10000, 10000)); + bool game_has_run = launch_game(error_message, reconnect_requested, start_data, cmd_args); @@ -547,8 +556,7 @@ void ClientLauncher::main_menu(MainMenuData *menudata) #endif /* show main menu */ - GUIEngine mymenu(&input->joystick, m_rendering_engine->get_gui_env()->getRootGUIElement(), - m_rendering_engine, &g_menumgr, menudata, *kill); + GUIEngine mymenu(&input->joystick, guiroot, m_rendering_engine, &g_menumgr, menudata, *kill); /* leave scene manager in a clean state */ m_rendering_engine->get_scene_manager()->clear(); diff --git a/src/client/game.cpp b/src/client/game.cpp index 7b6201513..928f67e82 100644 --- a/src/client/game.cpp +++ b/src/client/game.cpp @@ -1806,19 +1806,19 @@ inline bool Game::handleCallbacks() } if (g_gamecallback->changepassword_requested) { - (new GUIPasswordChange(guienv, guienv->getRootGUIElement(), -1, + (new GUIPasswordChange(guienv, guiroot, -1, &g_menumgr, client, texture_src))->drop(); g_gamecallback->changepassword_requested = false; } if (g_gamecallback->changevolume_requested) { - (new GUIVolumeChange(guienv, guienv->getRootGUIElement(), -1, + (new GUIVolumeChange(guienv, guiroot, -1, &g_menumgr, texture_src))->drop(); g_gamecallback->changevolume_requested = false; } if (g_gamecallback->keyconfig_requested) { - (new GUIKeyChangeMenu(guienv, guienv->getRootGUIElement(), -1, + (new GUIKeyChangeMenu(guienv, guiroot, -1, &g_menumgr, texture_src))->drop(); g_gamecallback->keyconfig_requested = false; } @@ -4150,7 +4150,7 @@ void Game::updateFrame(ProfilerGraph *graph, RunStats *stats, f32 dtime, } if (isMenuActive()) - m_rendering_engine->get_gui_env()->getRootGUIElement()->bringToFront(formspec); + guiroot->bringToFront(formspec); } while (false); /* diff --git a/src/client/gameui.cpp b/src/client/gameui.cpp index 4cc68fa10..d448eadd6 100644 --- a/src/client/gameui.cpp +++ b/src/client/gameui.cpp @@ -53,8 +53,6 @@ GameUI::GameUI() } void GameUI::init() { - IGUIElement *guiroot = guienv->getRootGUIElement(); - // First line of debug text m_guitext = gui::StaticText::add(guienv, utf8_to_wide(PROJECT_NAME_C).c_str(), core::rect(0, 0, 0, 0), false, true, guiroot); diff --git a/src/gui/guiFormSpecMenu.cpp b/src/gui/guiFormSpecMenu.cpp index 5ab000d6b..0e662b282 100644 --- a/src/gui/guiFormSpecMenu.cpp +++ b/src/gui/guiFormSpecMenu.cpp @@ -139,9 +139,9 @@ void GUIFormSpecMenu::create(GUIFormSpecMenu *&cur_formspec, Client *client, TextDest *txt_dest, const std::string &formspecPrepend, ISoundManager *sound_manager) { if (cur_formspec == nullptr) { - cur_formspec = new GUIFormSpecMenu(joystick, guienv->getRootGUIElement(), - -1, &g_menumgr, client, guienv, client->getTextureSource(), sound_manager, - fs_src, txt_dest, formspecPrepend); + cur_formspec = new GUIFormSpecMenu(joystick, guiroot, -1, &g_menumgr, + client, guienv, client->getTextureSource(), sound_manager, fs_src, + txt_dest, formspecPrepend); cur_formspec->doPause = false; /* diff --git a/src/gui/mainmenumanager.h b/src/gui/mainmenumanager.h index b86d1892a..76d357340 100644 --- a/src/gui/mainmenumanager.h +++ b/src/gui/mainmenumanager.h @@ -38,8 +38,8 @@ public: virtual void signalKeyConfigChange() = 0; }; -// FIXME: do we really need this global variable? extern gui::IGUIEnvironment *guienv; +extern gui::IGUIStaticText *guiroot; // Handler for the modal menus