Add a setting for automatically set min sizing values.

This commit is contained in:
Juanjo
2013-07-27 22:04:33 +00:00
committed by pelya
parent 923bb00c09
commit d95a9c6160
10 changed files with 94 additions and 8 deletions

View File

@@ -287,7 +287,7 @@ struct CheatWindow : Window {
{ {
const NWidgetBase *wid = this->GetWidget<NWidgetBase>(WID_C_PANEL); 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 btn = (pt.y - wid->pos_y - WD_FRAMERECT_TOP - this->header_height) / this->line_height;
uint x = pt.x - wid->pos_x; uint x = pt.x - wid->pos_x;
@@ -300,7 +300,7 @@ struct CheatWindow : Window {
int value = (int32)ReadValue(ce->variable, ce->type); int value = (int32)ReadValue(ce->variable, ce->type);
int oldvalue = value; 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. */ /* Click at the date text directly. */
SetDParam(0, value); SetDParam(0, value);
ShowQueryString(STR_JUST_INT, STR_CHEAT_CHANGE_DATE_QUERY_CAPT, 8, this, CS_NUMERAL, QSF_ACCEPT_UNCHANGED); 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: default:
/* Take whatever the function returns */ /* 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. */ /* 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; break;
} }

View File

@@ -1165,6 +1165,8 @@ void ScreenSizeChanged()
/* screen size changed and the old bitmap is invalid now, so we don't want to undraw it */ /* screen size changed and the old bitmap is invalid now, so we don't want to undraw it */
_cursor.visible = false; _cursor.visible = false;
CheckWindowMinSizings();
} }
void UndrawMouseCursor() void UndrawMouseCursor()

View File

@@ -840,7 +840,7 @@ public:
case EA_RATE: case EA_RATE:
if (pt.y >= this->production_offset_y) { 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); int row = (pt.y - this->production_offset_y) / GetMinSizing(NWST_STEP, FONT_HEIGHT_NORMAL);
for (uint j = 0; j < lengthof(i->produced_cargo); j++) { for (uint j = 0; j < lengthof(i->produced_cargo); j++) {

View File

@@ -972,6 +972,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_GAME_OPTIONS_BASE_MUSIC_DESCRIPTION_TOOLTIP :{BLACK}Additional information about the base music set
STR_ERROR_FULLSCREEN_FAILED :{WHITE}Fullscreen mode failed 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 # Custom currency window

View File

@@ -631,6 +631,8 @@ static WindowDesc _tool_tips_desc(
_nested_tooltips_widgets, lengthof(_nested_tooltips_widgets) _nested_tooltips_widgets, lengthof(_nested_tooltips_widgets)
); );
uint _tooltip_width = 194;
/** Window for displaying a tooltip. */ /** Window for displaying a tooltip. */
struct TooltipsWindow : public Window struct TooltipsWindow : public Window
{ {
@@ -679,7 +681,7 @@ struct TooltipsWindow : public Window
/* There is only one widget. */ /* There is only one widget. */
for (uint i = 0; i != this->paramcount; i++) SetDParam(i, this->params[i]); 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); size->height = GetStringHeight(this->string_id, size->width);
/* Increase slightly to have some space around the box. */ /* Increase slightly to have some space around the box. */

View File

@@ -14,8 +14,8 @@
#include "gfx_type.h" #include "gfx_type.h"
static const int SETTING_BUTTON_WIDTH = 20; ///< Width of setting buttons extern int SETTING_BUTTON_WIDTH; ///< Width of setting buttons
static const int SETTING_BUTTON_HEIGHT = 10; ///< Height 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 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); void DrawDropDownButton(int x, int y, Colours button_colour, bool state, bool clickable);

View File

@@ -79,6 +79,7 @@ struct GUISettings {
bool vehicle_income_warn; ///< if a vehicle isn't generating income, show a warning 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_button; ///< min size of most button widgets
uint min_step; ///< min size of scrollbar/dropdown elements 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 show_finances; ///< show finances at end of year
bool sg_new_nonstop; ///< ttdpatch compatible nonstop handling read from pre v93 savegames bool sg_new_nonstop; ///< ttdpatch compatible nonstop handling read from pre v93 savegames
bool new_nonstop; ///< ttdpatch compatible nonstop handling bool new_nonstop; ///< ttdpatch compatible nonstop handling

View File

@@ -228,6 +228,11 @@ min = 0
max = 100 max = 100
cat = SC_EXPERT cat = SC_EXPERT
[SDTG_BOOL]
name = ""manage_min_sizing""
var = _settings_client.gui.manage_min_sizing
def = false
[SDTG_VAR] [SDTG_VAR]
name = ""min_step_size"" name = ""min_step_size""
type = SLE_UINT type = SLE_UINT

View File

@@ -36,6 +36,14 @@
#include "error.h" #include "error.h"
#include "game/game.hpp" #include "game/game.hpp"
#include "video/video_driver.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 */ /** Values for _settings_client.gui.auto_scrolling */
enum ViewportAutoscrolling { enum ViewportAutoscrolling {
@@ -1785,6 +1793,70 @@ Window *FindWindowFromPt(int x, int y)
return NULL; 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 * (re)initialize the windowing system
*/ */

View File

@@ -29,6 +29,7 @@ int PositionNetworkChatWindow(Window *w);
int GetMainViewTop(); int GetMainViewTop();
int GetMainViewBottom(); int GetMainViewBottom();
void CheckWindowMinSizings();
void InitWindowSystem(); void InitWindowSystem();
void UnInitWindowSystem(); void UnInitWindowSystem();
void ResetWindowSystem(); void ResetWindowSystem();