Revert "refactor: use unique_ptr in some GUI elements"

This reverts commit e25d90651009ddf6ec15ef5604fa5b2902db0c08.
This commit is contained in:
Dimitris Panokostas 2025-01-16 08:57:57 +01:00
parent 8196671d57
commit 1e2edb3c49
No known key found for this signature in database
GPG Key ID: 330156A68E9E0929
4 changed files with 50 additions and 29 deletions

View File

@ -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<gcn::SDLTrueTypeFont>(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<gcn::SDLTrueTypeFont>(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);

View File

@ -156,19 +156,19 @@ static void InitShowMessage(const std::string& message)
if (gui_graphics == nullptr)
{
gui_graphics = std::make_unique<gcn::SDLGraphics>();
gui_graphics = new gcn::SDLGraphics();
gui_graphics->setTarget(gui_screen);
}
if (gui_input == nullptr)
{
gui_input = std::make_unique<gcn::SDLInput>();
gui_input = new gcn::SDLInput();
}
if (uae_gui == nullptr)
{
halt_gui = true;
uae_gui = std::make_unique<gcn::Gui>();
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;

View File

@ -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<gcn::Gui> 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<gcn::SDLInput> gui_input;
extern gcn::SDLInput* gui_input;
extern SDL_Surface* gui_screen;
extern SDL_Joystick* gui_joystick;
extern std::unique_ptr<gcn::SDLGraphics> gui_graphics;
extern std::unique_ptr<gcn::SDLTrueTypeFont> gui_font;
extern gcn::SDLGraphics* gui_graphics;
extern gcn::SDLTrueTypeFont* gui_font;
extern SDL_Texture* gui_texture;

View File

@ -141,18 +141,18 @@ SDL_Rect gui_window_rect{0, 0, GUI_WIDTH, GUI_HEIGHT};
/*
* Gui SDL stuff we need
*/
std::unique_ptr<gcn::SDLInput> gui_input;
std::unique_ptr<gcn::SDLGraphics> gui_graphics;
std::unique_ptr<gcn::SDLImageLoader> gui_imageLoader;
std::unique_ptr<gcn::SDLTrueTypeFont> 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<gcn::Gui> 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<gcn::FocusHandler> focusHdl;
std::unique_ptr<gcn::Widget> 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<gcn::SDLImageLoader>();
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::SDLGraphics>();
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<gcn::SDLInput>();
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<gcn::TextField*>(activeWidget.get()) == nullptr)
focusHdl = gui_top->_getFocusHandler();
activeWidget = focusHdl->getFocused();
if (dynamic_cast<gcn::TextField*>(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<gcn::Gui>();
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()