265 lines
9.9 KiB
Diff
265 lines
9.9 KiB
Diff
From f167fb10f164ff720774cbb51f3ce5edb0f664f5 Mon Sep 17 00:00:00 2001
|
|
From: Juanjo <juanjo.ng.83@gmail.com>
|
|
Date: Sat, 27 Jul 2013 22:04:33 +0000
|
|
Subject: [PATCH 202/249] Add a setting for automatically set min sizing
|
|
values.
|
|
|
|
---
|
|
src/cheat_gui.cpp | 9 +++---
|
|
src/gfx.cpp | 2 ++
|
|
src/industry_gui.cpp | 2 +-
|
|
src/lang/english.txt | 2 ++
|
|
src/misc_gui.cpp | 4 ++-
|
|
src/settings_gui.h | 4 +--
|
|
src/settings_type.h | 1 +
|
|
src/table/misc_settings.ini | 5 ++++
|
|
src/window.cpp | 72 +++++++++++++++++++++++++++++++++++++++++++++
|
|
src/window_func.h | 1 +
|
|
10 files changed, 94 insertions(+), 8 deletions(-)
|
|
|
|
diff --git a/src/cheat_gui.cpp b/src/cheat_gui.cpp
|
|
index 01ea1a4..db61024 100644
|
|
--- a/src/cheat_gui.cpp
|
|
+++ b/src/cheat_gui.cpp
|
|
@@ -287,7 +287,7 @@ struct CheatWindow : Window {
|
|
{
|
|
const NWidgetBase *wid = this->GetWidget<NWidgetBase>(WID_C_PANEL);
|
|
|
|
- if ((pt.y - wid->pos_y - WD_FRAMERECT_TOP - this->header_height) % this->line_height > SETTING_BUTTON_HEIGHT) return;
|
|
+ if ((pt.y - wid->pos_y - WD_FRAMERECT_TOP - this->header_height) % this->line_height > (uint)SETTING_BUTTON_HEIGHT) return;
|
|
|
|
uint btn = (pt.y - wid->pos_y - WD_FRAMERECT_TOP - this->header_height) / this->line_height;
|
|
uint x = pt.x - wid->pos_x;
|
|
@@ -300,7 +300,7 @@ struct CheatWindow : Window {
|
|
int value = (int32)ReadValue(ce->variable, ce->type);
|
|
int oldvalue = value;
|
|
|
|
- if (btn == CHT_CHANGE_DATE && x >= 20 + SETTING_BUTTON_WIDTH) {
|
|
+ if (btn == CHT_CHANGE_DATE && x >= (20 + (uint)SETTING_BUTTON_WIDTH)) {
|
|
/* Click at the date text directly. */
|
|
SetDParam(0, value);
|
|
ShowQueryString(STR_JUST_INT, STR_CHEAT_CHANGE_DATE_QUERY_CAPT, 8, this, CS_NUMERAL, QSF_ACCEPT_UNCHANGED);
|
|
@@ -320,10 +320,11 @@ struct CheatWindow : Window {
|
|
|
|
default:
|
|
/* Take whatever the function returns */
|
|
- value = ce->proc(value + ((x >= 20 + SETTING_BUTTON_WIDTH / 2) ? 1 : -1), (x >= 20 + SETTING_BUTTON_WIDTH / 2) ? 1 : -1);
|
|
+ bool clicked_right = x >= 20 + (uint)(SETTING_BUTTON_WIDTH / 2);
|
|
+ value = ce->proc(value + (clicked_right ? 1 : -1), clicked_right ? 1 : -1);
|
|
|
|
/* The first cheat (money), doesn't return a different value. */
|
|
- if (value != oldvalue || btn == CHT_MONEY) this->clicked = btn * 2 + 1 + ((x >= 20 + SETTING_BUTTON_WIDTH / 2) != rtl ? 1 : 0);
|
|
+ if (value != oldvalue || btn == CHT_MONEY) this->clicked = btn * 2 + 1 + (clicked_right != rtl ? 1 : 0);
|
|
break;
|
|
}
|
|
|
|
diff --git a/src/gfx.cpp b/src/gfx.cpp
|
|
index eabb49c..5c2cdc2 100644
|
|
--- a/src/gfx.cpp
|
|
+++ b/src/gfx.cpp
|
|
@@ -1230,6 +1230,8 @@ void ScreenSizeChanged()
|
|
|
|
/* screen size changed and the old bitmap is invalid now, so we don't want to undraw it */
|
|
_cursor.visible = false;
|
|
+
|
|
+ CheckWindowMinSizings();
|
|
}
|
|
|
|
void UndrawMouseCursor()
|
|
diff --git a/src/industry_gui.cpp b/src/industry_gui.cpp
|
|
index 5c88ca9..8619a17 100644
|
|
--- a/src/industry_gui.cpp
|
|
+++ b/src/industry_gui.cpp
|
|
@@ -842,7 +842,7 @@ public:
|
|
|
|
case EA_RATE:
|
|
if (pt.y >= this->production_offset_y) {
|
|
- if ((pt.y - this->production_offset_y) % GetMinSizing(NWST_STEP, FONT_HEIGHT_NORMAL) > SETTING_BUTTON_HEIGHT) break;;
|
|
+ if ((pt.y - this->production_offset_y) % GetMinSizing(NWST_STEP, FONT_HEIGHT_NORMAL) > (uint)SETTING_BUTTON_HEIGHT) break;;
|
|
|
|
int row = (pt.y - this->production_offset_y) / GetMinSizing(NWST_STEP, FONT_HEIGHT_NORMAL);
|
|
for (uint j = 0; j < lengthof(i->produced_cargo); j++) {
|
|
diff --git a/src/lang/english.txt b/src/lang/english.txt
|
|
index d67f2de..155b73e 100644
|
|
--- a/src/lang/english.txt
|
|
+++ b/src/lang/english.txt
|
|
@@ -976,6 +976,8 @@ STR_GAME_OPTIONS_BASE_MUSIC_STATUS :{RED}{NUM} corr
|
|
STR_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :{BLACK}Additional information about the base music set
|
|
|
|
STR_ERROR_FULLSCREEN_FAILED :{WHITE}Fullscreen mode failed
|
|
+STR_ERROR_RESET_WINDOWS :{WHITE}All windows have been reseted...
|
|
+STR_ERROR_AUTOMATIC_SIZING :{WHITE}Sizes of buttons and fonts have changed
|
|
|
|
# Custom currency window
|
|
|
|
diff --git a/src/misc_gui.cpp b/src/misc_gui.cpp
|
|
index f65dcdd..dbbde57 100644
|
|
--- a/src/misc_gui.cpp
|
|
+++ b/src/misc_gui.cpp
|
|
@@ -623,6 +623,8 @@ static WindowDesc _tool_tips_desc(
|
|
_nested_tooltips_widgets, lengthof(_nested_tooltips_widgets)
|
|
);
|
|
|
|
+uint _tooltip_width = 194;
|
|
+
|
|
/** Window for displaying a tooltip. */
|
|
struct TooltipsWindow : public Window
|
|
{
|
|
@@ -671,7 +673,7 @@ struct TooltipsWindow : public Window
|
|
/* There is only one widget. */
|
|
for (uint i = 0; i != this->paramcount; i++) SetDParam(i, this->params[i]);
|
|
|
|
- size->width = min(GetStringBoundingBox(this->string_id).width, 194);
|
|
+ size->width = min(GetStringBoundingBox(this->string_id).width, _tooltip_width);
|
|
size->height = GetStringHeight(this->string_id, size->width);
|
|
|
|
/* Increase slightly to have some space around the box. */
|
|
diff --git a/src/settings_gui.h b/src/settings_gui.h
|
|
index 2ca418b..bb2a1ec 100644
|
|
--- a/src/settings_gui.h
|
|
+++ b/src/settings_gui.h
|
|
@@ -14,8 +14,8 @@
|
|
|
|
#include "gfx_type.h"
|
|
|
|
-static const int SETTING_BUTTON_WIDTH = 20; ///< Width of setting buttons
|
|
-static const int SETTING_BUTTON_HEIGHT = 10; ///< Height of setting buttons
|
|
+extern int SETTING_BUTTON_WIDTH; ///< Width of setting buttons
|
|
+extern int SETTING_BUTTON_HEIGHT; ///< Height of setting buttons
|
|
|
|
void DrawArrowButtons(int x, int y, Colours button_colour, byte state, bool clickable_left, bool clickable_right);
|
|
void DrawDropDownButton(int x, int y, Colours button_colour, bool state, bool clickable);
|
|
diff --git a/src/settings_type.h b/src/settings_type.h
|
|
index aa0e2a4..93b9cfb 100644
|
|
--- a/src/settings_type.h
|
|
+++ b/src/settings_type.h
|
|
@@ -79,6 +79,7 @@ struct GUISettings {
|
|
bool vehicle_income_warn; ///< if a vehicle isn't generating income, show a warning
|
|
uint min_button; ///< min size of most button widgets
|
|
uint min_step; ///< min size of scrollbar/dropdown elements
|
|
+ bool manage_min_sizing; ///< automatically set min_button and min_step
|
|
bool show_finances; ///< show finances at end of year
|
|
bool sg_new_nonstop; ///< ttdpatch compatible nonstop handling read from pre v93 savegames
|
|
bool new_nonstop; ///< ttdpatch compatible nonstop handling
|
|
diff --git a/src/table/misc_settings.ini b/src/table/misc_settings.ini
|
|
index 0b02e69..fd0207c 100644
|
|
--- a/src/table/misc_settings.ini
|
|
+++ b/src/table/misc_settings.ini
|
|
@@ -228,6 +228,11 @@ min = 0
|
|
max = 100
|
|
cat = SC_EXPERT
|
|
|
|
+[SDTG_BOOL]
|
|
+name = ""manage_min_sizing""
|
|
+var = _settings_client.gui.manage_min_sizing
|
|
+def = false
|
|
+
|
|
[SDTG_VAR]
|
|
name = ""min_step_size""
|
|
type = SLE_UINT
|
|
diff --git a/src/window.cpp b/src/window.cpp
|
|
index 903a56f..60153bc 100644
|
|
--- a/src/window.cpp
|
|
+++ b/src/window.cpp
|
|
@@ -36,6 +36,14 @@
|
|
#include "error.h"
|
|
#include "game/game.hpp"
|
|
#include "video/video_driver.hpp"
|
|
+#include "settings_gui.h"
|
|
+#include "fontcache.h"
|
|
+#include "error.h"
|
|
+#include "station_base.h"
|
|
+#include "waypoint_base.h"
|
|
+#include "command_func.h"
|
|
+
|
|
+#include "table/strings.h"
|
|
|
|
/** Values for _settings_client.gui.auto_scrolling */
|
|
enum ViewportAutoscrolling {
|
|
@@ -1787,6 +1795,70 @@ Window *FindWindowFromPt(int x, int y)
|
|
return NULL;
|
|
}
|
|
|
|
+int SETTING_BUTTON_WIDTH = 20;
|
|
+int SETTING_BUTTON_HEIGHT = 10;
|
|
+
|
|
+/**
|
|
+ * Set button size of settings. If automatic sizing is also enabled, it also sets
|
|
+ * the sizing of buttons, scrollbars and font size (recommend restart).
|
|
+ * @todo Check if it can be moved to another file, so we do not need to include error, string and fontcache headers.
|
|
+ * @todo Fix magic numbers 16/18/20/30/32
|
|
+ */
|
|
+void CheckWindowMinSizings()
|
|
+{
|
|
+ if (_settings_client.gui.manage_min_sizing) {
|
|
+ /* Fill the min sizing values for the current resolution. */
|
|
+ uint swap_x = 32; // in longest border, let main toolbar to have 30 buttons.
|
|
+ uint swap_y = 16; // if short border, let main toolbar have 16/18/20 buttons..)
|
|
+ if (_cur_resolution.width < _cur_resolution.height) Swap(swap_x, swap_y);
|
|
+ _settings_client.gui.min_button = min(_cur_resolution.width / swap_x, _cur_resolution.height / swap_y);
|
|
+ _settings_client.gui.min_step = _settings_client.gui.min_button * 3 / 4;
|
|
+ }
|
|
+
|
|
+ SETTING_BUTTON_HEIGHT = max<int>(GetMinSizing(NWST_STEP) - 10, 10);
|
|
+ SETTING_BUTTON_WIDTH = 2 * SETTING_BUTTON_HEIGHT;
|
|
+
|
|
+ extern uint _tooltip_width;
|
|
+ _tooltip_width = max<uint>(194, 10 * _settings_client.gui.min_button);
|
|
+
|
|
+ if (!_settings_client.gui.manage_min_sizing) return;
|
|
+
|
|
+ _freetype.large.size = _settings_client.gui.min_button;
|
|
+ _freetype.medium.size = max(_settings_client.gui.min_step * 2 / 3, 10U);
|
|
+ _freetype.mono.size = _freetype.medium.size;
|
|
+ _freetype.small.size = max(_freetype.medium.size * 2 / 3, 8U);
|
|
+
|
|
+ InitFreeType(true);
|
|
+ CheckForMissingGlyphs();
|
|
+
|
|
+ if (_z_front_window == NULL) return;
|
|
+
|
|
+ DeleteAllNonVitalWindows();
|
|
+
|
|
+ switch (_game_mode) {
|
|
+ default: break;
|
|
+ case GM_MENU:
|
|
+ DeleteWindowById(WC_SELECT_GAME, 0);
|
|
+ extern void ShowSelectGameWindow();
|
|
+ ShowSelectGameWindow();
|
|
+ break;
|
|
+
|
|
+ case GM_NORMAL:
|
|
+ case GM_EDITOR: {
|
|
+ Station *st;
|
|
+ FOR_ALL_STATIONS(st) { st->UpdateVirtCoord(); }
|
|
+ Waypoint *wp;
|
|
+ FOR_ALL_WAYPOINTS(wp) { wp->UpdateVirtCoord(); }
|
|
+
|
|
+ HideVitalWindows();
|
|
+ ShowVitalWindows();
|
|
+ break;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ ShowErrorMessage(STR_ERROR_RESET_WINDOWS, STR_ERROR_AUTOMATIC_SIZING, WL_WARNING);
|
|
+}
|
|
+
|
|
/**
|
|
* (re)initialize the windowing system
|
|
*/
|
|
diff --git a/src/window_func.h b/src/window_func.h
|
|
index 453b889..a0fff7c 100644
|
|
--- a/src/window_func.h
|
|
+++ b/src/window_func.h
|
|
@@ -29,6 +29,7 @@ int PositionNetworkChatWindow(Window *w);
|
|
int GetMainViewTop();
|
|
int GetMainViewBottom();
|
|
|
|
+void CheckWindowMinSizings();
|
|
void InitWindowSystem();
|
|
void UnInitWindowSystem();
|
|
void ResetWindowSystem();
|
|
--
|
|
1.8.1.2
|
|
|