From 1e2edb3c497f997ebbe91857b608e1500b761da9 Mon Sep 17 00:00:00 2001 From: Dimitris Panokostas Date: Thu, 16 Jan 2025 08:57:57 +0100 Subject: [PATCH] Revert "refactor: use unique_ptr in some GUI elements" This reverts commit e25d90651009ddf6ec15ef5604fa5b2902db0c08. --- src/osdep/amiberry_gui.cpp | 6 ++--- src/osdep/gui/ShowMessage.cpp | 18 ++++++++++---- src/osdep/gui/gui_handling.h | 8 +++--- src/osdep/gui/main_window.cpp | 47 ++++++++++++++++++++++------------- 4 files changed, 50 insertions(+), 29 deletions(-) diff --git a/src/osdep/amiberry_gui.cpp b/src/osdep/amiberry_gui.cpp index 5372bedf..80cd8156 100644 --- a/src/osdep/amiberry_gui.cpp +++ b/src/osdep/amiberry_gui.cpp @@ -1985,7 +1985,7 @@ void apply_theme() // Check if the font_name contains the full path to the file (e.g. in /usr/share/fonts) if (my_existsfile2(gui_theme.font_name.c_str())) { - gui_font = std::make_unique(gui_theme.font_name, gui_theme.font_size); + gui_font = new gcn::SDLTrueTypeFont(gui_theme.font_name, gui_theme.font_size); } else { @@ -1993,7 +1993,7 @@ void apply_theme() std::string font = get_data_path(); font.append(gui_theme.font_name); if (my_existsfile2(font.c_str())) - gui_font = std::make_unique(font, gui_theme.font_size); + gui_font = new gcn::SDLTrueTypeFont(font, gui_theme.font_size); else { // If the font file was not found in the data directory, fallback to a system font @@ -2019,7 +2019,7 @@ void apply_theme() write_log("An error occurred while trying to open the GUI font! Exception: %s\n", ex.what()); abort(); } - gcn::Widget::setGlobalFont(gui_font.get()); + gcn::Widget::setGlobalFont(gui_font); gcn::Widget::setWidgetsBaseColor(gui_base_color); gcn::Widget::setWidgetsForegroundColor(gui_foreground_color); gcn::Widget::setWidgetsBackgroundColor(gui_background_color); diff --git a/src/osdep/gui/ShowMessage.cpp b/src/osdep/gui/ShowMessage.cpp index 90a41602..ac811f2b 100644 --- a/src/osdep/gui/ShowMessage.cpp +++ b/src/osdep/gui/ShowMessage.cpp @@ -156,19 +156,19 @@ static void InitShowMessage(const std::string& message) if (gui_graphics == nullptr) { - gui_graphics = std::make_unique(); + gui_graphics = new gcn::SDLGraphics(); gui_graphics->setTarget(gui_screen); } if (gui_input == nullptr) { - gui_input = std::make_unique(); + gui_input = new gcn::SDLInput(); } if (uae_gui == nullptr) { halt_gui = true; - uae_gui = std::make_unique(); - uae_gui->setGraphics(gui_graphics.get()); - uae_gui->setInput(gui_input.get()); + uae_gui = new gcn::Gui(); + uae_gui->setGraphics(gui_graphics); + uae_gui->setInput(gui_input); } if (gui_top == nullptr) { @@ -259,6 +259,14 @@ static void ExitShowMessage() if (halt_gui) { + delete uae_gui; + uae_gui = nullptr; + delete gui_input; + gui_input = nullptr; + delete gui_graphics; + gui_graphics = nullptr; + delete gui_font; + gui_font = nullptr; delete gui_top; gui_top = nullptr; diff --git a/src/osdep/gui/gui_handling.h b/src/osdep/gui/gui_handling.h index 67fd0118..a3991a8c 100644 --- a/src/osdep/gui/gui_handling.h +++ b/src/osdep/gui/gui_handling.h @@ -173,8 +173,8 @@ extern bool gui_running; extern gcn::Container* selectors; extern gcn::ScrollArea* selectorsScrollArea; extern ConfigCategory categories[]; +extern gcn::Gui* uae_gui; extern gcn::Container* gui_top; -extern std::unique_ptr uae_gui; // GUI Colors extern amiberry_gui_theme gui_theme; @@ -186,12 +186,12 @@ extern gcn::Color gui_selection_color; extern gcn::Color gui_foreground_color; extern gcn::Color gui_font_color; -extern std::unique_ptr gui_input; +extern gcn::SDLInput* gui_input; extern SDL_Surface* gui_screen; extern SDL_Joystick* gui_joystick; -extern std::unique_ptr gui_graphics; -extern std::unique_ptr gui_font; +extern gcn::SDLGraphics* gui_graphics; +extern gcn::SDLTrueTypeFont* gui_font; extern SDL_Texture* gui_texture; diff --git a/src/osdep/gui/main_window.cpp b/src/osdep/gui/main_window.cpp index 3d4e8c62..5b01ee13 100644 --- a/src/osdep/gui/main_window.cpp +++ b/src/osdep/gui/main_window.cpp @@ -141,18 +141,18 @@ SDL_Rect gui_window_rect{0, 0, GUI_WIDTH, GUI_HEIGHT}; /* * Gui SDL stuff we need */ -std::unique_ptr gui_input; -std::unique_ptr gui_graphics; -std::unique_ptr gui_imageLoader; -std::unique_ptr gui_font; +gcn::SDLInput* gui_input; +gcn::SDLGraphics* gui_graphics; +gcn::SDLImageLoader* gui_imageLoader; +gcn::SDLTrueTypeFont* gui_font; /* * Gui stuff we need */ +gcn::Gui* uae_gui; gcn::Container* gui_top; gcn::Container* selectors; gcn::ScrollArea* selectorsScrollArea; -std::unique_ptr uae_gui; // GUI Colors gcn::Color gui_base_color; @@ -163,8 +163,8 @@ gcn::Color gui_selection_color; gcn::Color gui_foreground_color; gcn::Color gui_font_color; -std::unique_ptr focusHdl; -std::unique_ptr activeWidget; +gcn::FocusHandler* focusHdl; +gcn::Widget* activeWidget; // Main buttons gcn::Button* cmdQuit; @@ -392,24 +392,31 @@ void amiberry_gui_init() // Create helpers for GUI framework //------------------------------------------------- - gui_imageLoader = std::make_unique(); + gui_imageLoader = new gcn::SDLImageLoader(); gui_imageLoader->setRenderer(mon->gui_renderer); // The ImageLoader in use is static and must be set to be // able to load images - gcn::Image::setImageLoader(gui_imageLoader.get()); - gui_graphics = std::make_unique(); + gcn::Image::setImageLoader(gui_imageLoader); + gui_graphics = new gcn::SDLGraphics(); // Set the target for the graphics object to be the screen. // In other words, we will draw to the screen. // Note, any surface will do, it doesn't have to be the screen. gui_graphics->setTarget(gui_screen); - gui_input = std::make_unique(); + gui_input = new gcn::SDLInput(); } void amiberry_gui_halt() { AmigaMonitor* mon = &AMonitors[0]; + delete gui_imageLoader; + gui_imageLoader = nullptr; + delete gui_input; + gui_input = nullptr; + delete gui_graphics; + gui_graphics = nullptr; + if (gui_screen != nullptr) { SDL_FreeSurface(gui_screen); @@ -708,9 +715,9 @@ void check_input() //------------------------------------------------- // Quit entire program via Q on keyboard //------------------------------------------------- - focusHdl.reset(gui_top->_getFocusHandler()); - activeWidget.reset(focusHdl->getFocused()); - if (dynamic_cast(activeWidget.get()) == nullptr) + focusHdl = gui_top->_getFocusHandler(); + activeWidget = focusHdl->getFocused(); + if (dynamic_cast(activeWidget) == nullptr) { // ...but only if we are not in a Textfield... uae_quit(); @@ -1016,9 +1023,9 @@ void gui_widgets_init() //------------------------------------------------- // Create GUI //------------------------------------------------- - uae_gui = std::make_unique(); - uae_gui->setGraphics(gui_graphics.get()); - uae_gui->setInput(gui_input.get()); + uae_gui = new gcn::Gui(); + uae_gui->setGraphics(gui_graphics); + uae_gui->setInput(gui_input); //------------------------------------------------- // Initialize fonts @@ -1197,9 +1204,15 @@ void gui_widgets_halt() delete cmdRestart; delete cmdStart; delete cmdHelp; + delete mainButtonActionListener; + + delete gui_font; + gui_font = nullptr; delete gui_top; gui_top = nullptr; + delete uae_gui; + uae_gui = nullptr; } void refresh_all_panels()