diff --git a/data/gui/default/window/preferences/02_display.cfg b/data/gui/default/window/preferences/02_display.cfg index 7ea0a54f229b..074ca612a7d1 100644 --- a/data/gui/default/window/preferences/02_display.cfg +++ b/data/gui/default/window/preferences/02_display.cfg @@ -208,6 +208,21 @@ [/grid] [/column] [/row] + + [row] + [column] + horizontal_grow = true + {_GUI_PREFERENCES_CHECKBOX_ALIGN_BORDER} + {_GUI_PREFERENCES_MAIN_COMPOSITE_SLIDER + scaling_value ( _ "Percentage Font Scaling:") + scaling_slider ( + minimum_value,maximum_value=100,200 + step_size=5 + tooltip= _ "Set the scaling factor of fonts" + ) + } + [/column] + [/row] #enddef #define _GUI_PREFERENCES_DISPLAY_GRID_2 diff --git a/src/gui/dialogs/preferences_dialog.cpp b/src/gui/dialogs/preferences_dialog.cpp index 2c61b7c14af8..fd9c96a3a35d 100644 --- a/src/gui/dialogs/preferences_dialog.cpp +++ b/src/gui/dialogs/preferences_dialog.cpp @@ -554,6 +554,12 @@ void tpreferences::initialize_members(twindow& window) idle_anim(), idle_anim_rate(), set_idle_anim, set_idle_anim_rate, window); + /** FONT SCALING **/ + tslider& scale_slider = find_widget(&window, "scaling_slider", false); + scale_slider.set_value(font_scaling()); // This shouldn't be necessary, but it won't work without it... + register_integer("scaling_slider", false, font_scaling, set_font_scaling); + bind_status_label(scale_slider, "scaling_value", window); + /** SELECT THEME **/ connect_signal_mouse_left_click( find_widget(&window, "choose_theme", false), diff --git a/src/preferences.cpp b/src/preferences.cpp index 469f159bf025..05890ad3cdd0 100644 --- a/src/preferences.cpp +++ b/src/preferences.cpp @@ -411,6 +411,22 @@ void save_turbo_speed(const double speed) { prefs["turbo_speed"] = speed; } + +int font_scaling() +{ + // Clip at 50 because if it's too low it'll cause crashes + return std::max(50, prefs["font_scale"].to_int(100)); +} + +void set_font_scaling(int scale) +{ + prefs["font_scale"] = scale; +} + +int font_scaled(int size) +{ + return (size * font_scaling()) / 100; +} bool idle_anim() { diff --git a/src/preferences.hpp b/src/preferences.hpp index 2af6a17b944c..38564f46cf16 100644 --- a/src/preferences.hpp +++ b/src/preferences.hpp @@ -81,6 +81,10 @@ namespace preferences { double turbo_speed(); void save_turbo_speed(const double speed); + + int font_scaling(); + void set_font_scaling(int scale); + int font_scaled(int size); bool idle_anim(); void _set_idle_anim(const bool ison); diff --git a/src/text.cpp b/src/text.cpp index 6eb45c61d293..08a2ceaf60fe 100644 --- a/src/text.cpp +++ b/src/text.cpp @@ -24,6 +24,7 @@ #include "serialization/string_utils.hpp" #include "serialization/unicode.hpp" #include "tstring.hpp" +#include "preferences.hpp" #include @@ -404,8 +405,9 @@ ttext& ttext::set_family_class(font::family_class fclass) ttext& ttext::set_font_size(const unsigned font_size) { - if(font_size != font_size_) { - font_size_ = font_size; + unsigned int actual_size = preferences::font_scaled(font_size); + if(actual_size != font_size_) { + font_size_ = actual_size; calculation_dirty_ = true; surface_dirty_ = true; }