From 270d3fd482e820da47e2516ae27b4e20fff724d8 Mon Sep 17 00:00:00 2001 From: Celtic Minstrel Date: Sun, 14 Feb 2016 23:11:03 -0500 Subject: [PATCH] Preferences: Implement a font scaling option This is currently incomplete - it only works for GUI2 text. --- .../default/window/preferences/02_display.cfg | 14 ++++++++++++++ src/gui/dialogs/preferences_dialog.cpp | 9 +++++++-- src/gui/dialogs/preferences_dialog.hpp | 3 ++- src/preferences.cpp | 16 ++++++++++++++++ src/preferences.hpp | 4 ++++ src/text.cpp | 6 ++++-- 6 files changed, 47 insertions(+), 5 deletions(-) diff --git a/data/gui/default/window/preferences/02_display.cfg b/data/gui/default/window/preferences/02_display.cfg index 7ea0a54f229b..08e48d723f66 100644 --- a/data/gui/default/window/preferences/02_display.cfg +++ b/data/gui/default/window/preferences/02_display.cfg @@ -208,6 +208,20 @@ [/grid] [/column] [/row] + + [row] + [column] + horizontal_grow = true + {_GUI_PREFERENCES_MAIN_COMPOSITE_SLIDER + scaling_value ( _ "Font scale:") + 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 f422a4dab00a..bceb9a8f80fa 100644 --- a/src/gui/dialogs/preferences_dialog.cpp +++ b/src/gui/dialogs/preferences_dialog.cpp @@ -277,10 +277,10 @@ void tpreferences::bind_status_label(T& parent, const std::string& label_id, } void tpreferences::bind_status_label(tslider& parent, const std::string& label_id, - twidget& find_in) + twidget& find_in, const std::string& suffix) { tcontrol& label = find_widget(&find_in, label_id, false); - label.set_label(lexical_cast(parent.get_value_label())); + label.set_label(lexical_cast(parent.get_value_label()) + suffix); connect_signal_notify_modified(parent, boost::bind( &tpreferences::status_label_callback, @@ -554,6 +554,11 @@ 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); + setup_single_slider("scaling_slider", font_scaling(), set_font_scaling, window); + 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/gui/dialogs/preferences_dialog.hpp b/src/gui/dialogs/preferences_dialog.hpp index 4242c0814bd7..9f7104e46461 100644 --- a/src/gui/dialogs/preferences_dialog.hpp +++ b/src/gui/dialogs/preferences_dialog.hpp @@ -172,7 +172,8 @@ class tpreferences : public tdialog void bind_status_label( tslider& parent, const std::string& label_id, - twidget& find_in); + twidget& find_in, + const std::string& suffix = ""); template void status_label_callback(T& parent_widget, 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; }