diff --git a/rsrc/dialogs/preferences.xml b/rsrc/dialogs/preferences.xml
index a37526bd..8b96f093 100644
--- a/rsrc/dialogs/preferences.xml
+++ b/rsrc/dialogs/preferences.xml
@@ -38,8 +38,24 @@
Make game easier (monsters much weaker)
Fewer wandering monsters
Skip splash screen on startup
- Apply UI scaling
-
-
+ Scale UI:
+
+ 1
+ 1.5
+ 2
+ 3
+ 4
+ other
+
+ Scale Map:
+
+ 1
+ 1.5
+ 2
+ 3
+ 4
+ other
+
+
diff --git a/src/game/boe.dlgutil.cpp b/src/game/boe.dlgutil.cpp
index bf97c037..ae56c397 100644
--- a/src/game/boe.dlgutil.cpp
+++ b/src/game/boe.dlgutil.cpp
@@ -1147,11 +1147,28 @@ static bool prefs_event_filter (cDialog& me, std::string id, eKeyMod) {
if(dynamic_cast(me["resethelp"]).getState() == led_red) {
reset_help = true;
}
- cLed& ui_scale = dynamic_cast(me["scaleui"]);
- if(ui_scale.getState() == led_off)
+ std::string scale = dynamic_cast(me["scaleui"]).getSelected();
+ if(scale == "1")
set_pref("UIScale", 1.0);
- else if(ui_scale.getState() == led_red)
+ else if(scale == "1_5")
+ set_pref("UIScale", 1.5);
+ else if(scale == "2")
set_pref("UIScale", 2.0);
+ else if(scale == "3")
+ set_pref("UIScale", 3.0);
+ else if(scale == "4")
+ set_pref("UIScale", 4.0);
+ std::string scale_map = dynamic_cast(me["scalemap"]).getSelected();
+ if(scale_map == "1")
+ set_pref("UIScaleMap", 1.0);
+ else if(scale_map == "1_5")
+ set_pref("UIScaleMap", 1.5);
+ else if(scale_map == "2")
+ set_pref("UIScaleMap", 2.0);
+ else if(scale_map == "3")
+ set_pref("UIScaleMap", 3.0);
+ else if(scale_map == "4")
+ set_pref("UIScaleMap", 4.0);
}
save_prefs(reset_help);
return true;
@@ -1215,15 +1232,30 @@ void pick_preferences() {
break;
}
+ cLedGroup& uiScale = dynamic_cast(prefsDlog["scaleui"]);
float ui_scale = get_float_pref("UIScale", 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");
+
+ cLedGroup& uiMapScale = dynamic_cast(prefsDlog["scalemap"]);
+ float ui_map_scale = get_float_pref("UIScaleMap", 1.0);
+ if (ui_map_scale>0.95 && ui_map_scale<1.05) uiMapScale.setSelected("1");
+ else if (ui_map_scale>1.45 && ui_map_scale<1.55) uiMapScale.setSelected("1_5");
+ else if (ui_map_scale>1.95 && ui_map_scale<2.05) uiMapScale.setSelected("2");
+ else if (ui_map_scale>2.95 && ui_map_scale<3.05) uiMapScale.setSelected("3");
+ else if (ui_map_scale>3.95 && ui_map_scale<4.05) uiMapScale.setSelected("4");
+ else uiMapScale.setSelected("other");
+
void (*give_help)(short,short,cDialog&) = ::give_help;
int store_display_mode = get_int_pref("DisplayMode");
prefsDlog.run(std::bind(give_help, 55, 0, std::ref(prefsDlog)));
- if(get_int_pref("DisplayMode") != store_display_mode || get_float_pref("UIScale") != ui_scale)
+ if(get_int_pref("DisplayMode") != store_display_mode || get_float_pref("UIScale") != ui_scale || get_float_pref("UIScaleMap") != ui_map_scale)
changed_display_mode = true;
}
diff --git a/src/game/boe.items.cpp b/src/game/boe.items.cpp
index dd43df98..a7bfed00 100644
--- a/src/game/boe.items.cpp
+++ b/src/game/boe.items.cpp
@@ -673,7 +673,7 @@ short get_num_of_items(short max_num) {
}
void init_mini_map() {
- float ui_scale = get_float_pref("UIScale", 1.0);
+ float ui_scale = get_float_pref("UIScaleMap", 1.0);
if (ui_scale < 0.1) ui_scale = 1.0;
if (mini_map.isOpen()) mini_map.close();
mini_map.create(sf::VideoMode(ui_scale*296,ui_scale*277), "Map", sf::Style::Titlebar | sf::Style::Close);