From 584ba11a5f52b674c4a6482df562338e872a9990 Mon Sep 17 00:00:00 2001 From: Celtic Minstrel Date: Sat, 21 Jan 2023 20:33:28 -0500 Subject: [PATCH] Apply the more advanced scaling options also to the editors --- rsrc/dialogs/pref-character.xml | 12 ++++++++++-- rsrc/dialogs/pref-scenario.xml | 12 ++++++++++-- src/pcedit/pc.main.cpp | 33 ++++++++++++++++++++++++++------ src/scenedit/scen.main.cpp | 34 +++++++++++++++++++++++++++------ 4 files changed, 75 insertions(+), 16 deletions(-) diff --git a/rsrc/dialogs/pref-character.xml b/rsrc/dialogs/pref-character.xml index ea26407a..141107a8 100644 --- a/rsrc/dialogs/pref-character.xml +++ b/rsrc/dialogs/pref-character.xml @@ -6,8 +6,16 @@ BoE Character Editor Preferences No Sounds - Apply UI scaling + Scale UI: + + 1 + 1.5 + 2 + 3 + 4 + + - + diff --git a/rsrc/dialogs/pref-scenario.xml b/rsrc/dialogs/pref-scenario.xml index 63f09175..31f1cbe3 100644 --- a/rsrc/dialogs/pref-scenario.xml +++ b/rsrc/dialogs/pref-scenario.xml @@ -6,8 +6,16 @@ BoE Scenario Editor Preferences No Sounds - Apply UI scaling + Scale UI: + + 1 + 1.5 + 2 + 3 + 4 + + - + diff --git a/src/pcedit/pc.main.cpp b/src/pcedit/pc.main.cpp index 1d69a16d..1415a5f3 100644 --- a/src/pcedit/pc.main.cpp +++ b/src/pcedit/pc.main.cpp @@ -515,11 +515,12 @@ bool prefs_event_filter (cDialog& me, std::string id, eKeyMod) { } if(!did_cancel) { - cLed& ui_scale = dynamic_cast(me["scaleui"]); - if(ui_scale.getState() == led_off) - set_pref("UIScaleCharEd", 1.0); - else if(ui_scale.getState() == led_red) - set_pref("UIScaleCharEd", 2.0); + std::string scale = dynamic_cast(me["scaleui"]).getSelected(); + if(scale == "1") set_pref("UIScaleCharEd", 1.0); + else if(scale == "1_5") set_pref("UIScaleCharEd", 1.5); + else if(scale == "2") set_pref("UIScaleCharEd", 2.0); + else if(scale == "3") set_pref("UIScaleCharEd", 3.0); + else if(scale == "4") set_pref("UIScaleCharEd", 4.0); set_pref("PlaySoundsCharEd", dynamic_cast(me["nosound"]).getState() == led_off); } save_prefs(); @@ -532,8 +533,28 @@ void pick_preferences() { cDialog prefsDlog(*ResMgr::dialogs.get("pref-character")); prefsDlog.attachClickHandlers(&prefs_event_filter, {"okay", "cancel"}); + cLedGroup& uiScale = dynamic_cast(prefsDlog["scaleui"]); double ui_scale = get_float_pref("UIScaleCharEd", 1.0); - dynamic_cast(prefsDlog["scaleui"]).setState(ui_scale == 1.0 ? led_off : (ui_scale == 2.0 ? led_red : led_green)); + if (ui_scale>0.95 && ui_scale<1.05) uiScale.setSelected("1"); + else if (ui_scale>1.45 && ui_scale<1.55) uiScale.setSelected("1_5"); + else if (ui_scale>1.95 && ui_scale<2.05) uiScale.setSelected("2"); + else if (ui_scale>2.95 && ui_scale<3.05) uiScale.setSelected("3"); + else if (ui_scale>3.95 && ui_scale<4.05) uiScale.setSelected("4"); + else uiScale.setSelected("other"); + + if(uiScale.getSelected() == "other") { + auto val = std::to_string(ui_scale); + while(val.length() > 2 && val[val.length() - 1] == val[val.length() - 2]) { + val.pop_back(); + } + while(val.length() > 1 && (val.back() == '.' || val.back() == '0')) { + val.pop_back(); + } + uiScale["other"].setText("Custom: " + val); + } else { + uiScale["other"].hide(); + } + dynamic_cast(prefsDlog["nosound"]).setState(get_bool_pref("PlaySoundsCharEd", true) ? led_off : led_red); prefsDlog.run(); diff --git a/src/scenedit/scen.main.cpp b/src/scenedit/scen.main.cpp index 91e8bc9b..f584736f 100644 --- a/src/scenedit/scen.main.cpp +++ b/src/scenedit/scen.main.cpp @@ -20,6 +20,7 @@ #include "fileio/fileio.hpp" #include "dialogxml/widgets/button.hpp" #include "dialogxml/widgets/led.hpp" +#include "dialogxml/widgets/ledgroup.hpp" #include "dialogxml/widgets/scrollbar.hpp" #include "tools/winutil.hpp" #include "tools/cursors.hpp" @@ -675,11 +676,12 @@ static bool prefs_event_filter (cDialog& me, std::string id, eKeyMod) { } if(!did_cancel) { - cLed& ui_scale = dynamic_cast(me["scaleui"]); - if(ui_scale.getState() == led_off) - set_pref("UIScaleScenEd", 1.0); - else if(ui_scale.getState() == led_red) - set_pref("UIScaleScenEd", 2.0); + std::string scale = dynamic_cast(me["scaleui"]).getSelected(); + if(scale == "1") set_pref("UIScaleScenEd", 1.0); + else if(scale == "1_5") set_pref("UIScaleScenEd", 1.5); + else if(scale == "2") set_pref("UIScaleScenEd", 2.0); + else if(scale == "3") set_pref("UIScaleScenEd", 3.0); + else if(scale == "4") set_pref("UIScaleScenEd", 4.0); set_pref("PlaySoundsScenEd", dynamic_cast(me["nosound"]).getState() == led_off); } save_prefs(); @@ -692,8 +694,28 @@ void pick_preferences() { cDialog prefsDlog(*ResMgr::dialogs.get("pref-scenario")); prefsDlog.attachClickHandlers(&prefs_event_filter, {"okay", "cancel"}); + cLedGroup& uiScale = dynamic_cast(prefsDlog["scaleui"]); double ui_scale = get_float_pref("UIScaleScenEd", 1.0); - dynamic_cast(prefsDlog["scaleui"]).setState(ui_scale == 1.0 ? led_off : (ui_scale == 2.0 ? led_red : led_green)); + if (ui_scale>0.95 && ui_scale<1.05) uiScale.setSelected("1"); + else if (ui_scale>1.45 && ui_scale<1.55) uiScale.setSelected("1_5"); + else if (ui_scale>1.95 && ui_scale<2.05) uiScale.setSelected("2"); + else if (ui_scale>2.95 && ui_scale<3.05) uiScale.setSelected("3"); + else if (ui_scale>3.95 && ui_scale<4.05) uiScale.setSelected("4"); + else uiScale.setSelected("other"); + + if(uiScale.getSelected() == "other") { + auto val = std::to_string(ui_scale); + while(val.length() > 2 && val[val.length() - 1] == val[val.length() - 2]) { + val.pop_back(); + } + while(val.length() > 1 && (val.back() == '.' || val.back() == '0')) { + val.pop_back(); + } + uiScale["other"].setText("Custom: " + val); + } else { + uiScale["other"].hide(); + } + dynamic_cast(prefsDlog["nosound"]).setState(get_bool_pref("PlaySoundsScenEd", true) ? led_off : led_red); prefsDlog.run();