From 5a0b15a30c9ffb653d5534249825e7fbff5c676c Mon Sep 17 00:00:00 2001 From: CodingJellyfish Date: Tue, 10 Sep 2024 23:33:58 +0800 Subject: [PATCH] Change skin font reload logic --- src/states_screens/options/options_screen_ui.cpp | 13 ++++++++----- src/states_screens/options/options_screen_ui.hpp | 2 +- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/src/states_screens/options/options_screen_ui.cpp b/src/states_screens/options/options_screen_ui.cpp index 58090152195..f868320db54 100644 --- a/src/states_screens/options/options_screen_ui.cpp +++ b/src/states_screens/options/options_screen_ui.cpp @@ -460,14 +460,14 @@ void OptionsScreenUI::eventCallback(Widget* widget, const std::string& name, con m_active_base_skin = m_base_skin_selector->getStringValue(); loadCurrentSkinVariants(); UserConfigParams::m_skin_file = getCurrentSpinnerSkin(); - onSkinChange(); + onSkinChange(false); m_reload_option->m_focus_name = "base_skinchoice"; m_reload_option->m_focus_right = m_base_skin_selector->isButtonSelected(true/*right*/); } else if (name == "variant_skinchoice") { UserConfigParams::m_skin_file = getCurrentSpinnerSkin(); - onSkinChange(); + onSkinChange(true); m_reload_option->m_focus_name = "variant_skinchoice"; m_reload_option->m_focus_right = m_variant_skin_selector->isButtonSelected(true/*right*/); } @@ -648,14 +648,17 @@ void OptionsScreenUI::reloadGUIEngine() } // reloadGUIEngine // ----------------------------------------------------------------------------- -void OptionsScreenUI::onSkinChange() +void OptionsScreenUI::onSkinChange(bool is_variant) { - bool prev_font = GUIEngine::getSkin()->hasFont(); + bool change_font = GUIEngine::getSkin()->hasFont(); irr_driver->unsetMaxTextureSize(); GUIEngine::reloadSkin(); // Reload GUIEngine will clear widgets and set max texture Size so we don't do that here m_reload_option = std::unique_ptr(new ReloadOption); - m_reload_option->m_reload_font = prev_font != GUIEngine::getSkin()->hasFont(); + // Check either old or new skin use custom_font + change_font |= GUIEngine::getSkin()->hasFont(); + // Assume skin variants use the same font set + m_reload_option->m_reload_font = change_font && !is_variant; m_reload_option->m_reload_skin = true; } // onSkinChange diff --git a/src/states_screens/options/options_screen_ui.hpp b/src/states_screens/options/options_screen_ui.hpp index 5acd22878bd..a8d23694bf7 100644 --- a/src/states_screens/options/options_screen_ui.hpp +++ b/src/states_screens/options/options_screen_ui.hpp @@ -65,7 +65,7 @@ class OptionsScreenUI : public GUIEngine::Screen, public GUIEngine::ScreenSingle int getBaseID(SkinID skin); int getVariantID(SkinID skin); std::string getCurrentSpinnerSkin(); - void onSkinChange(); + void onSkinChange(bool is_variant); public: friend class GUIEngine::ScreenSingleton;