2016-05-04 19:24:41 +02:00
# pragma region Copyright (c) 2014-2016 OpenRCT2 Developers
2014-05-11 09:01:01 +02:00
/*****************************************************************************
* OpenRCT2 , an open source clone of Roller Coaster Tycoon 2.
*
2016-05-04 19:24:41 +02:00
* OpenRCT2 is the work of many authors , a full list can be found in contributors . md
* For more information , visit https : //github.com/OpenRCT2/OpenRCT2
2014-05-11 09:01:01 +02:00
*
* OpenRCT2 is free software : you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation , either version 3 of the License , or
* ( at your option ) any later version .
2016-05-04 19:24:41 +02:00
*
* A full copy of the GNU General Public License can be found in licence . txt
2014-05-11 09:01:01 +02:00
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
2016-05-04 19:24:41 +02:00
# pragma endregion
2014-05-11 09:01:01 +02:00
2014-08-16 16:29:15 +02:00
/**
* To better group the options together and allow the window to be scalable with additional OpenRCT2 options , the window has
* been changed to a tab interface similar to the options window seen in Locomotion .
*
* TODO Some parts , particularly the string handling and order of widgets needs reorganising .
* Padding between the widgets and the window needs reducing , an artifact from originally being inside group boxes .
*/
2014-10-06 18:36:58 +02:00
# include "../audio/audio.h"
2017-01-03 21:15:02 +01:00
# include "../audio/AudioMixer.h"
2014-10-06 18:36:58 +02:00
# include "../config.h"
# include "../drawing/drawing.h"
2015-09-26 15:35:26 +02:00
# include "../interface/themes.h"
2014-10-06 18:36:58 +02:00
# include "../interface/viewport.h"
# include "../interface/widget.h"
# include "../interface/window.h"
2015-11-08 11:46:11 +01:00
# include "../localisation/currency.h"
2015-09-26 15:35:26 +02:00
# include "../localisation/date.h"
2014-10-06 18:36:58 +02:00
# include "../localisation/localisation.h"
2015-02-12 21:51:40 +01:00
# include "../platform/platform.h"
2016-11-30 12:07:10 +01:00
# include "../rct2.h"
2014-10-06 18:36:58 +02:00
# include "../sprites.h"
2016-12-07 03:53:58 +01:00
# include "../title/TitleScreen.h"
2016-11-12 18:12:11 +01:00
# include "../title/TitleSequence.h"
# include "../title/TitleSequenceManager.h"
2016-12-07 03:53:58 +01:00
# include "../util/util.h"
2014-10-06 18:36:58 +02:00
# include "dropdown.h"
2015-02-06 23:35:08 +01:00
# include "error.h"
2014-05-11 09:01:01 +02:00
2015-06-04 20:51:54 +02:00
enum WINDOW_OPTIONS_PAGE {
2014-08-16 16:29:15 +02:00
WINDOW_OPTIONS_PAGE_DISPLAY ,
2016-01-31 19:26:28 +01:00
WINDOW_OPTIONS_PAGE_RENDERING ,
2014-08-16 16:29:15 +02:00
WINDOW_OPTIONS_PAGE_CULTURE ,
WINDOW_OPTIONS_PAGE_AUDIO ,
2015-07-26 14:37:27 +02:00
WINDOW_OPTIONS_PAGE_CONTROLS_AND_INTERFACE ,
2014-08-16 16:29:15 +02:00
WINDOW_OPTIONS_PAGE_MISC ,
2015-05-25 21:38:33 +02:00
WINDOW_OPTIONS_PAGE_TWITCH ,
2014-08-16 16:29:15 +02:00
WINDOW_OPTIONS_PAGE_COUNT
} ;
2014-05-26 19:06:57 +02:00
2015-06-04 20:51:54 +02:00
# pragma region Widgets
2014-05-19 21:10:32 +02:00
enum WINDOW_OPTIONS_WIDGET_IDX {
2014-05-11 09:01:01 +02:00
WIDX_BACKGROUND ,
WIDX_TITLE ,
WIDX_CLOSE ,
2014-08-16 16:29:15 +02:00
WIDX_PAGE_BACKGROUND ,
WIDX_TAB_1 ,
WIDX_TAB_2 ,
WIDX_TAB_3 ,
WIDX_TAB_4 ,
WIDX_TAB_5 ,
2015-05-25 21:38:33 +02:00
WIDX_TAB_6 ,
2016-01-31 19:26:28 +01:00
WIDX_TAB_7 ,
2014-08-16 16:29:15 +02:00
2015-06-04 20:51:54 +02:00
WIDX_PAGE_START ,
// Display
2015-07-26 14:37:27 +02:00
WIDX_HARDWARE_GROUP = WIDX_PAGE_START ,
2014-07-30 13:53:12 +02:00
WIDX_FULLSCREEN ,
WIDX_FULLSCREEN_DROPDOWN ,
2016-02-01 00:40:02 +01:00
WIDX_RESOLUTION ,
WIDX_RESOLUTION_DROPDOWN ,
2015-11-12 00:42:42 +01:00
WIDX_SCALE ,
WIDX_SCALE_UP ,
WIDX_SCALE_DOWN ,
2016-06-05 23:16:35 +02:00
WIDX_DRAWING_ENGINE ,
WIDX_DRAWING_ENGINE_DROPDOWN ,
2016-01-31 17:42:19 +01:00
WIDX_SCALE_QUALITY ,
WIDX_SCALE_QUALITY_DROPDOWN ,
2016-01-31 17:58:09 +01:00
WIDX_SCALE_USE_NN_AT_INTEGER_SCALES_CHECKBOX ,
2016-02-01 00:40:02 +01:00
WIDX_STEAM_OVERLAY_PAUSE ,
WIDX_UNCAP_FPS_CHECKBOX ,
WIDX_SHOW_FPS_CHECKBOX ,
WIDX_MINIMIZE_FOCUS_LOSS ,
2016-01-31 19:26:28 +01:00
// Rendering
WIDX_RENDERING_GROUP = WIDX_PAGE_START ,
2015-07-26 14:37:27 +02:00
WIDX_TILE_SMOOTHING_CHECKBOX ,
WIDX_GRIDLINES_CHECKBOX ,
2014-05-11 17:24:52 +02:00
WIDX_CONSTRUCTION_MARKER ,
WIDX_CONSTRUCTION_MARKER_DROPDOWN ,
2015-07-24 23:58:41 +02:00
WIDX_DAY_NIGHT_CHECKBOX ,
2015-07-25 21:38:23 +02:00
WIDX_UPPER_CASE_BANNERS_CHECKBOX ,
2016-08-17 00:23:16 +02:00
WIDX_RENDER_WEATHER_EFFECTS_CHECKBOX ,
2016-09-03 15:09:40 +02:00
WIDX_DISABLE_LIGHTNING_EFFECT_CHECKBOX ,
2015-06-04 20:51:54 +02:00
// Culture / Units
WIDX_LANGUAGE = WIDX_PAGE_START ,
2014-08-16 16:29:15 +02:00
WIDX_LANGUAGE_DROPDOWN ,
WIDX_CURRENCY ,
WIDX_CURRENCY_DROPDOWN ,
WIDX_DISTANCE ,
WIDX_DISTANCE_DROPDOWN ,
WIDX_TEMPERATURE ,
WIDX_TEMPERATURE_DROPDOWN ,
WIDX_HEIGHT_LABELS ,
WIDX_HEIGHT_LABELS_DROPDOWN ,
2015-05-24 18:38:07 +02:00
WIDX_DATE_FORMAT ,
WIDX_DATE_FORMAT_DROPDOWN ,
2014-08-16 16:29:15 +02:00
2015-06-04 20:51:54 +02:00
// Audio
WIDX_SOUND = WIDX_PAGE_START ,
2014-08-16 16:29:15 +02:00
WIDX_SOUND_DROPDOWN ,
2015-03-07 17:50:54 +01:00
WIDX_SOUND_CHECKBOX ,
WIDX_MUSIC_CHECKBOX ,
2015-08-11 13:06:00 +02:00
WIDX_AUDIO_FOCUS_CHECKBOX ,
2015-02-06 23:35:08 +01:00
WIDX_TITLE_MUSIC ,
WIDX_TITLE_MUSIC_DROPDOWN ,
2016-02-24 23:42:50 +01:00
WIDX_SOUND_VOLUME ,
2015-06-04 22:29:21 +02:00
WIDX_MUSIC_VOLUME ,
2014-08-16 16:29:15 +02:00
2015-07-26 14:37:27 +02:00
// Controls and interface
WIDX_CONTROLS_GROUP = WIDX_PAGE_START ,
WIDX_SCREEN_EDGE_SCROLLING ,
2015-10-02 16:13:36 +02:00
WIDX_TRAP_CURSOR ,
2015-06-20 17:52:38 +02:00
WIDX_INVERT_DRAG ,
2016-07-21 21:00:29 +02:00
WIDX_ZOOM_TO_CURSOR ,
2014-05-11 17:24:52 +02:00
WIDX_HOTKEY_DROPDOWN ,
2015-07-26 14:37:27 +02:00
WIDX_THEMES_GROUP ,
WIDX_THEMES ,
WIDX_THEMES_DROPDOWN ,
WIDX_THEMES_BUTTON ,
WIDX_TOOLBAR_BUTTONS_GROUP ,
2015-03-07 17:38:17 +01:00
WIDX_TOOLBAR_SHOW_FINANCES ,
WIDX_TOOLBAR_SHOW_RESEARCH ,
2015-05-19 00:15:43 +02:00
WIDX_TOOLBAR_SHOW_CHEATS ,
2015-07-22 19:13:35 +02:00
WIDX_TOOLBAR_SHOW_NEWS ,
2015-07-26 14:37:27 +02:00
WIDX_SELECT_BY_TRACK_TYPE ,
2015-12-28 12:39:17 +01:00
WIDX_SCENARIO_GROUPING ,
2015-12-30 23:30:54 +01:00
WIDX_SCENARIO_GROUPING_DROPDOWN ,
2015-12-28 12:39:17 +01:00
WIDX_SCENARIO_UNLOCKING ,
2014-08-16 16:29:15 +02:00
2015-06-04 20:51:54 +02:00
// Misc
WIDX_REAL_NAME_CHECKBOX = WIDX_PAGE_START ,
2016-03-02 20:00:33 +01:00
WIDX_ALLOW_LOADING_WITH_INCORRECT_CHECKSUM ,
2014-08-15 00:46:36 +02:00
WIDX_SAVE_PLUGIN_DATA_CHECKBOX ,
2015-05-22 20:18:48 +02:00
WIDX_TEST_UNFINISHED_TRACKS ,
2015-06-01 03:33:56 +02:00
WIDX_DEBUGGING_TOOLS ,
2016-03-02 20:00:33 +01:00
WIDX_STAY_CONNECTED_AFTER_DESYNC ,
WIDX_AUTOSAVE ,
WIDX_AUTOSAVE_DROPDOWN ,
2015-06-14 22:01:48 +02:00
WIDX_TITLE_SEQUENCE ,
WIDX_TITLE_SEQUENCE_DROPDOWN ,
2015-06-24 18:22:12 +02:00
WIDX_TITLE_SEQUENCE_BUTTON ,
2016-03-02 20:00:33 +01:00
WIDX_AUTO_STAFF_PLACEMENT ,
WIDX_HANDYMEN_MOW_DEFAULT ,
2015-12-24 09:00:41 +01:00
WIDX_AUTO_OPEN_SHOPS ,
2016-03-02 20:27:54 +01:00
WIDX_DEFAULT_INSPECTION_INTERVAL ,
WIDX_DEFAULT_INSPECTION_INTERVAL_DROPDOWN ,
2016-05-30 19:13:54 +02:00
WIDX_WINDOW_LIMIT ,
WIDX_WINDOW_LIMIT_UP ,
WIDX_WINDOW_LIMIT_DOWN ,
2015-05-25 21:38:33 +02:00
2015-06-04 20:51:54 +02:00
// Twitch
WIDX_CHANNEL_BUTTON = WIDX_PAGE_START ,
2015-05-25 21:38:33 +02:00
WIDX_FOLLOWER_PEEP_NAMES_CHECKBOX ,
WIDX_FOLLOWER_PEEP_TRACKING_CHECKBOX ,
WIDX_CHAT_PEEP_NAMES_CHECKBOX ,
WIDX_CHAT_PEEP_TRACKING_CHECKBOX ,
2015-06-04 20:51:54 +02:00
WIDX_NEWS_CHECKBOX
2014-05-11 09:01:01 +02:00
} ;
2015-07-26 14:37:27 +02:00
# define WW 310
2016-01-31 17:58:09 +01:00
# define WH 332
2014-07-24 16:57:02 +02:00
2015-06-04 20:51:54 +02:00
# define MAIN_OPTIONS_WIDGETS \
2016-07-14 14:07:49 +02:00
{ WWT_FRAME , 0 , 0 , WW - 1 , 0 , WH - 1 , STR_NONE , STR_NONE } , \
{ WWT_CAPTION , 0 , 1 , WW - 2 , 1 , 14 , STR_OPTIONS_TITLE , STR_WINDOW_TITLE_TIP } , \
{ WWT_CLOSEBOX , 0 , WW - 13 , WW - 3 , 2 , 13 , STR_CLOSE_X , STR_CLOSE_WINDOW_TIP } , \
{ WWT_RESIZE , 1 , 0 , WW - 1 , 43 , WH - 1 , 0xFFFFFFFF , STR_NONE } , \
{ WWT_TAB , 1 , 3 , 33 , 17 , 43 , 0x20000000 | SPR_TAB , STR_OPTIONS_DISPLAY_TIP } , \
{ WWT_TAB , 1 , 34 , 64 , 17 , 43 , 0x20000000 | SPR_TAB , STR_OPTIONS_RENDERING_TIP } , \
{ WWT_TAB , 1 , 65 , 95 , 17 , 43 , 0x20000000 | SPR_TAB , STR_OPTIONS_CULTURE_TIP } , \
{ WWT_TAB , 1 , 96 , 126 , 17 , 43 , 0x20000000 | SPR_TAB , STR_OPTIONS_AUDIO_TIP } , \
{ WWT_TAB , 1 , 127 , 157 , 17 , 43 , 0x20000000 | SPR_TAB , STR_OPTIONS_CONTROLS_AND_INTERFACE_TIP } , \
{ WWT_TAB , 1 , 158 , 188 , 17 , 43 , 0x20000000 | SPR_TAB , STR_OPTIONS_MISCELLANEOUS_TIP } , \
{ WWT_TAB , 1 , 189 , 219 , 17 , 43 , 0x20000000 | SPR_TAB , STR_OPTIONS_TWITCH_TIP }
2015-06-04 20:51:54 +02:00
static rct_widget window_options_display_widgets [ ] = {
MAIN_OPTIONS_WIDGETS ,
2016-02-01 00:40:02 +01:00
{ WWT_GROUPBOX , 1 , 5 , 304 , 53 , 205 , STR_HARDWARE_GROUP , STR_NONE } , // Hardware group
2016-07-14 14:07:49 +02:00
{ WWT_DROPDOWN , 1 , 155 , 299 , 68 , 79 , STR_ARG_12_STRINGID , STR_NONE } , // Fullscreen
2016-05-08 18:22:48 +02:00
{ WWT_DROPDOWN_BUTTON , 1 , 288 , 298 , 69 , 78 , STR_DROPDOWN_GLYPH , STR_FULLSCREEN_MODE_TIP } ,
2016-02-01 00:40:02 +01:00
2016-07-14 14:07:49 +02:00
{ WWT_DROPDOWN , 1 , 155 , 299 , 83 , 94 , STR_ARG_16_RESOLUTION_X_BY_Y , STR_NONE } , // Resolution
2016-05-08 18:22:48 +02:00
{ WWT_DROPDOWN_BUTTON , 1 , 288 , 298 , 84 , 93 , STR_DROPDOWN_GLYPH , STR_DISPLAY_RESOLUTION_TIP } ,
2016-02-01 00:40:02 +01:00
2016-05-08 18:22:48 +02:00
{ WWT_SPINNER , 1 , 155 , 299 , 98 , 109 , STR_NONE , STR_WINDOW_SCALE_TIP } , // Scale spinner
{ WWT_DROPDOWN_BUTTON , 1 , 288 , 298 , 99 , 103 , STR_NUMERIC_UP , STR_NONE } , // Scale spinner up
{ WWT_DROPDOWN_BUTTON , 1 , 288 , 298 , 104 , 108 , STR_NUMERIC_DOWN , STR_NONE } , // Scale spinner down
2016-02-01 00:40:02 +01:00
2016-06-05 23:16:35 +02:00
{ WWT_DROPDOWN , 1 , 155 , 299 , 113 , 124 , STR_NONE , STR_NONE } ,
{ WWT_DROPDOWN_BUTTON , 1 , 288 , 298 , 114 , 123 , STR_DROPDOWN_GLYPH , STR_DRAWING_ENGINE_TIP } ,
2016-02-01 00:40:02 +01:00
2016-05-08 18:22:48 +02:00
{ WWT_DROPDOWN , 1 , 155 , 299 , 128 , 139 , STR_NONE , STR_NONE } , // Scaling quality hint
{ WWT_DROPDOWN_BUTTON , 1 , 288 , 298 , 129 , 138 , STR_DROPDOWN_GLYPH , STR_SCALE_QUALITY_TIP } ,
{ WWT_CHECKBOX , 1 , 25 , 290 , 143 , 154 , STR_USE_NN_AT_INTEGER_SCALE , STR_USE_NN_AT_INTEGER_SCALE_TIP } , // Use nn scaling at integer scales
2016-02-01 00:40:02 +01:00
2016-05-08 18:22:48 +02:00
{ WWT_CHECKBOX , 1 , 25 , 290 , 158 , 169 , STR_STEAM_OVERLAY_PAUSE , STR_STEAM_OVERLAY_PAUSE_TIP } , // Pause on steam overlay
2016-02-01 00:40:02 +01:00
2016-05-08 18:22:48 +02:00
{ WWT_CHECKBOX , 1 , 10 , 290 , 174 , 185 , STR_UNCAP_FPS , STR_UNCAP_FPS_TIP } , // Uncap fps
{ WWT_CHECKBOX , 1 , 155 , 299 , 174 , 185 , STR_SHOW_FPS , STR_SHOW_FPS_TIP } , // Show fps
{ WWT_CHECKBOX , 1 , 10 , 290 , 189 , 200 , STR_MINIMISE_FULLSCREEN_ON_FOCUS_LOSS , STR_MINIMISE_FULLSCREEN_ON_FOCUS_LOSS_TIP } , // Minimise fullscreen focus loss
2016-02-01 00:40:02 +01:00
2016-01-31 19:26:28 +01:00
{ WIDGETS_END } ,
} ;
2016-01-31 17:42:19 +01:00
2016-01-31 19:26:28 +01:00
static rct_widget window_options_rendering_widgets [ ] = {
MAIN_OPTIONS_WIDGETS ,
# define FRAME_RENDERING_START 53
2016-08-17 00:23:16 +02:00
{ WWT_GROUPBOX , 1 , 5 , 304 , FRAME_RENDERING_START + 0 , FRAME_RENDERING_START + 136 , STR_RENDERING_GROUP , STR_NONE } , // Rendering group
{ WWT_CHECKBOX , 1 , 10 , 290 , FRAME_RENDERING_START + 15 , FRAME_RENDERING_START + 26 , STR_TILE_SMOOTHING , STR_TILE_SMOOTHING_TIP } , // Landscape smoothing
{ WWT_CHECKBOX , 1 , 10 , 290 , FRAME_RENDERING_START + 30 , FRAME_RENDERING_START + 41 , STR_GRIDLINES , STR_GRIDLINES_TIP } , // Gridlines
{ WWT_DROPDOWN , 1 , 155 , 299 , FRAME_RENDERING_START + 45 , FRAME_RENDERING_START + 55 , STR_NONE , STR_NONE } , // Construction marker
{ WWT_DROPDOWN_BUTTON , 1 , 288 , 298 , FRAME_RENDERING_START + 46 , FRAME_RENDERING_START + 54 , STR_DROPDOWN_GLYPH , STR_CONSTRUCTION_MARKER_COLOUR_TIP } ,
{ WWT_CHECKBOX , 1 , 10 , 290 , FRAME_RENDERING_START + 60 , FRAME_RENDERING_START + 71 , STR_CYCLE_DAY_NIGHT , STR_CYCLE_DAY_NIGHT_TIP } , // Cycle day-night
{ WWT_CHECKBOX , 1 , 10 , 290 , FRAME_RENDERING_START + 75 , FRAME_RENDERING_START + 86 , STR_UPPERCASE_BANNERS , STR_UPPERCASE_BANNERS_TIP } , // Uppercase banners
2016-09-03 15:09:40 +02:00
{ WWT_CHECKBOX , 1 , 10 , 290 , FRAME_RENDERING_START + 90 , FRAME_RENDERING_START + 101 , STR_RENDER_WEATHER_EFFECTS , STR_RENDER_WEATHER_EFFECTS_TIP } , // Render weather effects
{ WWT_CHECKBOX , 1 , 31 , 290 , FRAME_RENDERING_START + 105 , FRAME_RENDERING_START + 116 , STR_DISABLE_LIGHTNING_EFFECT , STR_DISABLE_LIGHTNING_EFFECT_TIP } , // Disable lightning effect
2016-01-31 17:42:19 +01:00
# undef FRAME_RENDERING_START
2015-06-04 20:51:54 +02:00
{ WIDGETS_END } ,
} ;
2014-08-16 16:29:15 +02:00
2015-06-04 20:51:54 +02:00
static rct_widget window_options_culture_widgets [ ] = {
MAIN_OPTIONS_WIDGETS ,
2015-08-18 11:58:47 +02:00
{ WWT_DROPDOWN , 1 , 155 , 299 , 53 , 64 , STR_NONE , STR_NONE } , // language
2016-05-08 18:22:48 +02:00
{ WWT_DROPDOWN_BUTTON , 1 , 288 , 298 , 54 , 63 , STR_DROPDOWN_GLYPH , STR_LANGUAGE_TIP } ,
2016-07-14 14:07:49 +02:00
{ WWT_DROPDOWN , 1 , 155 , 299 , 68 , 79 , STR_ARG_12_STRINGID , STR_NONE } , // Currency
2016-05-08 18:22:48 +02:00
{ WWT_DROPDOWN_BUTTON , 1 , 288 , 298 , 69 , 78 , STR_DROPDOWN_GLYPH , STR_CURRENCY_TIP } ,
2016-07-14 14:07:49 +02:00
{ WWT_DROPDOWN , 1 , 155 , 299 , 83 , 94 , STR_ARG_14_STRINGID , STR_NONE } , // Distance and speed
2016-05-08 18:22:48 +02:00
{ WWT_DROPDOWN_BUTTON , 1 , 288 , 298 , 84 , 93 , STR_DROPDOWN_GLYPH , STR_DISTANCE_AND_SPEED_TIP } ,
2016-07-14 14:07:49 +02:00
{ WWT_DROPDOWN , 1 , 155 , 299 , 98 , 110 , STR_ARG_20_STRINGID , STR_NONE } , // Temperature
2016-05-08 18:22:48 +02:00
{ WWT_DROPDOWN_BUTTON , 1 , 288 , 298 , 99 , 108 , STR_DROPDOWN_GLYPH , STR_TEMPERATURE_FORMAT_TIP } ,
2016-07-14 14:07:49 +02:00
{ WWT_DROPDOWN , 1 , 155 , 299 , 113 , 124 , STR_ARG_6_STRINGID , STR_NONE } , // Height labels
2016-05-08 18:22:48 +02:00
{ WWT_DROPDOWN_BUTTON , 1 , 288 , 298 , 114 , 123 , STR_DROPDOWN_GLYPH , STR_HEIGHT_LABELS_UNITS_TIP } ,
{ WWT_DROPDOWN , 1 , 155 , 299 , 128 , 139 , STR_NONE , STR_NONE } , // Date format
{ WWT_DROPDOWN_BUTTON , 1 , 288 , 298 , 129 , 138 , STR_DROPDOWN_GLYPH , STR_DATE_FORMAT_TIP } ,
2015-06-04 20:51:54 +02:00
{ WIDGETS_END } ,
} ;
2014-08-16 16:29:15 +02:00
2015-06-04 20:51:54 +02:00
static rct_widget window_options_audio_widgets [ ] = {
MAIN_OPTIONS_WIDGETS ,
2016-09-05 01:05:48 +02:00
{ WWT_DROPDOWN , 1 , 10 , 299 , 53 , 64 , STR_NONE , STR_NONE } , // Audio device
2016-05-08 18:22:48 +02:00
{ WWT_DROPDOWN_BUTTON , 1 , 288 , 298 , 54 , 63 , STR_DROPDOWN_GLYPH , STR_AUDIO_DEVICE_TIP } ,
{ WWT_CHECKBOX , 1 , 10 , 229 , 69 , 80 , STR_SOUND_EFFECTS , STR_SOUND_EFFECTS_TIP } , // Enable / disable sound effects
{ WWT_CHECKBOX , 1 , 10 , 229 , 84 , 95 , STR_RIDE_MUSIC , STR_RIDE_MUSIC_TIP } , // Enable / disable ride music
{ WWT_CHECKBOX , 1 , 10 , 229 , 98 , 110 , STR_AUDIO_FOCUS , STR_AUDIO_FOCUS_TIP } , // Enable / disable audio disabled on focus lost
{ WWT_DROPDOWN , 1 , 155 , 299 , 112 , 124 , STR_NONE , STR_NONE } , // Title music
{ WWT_DROPDOWN_BUTTON , 1 , 288 , 298 , 113 , 123 , STR_DROPDOWN_GLYPH , STR_TITLE_MUSIC_TIP } ,
2016-07-14 14:07:49 +02:00
{ WWT_SCROLL , 1 , 155 , 299 , 68 , 80 , SCROLL_HORIZONTAL , STR_NONE } , // Sound effect volume
{ WWT_SCROLL , 1 , 155 , 299 , 83 , 95 , SCROLL_HORIZONTAL , STR_NONE } , // Music volume
2015-06-04 20:51:54 +02:00
{ WIDGETS_END } ,
} ;
2014-08-16 16:29:15 +02:00
2015-07-26 14:37:27 +02:00
static rct_widget window_options_controls_and_interface_widgets [ ] = {
2015-06-04 20:51:54 +02:00
MAIN_OPTIONS_WIDGETS ,
2016-07-21 21:00:29 +02:00
{ WWT_GROUPBOX , 1 , 5 , 304 , 53 , 144 , STR_CONTROLS_GROUP , STR_NONE } , // Controls group
2016-05-08 18:22:48 +02:00
{ WWT_CHECKBOX , 2 , 10 , 299 , 68 , 79 , STR_SCREEN_EDGE_SCROLLING , STR_SCREEN_EDGE_SCROLLING_TIP } , // Edge scrolling
{ WWT_CHECKBOX , 2 , 10 , 299 , 83 , 94 , STR_TRAP_MOUSE , STR_TRAP_MOUSE_TIP } , // Trap mouse
{ WWT_CHECKBOX , 2 , 10 , 299 , 98 , 109 , STR_INVERT_RIGHT_MOUSE_DRAG , STR_INVERT_RIGHT_MOUSE_DRAG_TIP } , // Invert right mouse dragging
2016-07-21 21:00:29 +02:00
{ WWT_CHECKBOX , 2 , 10 , 299 , 113 , 124 , STR_ZOOM_TO_CURSOR , STR_ZOOM_TO_CURSOR_TIP } , // Zoom to cursor
{ WWT_DROPDOWN_BUTTON , 1 , 26 , 185 , 128 , 139 , STR_HOTKEY , STR_HOTKEY_TIP } , // Set hotkeys buttons
{ WWT_GROUPBOX , 1 , 5 , 304 , 148 , 194 , STR_THEMES_GROUP , STR_NONE } , // Toolbar buttons group
{ WWT_DROPDOWN , 1 , 155 , 299 , 162 , 173 , STR_NONE , STR_NONE } , // Themes
{ WWT_DROPDOWN_BUTTON , 1 , 288 , 298 , 163 , 172 , STR_DROPDOWN_GLYPH , STR_CURRENT_THEME_TIP } ,
{ WWT_DROPDOWN_BUTTON , 1 , 10 , 145 , 178 , 189 , STR_EDIT_THEMES_BUTTON , STR_EDIT_THEMES_BUTTON_TIP } , // Themes button
{ WWT_GROUPBOX , 1 , 5 , 304 , 198 , 260 , STR_TOOLBAR_BUTTONS_GROUP , STR_NONE } , // Toolbar buttons group
{ WWT_CHECKBOX , 2 , 10 , 145 , 229 , 240 , STR_FINANCES_BUTTON_ON_TOOLBAR , STR_FINANCES_BUTTON_ON_TOOLBAR_TIP } , // Finances
{ WWT_CHECKBOX , 2 , 10 , 145 , 244 , 255 , STR_RESEARCH_BUTTON_ON_TOOLBAR , STR_RESEARCH_BUTTON_ON_TOOLBAR_TIP } , // Research
{ WWT_CHECKBOX , 2 , 155 , 299 , 229 , 240 , STR_CHEATS_BUTTON_ON_TOOLBAR , STR_CHEATS_BUTTON_ON_TOOLBAR_TIP } , // Cheats
{ WWT_CHECKBOX , 2 , 155 , 299 , 244 , 255 , STR_SHOW_RECENT_MESSAGES_ON_TOOLBAR , STR_SHOW_RECENT_MESSAGES_ON_TOOLBAR_TIP } , // Recent messages
{ WWT_CHECKBOX , 2 , 10 , 299 , 269 , 280 , STR_SELECT_BY_TRACK_TYPE , STR_SELECT_BY_TRACK_TYPE_TIP } , // Select by track type
{ WWT_DROPDOWN , 2 , 155 , 299 , 284 , 295 , STR_NONE , STR_NONE } , // Scenario select mode
{ WWT_DROPDOWN_BUTTON , 2 , 288 , 298 , 285 , 294 , STR_DROPDOWN_GLYPH , STR_SCENARIO_GROUPING_TIP } ,
{ WWT_CHECKBOX , 2 , 18 , 299 , 299 , 310 , STR_OPTIONS_SCENARIO_UNLOCKING , STR_SCENARIO_UNLOCKING_TIP } , // Unlocking of scenarios
2015-06-04 20:51:54 +02:00
{ WIDGETS_END } ,
} ;
2014-08-16 16:29:15 +02:00
2015-06-04 20:51:54 +02:00
static rct_widget window_options_misc_widgets [ ] = {
MAIN_OPTIONS_WIDGETS ,
2016-03-02 20:00:33 +01:00
{ WWT_CHECKBOX , 2 , 10 , 299 , 54 , 65 , STR_REAL_NAME , STR_REAL_NAME_TIP } , // Show 'real' names of guests
{ WWT_CHECKBOX , 2 , 10 , 299 , 69 , 80 , STR_ALLOW_LOADING_WITH_INCORRECT_CHECKSUM , STR_ALLOW_LOADING_WITH_INCORRECT_CHECKSUM_TIP } , // Allow loading with incorrect checksum
{ WWT_CHECKBOX , 2 , 10 , 299 , 84 , 95 , STR_SAVE_PLUGIN_DATA , STR_SAVE_PLUGIN_DATA_TIP } , // Export plug-in objects with saved games
2016-05-08 18:22:48 +02:00
{ WWT_CHECKBOX , 2 , 10 , 299 , 99 , 110 , STR_TEST_UNFINISHED_TRACKS , STR_TEST_UNFINISHED_TRACKS_TIP } , // Test unfinished tracks
{ WWT_CHECKBOX , 2 , 10 , 299 , 114 , 125 , STR_ENABLE_DEBUGGING_TOOLS , STR_ENABLE_DEBUGGING_TOOLS_TIP } , // Enable debugging tools
{ WWT_CHECKBOX , 2 , 10 , 299 , 129 , 140 , STR_STAY_CONNECTED_AFTER_DESYNC , STR_STAY_CONNECTED_AFTER_DESYNC_TIP } , // Do not disconnect after the client desynchronises with the server
{ WWT_DROPDOWN , 1 , 155 , 299 , 144 , 155 , STR_NONE , STR_NONE } , // Autosave dropdown
{ WWT_DROPDOWN_BUTTON , 1 , 288 , 298 , 145 , 154 , STR_DROPDOWN_GLYPH , STR_AUTOSAVE_FREQUENCY_TIP } , // Autosave dropdown button
{ WWT_DROPDOWN , 1 , 155 , 299 , 159 , 170 , STR_NONE , STR_NONE } , // Title sequence dropdown
{ WWT_DROPDOWN_BUTTON , 1 , 288 , 298 , 160 , 169 , STR_DROPDOWN_GLYPH , STR_TITLE_SEQUENCE_TIP } , // Title seqeuence dropdown button
{ WWT_DROPDOWN_BUTTON , 1 , 26 , 185 , 174 , 185 , STR_EDIT_TITLE_SEQUENCES_BUTTON , STR_EDIT_TITLE_SEQUENCES_BUTTON_TIP } , // Edit title sequences button
{ WWT_CHECKBOX , 2 , 10 , 299 , 189 , 200 , STR_AUTO_STAFF_PLACEMENT , STR_AUTO_STAFF_PLACEMENT_TIP } , // Auto staff placement
{ WWT_CHECKBOX , 2 , 10 , 299 , 204 , 215 , STR_HANDYMEN_MOW_BY_DEFAULT , STR_HANDYMEN_MOW_BY_DEFAULT_TIP } , // Handymen mow by default
2016-03-02 20:00:33 +01:00
{ WWT_CHECKBOX , 2 , 10 , 299 , 219 , 230 , STR_AUTO_OPEN_SHOPS , STR_AUTO_OPEN_SHOPS_TIP } , // Automatically open shops & stalls
2016-05-08 18:22:48 +02:00
{ WWT_DROPDOWN , 1 , 155 , 299 , 234 , 245 , STR_NONE , STR_NONE } , // Default inspection time dropdown
{ WWT_DROPDOWN_BUTTON , 1 , 288 , 298 , 235 , 244 , STR_DROPDOWN_GLYPH , STR_DEFAULT_INSPECTION_INTERVAL_TIP } , // Default inspection time dropdown button
2016-05-30 19:13:54 +02:00
{ WWT_SPINNER , 1 , 155 , 299 , 249 , 260 , STR_NONE , STR_NONE } , // Window limit
{ WWT_DROPDOWN_BUTTON , 1 , 288 , 298 , 250 , 254 , STR_NUMERIC_UP , STR_NONE } , // Window limit up
{ WWT_DROPDOWN_BUTTON , 1 , 288 , 298 , 255 , 259 , STR_NUMERIC_DOWN , STR_NONE } , // Window limit down
2015-06-04 20:51:54 +02:00
{ WIDGETS_END } ,
} ;
2015-05-25 21:38:33 +02:00
2015-06-04 20:51:54 +02:00
static rct_widget window_options_twitch_widgets [ ] = {
MAIN_OPTIONS_WIDGETS ,
2016-05-08 18:22:48 +02:00
{ WWT_DROPDOWN_BUTTON , 2 , 10 , 299 , 54 , 65 , STR_TWITCH_NAME , STR_TWITCH_NAME_TIP } , // Twitch channel name
2015-06-04 20:51:54 +02:00
{ WWT_CHECKBOX , 2 , 10 , 299 , 69 , 80 , STR_TWITCH_PEEP_FOLLOWERS , STR_TWITCH_PEEP_FOLLOWERS_TIP } , // Twitch name peeps by follows
{ WWT_CHECKBOX , 2 , 10 , 299 , 84 , 95 , STR_TWITCH_FOLLOWERS_TRACK , STR_TWITCH_FOLLOWERS_TRACK_TIP } , // Twitch information on for follows
{ WWT_CHECKBOX , 2 , 10 , 299 , 99 , 110 , STR_TWITCH_PEEP_CHAT , STR_TWITCH_PEEP_CHAT_TIP } , // Twitch name peeps by chat
{ WWT_CHECKBOX , 2 , 10 , 299 , 114 , 125 , STR_TWITCH_CHAT_TRACK , STR_TWITCH_CHAT_TRACK_TIP } , // Twitch information on for chat
{ WWT_CHECKBOX , 2 , 10 , 299 , 129 , 140 , STR_TWITCH_CHAT_NEWS , STR_TWITCH_CHAT_NEWS_TIP } , // Twitch chat !news as notifications in game
2014-05-11 09:01:01 +02:00
{ WIDGETS_END } ,
} ;
2015-06-04 20:51:54 +02:00
rct_widget * window_options_page_widgets [ ] = {
window_options_display_widgets ,
2016-01-31 19:26:28 +01:00
window_options_rendering_widgets ,
2015-06-04 20:51:54 +02:00
window_options_culture_widgets ,
window_options_audio_widgets ,
2015-07-26 14:37:27 +02:00
window_options_controls_and_interface_widgets ,
2015-06-04 20:51:54 +02:00
window_options_misc_widgets ,
window_options_twitch_widgets
} ;
# pragma endregion
2016-07-14 14:07:49 +02:00
static const rct_string_id window_options_autosave_names [ 6 ] = {
STR_SAVE_EVERY_MINUTE ,
STR_SAVE_EVERY_5MINUTES ,
STR_SAVE_EVERY_15MINUTES ,
STR_SAVE_EVERY_30MINUTES ,
STR_SAVE_EVERY_HOUR ,
STR_SAVE_NEVER ,
} ;
static const rct_string_id window_options_title_music_names [ ] = {
STR_OPTIONS_MUSIC_VALUE_NONE ,
STR_ROLLERCOASTER_TYCOON_1_DROPDOWN ,
STR_ROLLERCOASTER_TYCOON_2_DROPDOWN ,
STR_OPTIONS_MUSIC_VALUE_RANDOM ,
} ;
static const rct_string_id window_options_scale_quality_names [ ] = {
STR_SCALING_QUALITY_NN ,
STR_SCALING_QUALITY_LINEAR ,
STR_SCALING_QUALITY_ANISOTROPIC ,
} ;
static const rct_string_id window_options_fullscreen_mode_names [ ] = {
STR_OPTIONS_DISPLAY_WINDOWED ,
STR_OPTIONS_DISPLAY_FULLSCREEN ,
STR_OPTIONS_DISPLAY_FULLSCREEN_BORDERLESS ,
} ;
2017-01-04 22:17:08 +01:00
const sint32 window_options_tab_animation_divisor [ ] = { 4 , 4 , 8 , 2 , 2 , 2 , 1 } ;
const sint32 window_options_tab_animation_frames [ ] = { 16 , 8 , 8 , 16 , 4 , 16 , 1 } ;
2014-08-16 16:29:15 +02:00
2017-01-04 22:17:08 +01:00
static void window_options_set_page ( rct_window * w , sint32 page ) ;
2014-08-16 16:29:15 +02:00
static void window_options_set_pressed_tab ( rct_window * w ) ;
2017-01-04 22:17:08 +01:00
static void window_options_draw_tab_image ( rct_drawpixelinfo * dpi , rct_window * w , sint32 page , sint32 spriteIndex ) ;
2014-08-16 16:29:15 +02:00
static void window_options_draw_tab_images ( rct_drawpixelinfo * dpi , rct_window * w ) ;
2017-01-04 22:17:08 +01:00
static void window_options_show_dropdown ( rct_window * w , rct_widget * widget , sint32 num_items ) ;
2015-06-04 20:51:54 +02:00
static void window_options_update_height_markers ( ) ;
# pragma region Events
2014-08-16 16:29:15 +02:00
2017-01-04 22:17:08 +01:00
static void window_options_mouseup ( rct_window * w , sint32 widgetIndex ) ;
static void window_options_mousedown ( sint32 widgetIndex , rct_window * w , rct_widget * widget ) ;
static void window_options_dropdown ( rct_window * w , sint32 widgetIndex , sint32 dropdownIndex ) ;
2014-08-16 16:29:15 +02:00
static void window_options_update ( rct_window * w ) ;
2015-07-10 02:39:16 +02:00
static void window_options_invalidate ( rct_window * w ) ;
static void window_options_paint ( rct_window * w , rct_drawpixelinfo * dpi ) ;
2017-01-04 22:17:08 +01:00
static void window_options_scrollgetsize ( rct_window * w , sint32 scrollIndex , sint32 * width , sint32 * height ) ;
static void window_options_text_input ( rct_window * w , sint32 widgetIndex , char * text ) ;
2014-05-11 09:01:01 +02:00
2015-07-10 02:39:16 +02:00
static rct_window_event_list window_options_events = {
NULL ,
2014-05-11 09:01:01 +02:00
window_options_mouseup ,
2015-07-10 02:39:16 +02:00
NULL ,
2014-05-11 09:01:01 +02:00
window_options_mousedown ,
window_options_dropdown ,
2015-07-10 02:39:16 +02:00
NULL ,
2014-08-16 16:29:15 +02:00
window_options_update ,
2015-07-10 02:39:16 +02:00
NULL ,
NULL ,
NULL ,
NULL ,
NULL ,
NULL ,
NULL ,
NULL ,
2015-06-04 22:29:21 +02:00
window_options_scrollgetsize ,
2015-07-10 02:39:16 +02:00
NULL ,
NULL ,
NULL ,
2015-05-25 21:38:33 +02:00
window_options_text_input ,
2015-07-10 02:39:16 +02:00
NULL ,
NULL ,
NULL ,
NULL ,
NULL ,
2014-08-01 10:15:43 +02:00
window_options_invalidate ,
2014-05-11 09:01:01 +02:00
window_options_paint ,
2015-07-10 02:39:16 +02:00
NULL
2014-05-11 09:01:01 +02:00
} ;
2015-06-04 20:51:54 +02:00
# pragma endregion
# pragma region Enabled Widgets
# define MAIN_OPTIONS_ENABLED_WIDGETS \
( 1 < < WIDX_CLOSE ) | \
( 1 < < WIDX_TAB_1 ) | \
( 1 < < WIDX_TAB_2 ) | \
( 1 < < WIDX_TAB_3 ) | \
( 1 < < WIDX_TAB_4 ) | \
( 1 < < WIDX_TAB_5 ) | \
2016-01-31 19:26:28 +01:00
( 1 < < WIDX_TAB_6 ) | \
( 1 < < WIDX_TAB_7 )
2015-06-04 20:51:54 +02:00
static uint32 window_options_page_enabled_widgets [ ] = {
MAIN_OPTIONS_ENABLED_WIDGETS |
( 1 < < WIDX_RESOLUTION ) |
( 1 < < WIDX_RESOLUTION_DROPDOWN ) |
( 1 < < WIDX_FULLSCREEN ) |
( 1 < < WIDX_FULLSCREEN_DROPDOWN ) |
( 1 < < WIDX_TILE_SMOOTHING_CHECKBOX ) |
( 1 < < WIDX_GRIDLINES_CHECKBOX ) |
2016-06-05 23:16:35 +02:00
( 1 < < WIDX_DRAWING_ENGINE ) |
( 1 < < WIDX_DRAWING_ENGINE_DROPDOWN ) |
2015-07-04 21:00:32 +02:00
( 1 < < WIDX_UNCAP_FPS_CHECKBOX ) |
2015-12-09 22:42:46 +01:00
( 1 < < WIDX_SHOW_FPS_CHECKBOX ) |
2015-06-25 00:12:53 +02:00
( 1 < < WIDX_MINIMIZE_FOCUS_LOSS ) |
2015-10-03 20:46:34 +02:00
( 1 < < WIDX_STEAM_OVERLAY_PAUSE ) |
2015-11-12 00:42:42 +01:00
( 1 < < WIDX_SCALE ) |
( 1 < < WIDX_SCALE_UP ) |
( 1 < < WIDX_SCALE_DOWN ) |
2016-01-31 17:42:19 +01:00
( 1 < < WIDX_SCALE_QUALITY ) |
( 1 < < WIDX_SCALE_QUALITY_DROPDOWN ) |
2016-01-31 19:26:28 +01:00
( 1 < < WIDX_SCALE_USE_NN_AT_INTEGER_SCALES_CHECKBOX ) ,
MAIN_OPTIONS_ENABLED_WIDGETS |
( 1 < < WIDX_TILE_SMOOTHING_CHECKBOX ) |
( 1 < < WIDX_GRIDLINES_CHECKBOX ) |
2015-06-04 20:51:54 +02:00
( 1 < < WIDX_CONSTRUCTION_MARKER ) |
( 1 < < WIDX_CONSTRUCTION_MARKER_DROPDOWN ) |
2016-01-31 19:26:28 +01:00
( 1 < < WIDX_DAY_NIGHT_CHECKBOX ) |
2016-03-04 23:10:37 +01:00
( 1 < < WIDX_UPPER_CASE_BANNERS_CHECKBOX ) |
2016-11-13 20:17:49 +01:00
( 1 < < WIDX_RENDER_WEATHER_EFFECTS_CHECKBOX ) |
2016-09-03 15:09:40 +02:00
( 1 < < WIDX_DISABLE_LIGHTNING_EFFECT_CHECKBOX ) ,
2015-06-04 20:51:54 +02:00
MAIN_OPTIONS_ENABLED_WIDGETS |
( 1 < < WIDX_LANGUAGE ) |
( 1 < < WIDX_LANGUAGE_DROPDOWN ) |
( 1 < < WIDX_CURRENCY ) |
( 1 < < WIDX_CURRENCY_DROPDOWN ) |
( 1 < < WIDX_DISTANCE ) |
( 1 < < WIDX_DISTANCE_DROPDOWN ) |
( 1 < < WIDX_TEMPERATURE ) |
( 1 < < WIDX_TEMPERATURE_DROPDOWN ) |
( 1 < < WIDX_HEIGHT_LABELS ) |
( 1 < < WIDX_HEIGHT_LABELS_DROPDOWN ) |
( 1 < < WIDX_DATE_FORMAT ) |
( 1 < < WIDX_DATE_FORMAT_DROPDOWN ) ,
MAIN_OPTIONS_ENABLED_WIDGETS |
( 1 < < WIDX_SOUND ) |
( 1 < < WIDX_SOUND_DROPDOWN ) |
( 1 < < WIDX_SOUND_CHECKBOX ) |
( 1 < < WIDX_MUSIC_CHECKBOX ) |
2015-08-11 13:06:00 +02:00
( 1 < < WIDX_AUDIO_FOCUS_CHECKBOX ) |
2015-06-04 20:51:54 +02:00
( 1 < < WIDX_TITLE_MUSIC ) |
( 1 < < WIDX_TITLE_MUSIC_DROPDOWN ) ,
MAIN_OPTIONS_ENABLED_WIDGETS |
( 1 < < WIDX_SCREEN_EDGE_SCROLLING ) |
2015-10-02 16:13:36 +02:00
( 1 < < WIDX_TRAP_CURSOR ) |
2015-06-20 17:52:38 +02:00
( 1 < < WIDX_INVERT_DRAG ) |
2016-07-21 21:00:29 +02:00
( 1 < < WIDX_ZOOM_TO_CURSOR ) |
2015-06-04 20:51:54 +02:00
( 1 < < WIDX_HOTKEY_DROPDOWN ) |
( 1 < < WIDX_TOOLBAR_SHOW_FINANCES ) |
( 1 < < WIDX_TOOLBAR_SHOW_RESEARCH ) |
2015-07-22 19:13:35 +02:00
( 1 < < WIDX_TOOLBAR_SHOW_CHEATS ) |
2015-07-26 14:37:27 +02:00
( 1 < < WIDX_TOOLBAR_SHOW_NEWS ) |
( 1 < < WIDX_THEMES ) |
( 1 < < WIDX_THEMES_DROPDOWN ) |
( 1 < < WIDX_THEMES_BUTTON ) |
2015-12-28 12:39:17 +01:00
( 1 < < WIDX_SELECT_BY_TRACK_TYPE ) |
( 1 < < WIDX_SCENARIO_GROUPING ) |
2015-12-30 23:30:54 +01:00
( 1 < < WIDX_SCENARIO_GROUPING_DROPDOWN ) |
2015-12-28 12:39:17 +01:00
( 1 < < WIDX_SCENARIO_UNLOCKING ) ,
2015-06-04 20:51:54 +02:00
MAIN_OPTIONS_ENABLED_WIDGETS |
( 1 < < WIDX_REAL_NAME_CHECKBOX ) |
( 1 < < WIDX_SAVE_PLUGIN_DATA_CHECKBOX ) |
( 1 < < WIDX_AUTOSAVE ) |
( 1 < < WIDX_AUTOSAVE_DROPDOWN ) |
( 1 < < WIDX_TEST_UNFINISHED_TRACKS ) |
2015-06-11 22:34:38 +02:00
( 1 < < WIDX_AUTO_STAFF_PLACEMENT ) |
2015-08-17 01:26:42 +02:00
( 1 < < WIDX_HANDYMEN_MOW_DEFAULT ) |
2015-06-14 22:01:48 +02:00
( 1 < < WIDX_DEBUGGING_TOOLS ) |
( 1 < < WIDX_TITLE_SEQUENCE ) |
2015-06-24 18:22:12 +02:00
( 1 < < WIDX_TITLE_SEQUENCE_DROPDOWN ) |
2015-10-20 20:16:30 +02:00
( 1 < < WIDX_TITLE_SEQUENCE_BUTTON ) |
2015-10-16 23:45:17 +02:00
( 1 < < WIDX_ALLOW_LOADING_WITH_INCORRECT_CHECKSUM ) |
2015-12-24 09:00:41 +01:00
( 1 < < WIDX_STAY_CONNECTED_AFTER_DESYNC ) |
2016-03-02 20:27:54 +01:00
( 1 < < WIDX_AUTO_OPEN_SHOPS ) |
( 1 < < WIDX_DEFAULT_INSPECTION_INTERVAL ) |
2016-05-30 19:13:54 +02:00
( 1 < < WIDX_DEFAULT_INSPECTION_INTERVAL_DROPDOWN ) |
( 1 < < WIDX_WINDOW_LIMIT ) |
( 1 < < WIDX_WINDOW_LIMIT_UP ) |
( 1 < < WIDX_WINDOW_LIMIT_DOWN ) ,
2015-06-04 20:51:54 +02:00
MAIN_OPTIONS_ENABLED_WIDGETS |
( 1 < < WIDX_CHANNEL_BUTTON ) |
( 1 < < WIDX_FOLLOWER_PEEP_NAMES_CHECKBOX ) |
( 1 < < WIDX_FOLLOWER_PEEP_TRACKING_CHECKBOX ) |
( 1 < < WIDX_CHAT_PEEP_NAMES_CHECKBOX ) |
( 1 < < WIDX_CHAT_PEEP_TRACKING_CHECKBOX ) |
( 1 < < WIDX_NEWS_CHECKBOX )
} ;
# pragma endregion
2014-05-11 09:01:01 +02:00
/**
*
* rct2 : 0x006BAC5B
*/
void window_options_open ( )
{
rct_window * w ;
// Check if window is already open
2014-10-16 03:02:43 +02:00
w = window_bring_to_front_by_class ( WC_OPTIONS ) ;
2014-05-11 09:01:01 +02:00
if ( w ! = NULL )
return ;
2016-03-02 20:00:33 +01:00
w = window_create_centred ( WW , WH , & window_options_events , WC_OPTIONS , 0 ) ;
2015-06-04 20:51:54 +02:00
w - > widgets = window_options_display_widgets ;
w - > enabled_widgets = window_options_page_enabled_widgets [ WINDOW_OPTIONS_PAGE_DISPLAY ] ;
2014-08-16 16:29:15 +02:00
w - > page = WINDOW_OPTIONS_PAGE_DISPLAY ;
2015-06-04 20:51:54 +02:00
w - > frame_no = 0 ;
2014-05-11 09:01:01 +02:00
window_init_scroll_widgets ( w ) ;
2015-06-04 20:51:54 +02:00
//window_invalidate(w);
colour_scheme_update ( w ) ;
2014-05-11 09:01:01 +02:00
}
2015-06-04 20:51:54 +02:00
2014-05-11 09:01:01 +02:00
/**
*
* rct2 : 0x006BAFCA
*/
2017-01-04 22:17:08 +01:00
static void window_options_mouseup ( rct_window * w , sint32 widgetIndex )
2014-05-11 09:01:01 +02:00
{
2014-05-13 00:13:23 +02:00
switch ( widgetIndex ) {
case WIDX_CLOSE :
window_close ( w ) ;
break ;
2014-08-16 16:29:15 +02:00
case WIDX_TAB_1 :
case WIDX_TAB_2 :
case WIDX_TAB_3 :
case WIDX_TAB_4 :
case WIDX_TAB_5 :
2015-05-25 21:38:33 +02:00
case WIDX_TAB_6 :
2016-01-31 19:26:28 +01:00
case WIDX_TAB_7 :
2014-08-16 16:29:15 +02:00
window_options_set_page ( w , widgetIndex - WIDX_TAB_1 ) ;
break ;
2015-06-04 20:51:54 +02:00
}
switch ( w - > page ) {
case WINDOW_OPTIONS_PAGE_DISPLAY :
switch ( widgetIndex ) {
2015-07-04 21:00:32 +02:00
case WIDX_UNCAP_FPS_CHECKBOX :
gConfigGeneral . uncap_fps ^ = 1 ;
2016-07-27 16:31:25 +02:00
drawing_engine_set_fps_uncapped ( gConfigGeneral . uncap_fps ) ;
2015-07-04 21:00:32 +02:00
config_save_default ( ) ;
window_invalidate ( w ) ;
break ;
2015-12-09 22:42:46 +01:00
case WIDX_SHOW_FPS_CHECKBOX :
gConfigGeneral . show_fps ^ = 1 ;
config_save_default ( ) ;
window_invalidate ( w ) ;
break ;
2015-06-25 00:12:53 +02:00
case WIDX_MINIMIZE_FOCUS_LOSS :
gConfigGeneral . minimize_fullscreen_focus_loss ^ = 1 ;
platform_refresh_video ( ) ;
config_save_default ( ) ;
window_invalidate ( w ) ;
break ;
2015-10-03 20:46:34 +02:00
case WIDX_STEAM_OVERLAY_PAUSE :
gConfigGeneral . steam_overlay_pause ^ = 1 ;
config_save_default ( ) ;
window_invalidate ( w ) ;
break ;
2016-01-31 17:58:09 +01:00
case WIDX_SCALE_USE_NN_AT_INTEGER_SCALES_CHECKBOX :
gConfigGeneral . use_nn_at_integer_scales ^ = 1 ;
config_save_default ( ) ;
gfx_invalidate_screen ( ) ;
platform_trigger_resize ( ) ;
break ;
2016-01-31 19:26:28 +01:00
}
break ;
case WINDOW_OPTIONS_PAGE_RENDERING :
switch ( widgetIndex ) {
case WIDX_TILE_SMOOTHING_CHECKBOX :
gConfigGeneral . landscape_smoothing ^ = 1 ;
config_save_default ( ) ;
gfx_invalidate_screen ( ) ;
break ;
case WIDX_GRIDLINES_CHECKBOX :
gConfigGeneral . always_show_gridlines ^ = 1 ;
config_save_default ( ) ;
gfx_invalidate_screen ( ) ;
if ( ( w = window_get_main ( ) ) ! = NULL ) {
if ( gConfigGeneral . always_show_gridlines )
w - > viewport - > flags | = VIEWPORT_FLAG_GRIDLINES ;
else
w - > viewport - > flags & = ~ VIEWPORT_FLAG_GRIDLINES ;
}
break ;
2015-07-24 23:58:41 +02:00
case WIDX_DAY_NIGHT_CHECKBOX :
gConfigGeneral . day_night_cycle ^ = 1 ;
config_save_default ( ) ;
window_invalidate ( w ) ;
break ;
2015-07-25 21:38:23 +02:00
case WIDX_UPPER_CASE_BANNERS_CHECKBOX :
gConfigGeneral . upper_case_banners ^ = 1 ;
config_save_default ( ) ;
window_invalidate ( w ) ;
break ;
2016-03-04 23:10:37 +01:00
case WIDX_DISABLE_LIGHTNING_EFFECT_CHECKBOX :
gConfigGeneral . disable_lightning_effect ^ = 1 ;
config_save_default ( ) ;
window_invalidate ( w ) ;
break ;
2016-08-17 00:23:16 +02:00
case WIDX_RENDER_WEATHER_EFFECTS_CHECKBOX :
gConfigGeneral . render_weather_effects ^ = 1 ;
gConfigGeneral . render_weather_gloom = gConfigGeneral . render_weather_effects ;
config_save_default ( ) ;
2016-09-03 15:09:40 +02:00
window_invalidate ( w ) ;
2016-08-17 00:23:16 +02:00
gfx_invalidate_screen ( ) ;
break ;
2014-05-13 00:13:23 +02:00
}
break ;
2015-06-04 20:51:54 +02:00
case WINDOW_OPTIONS_PAGE_CULTURE :
2015-05-25 21:38:33 +02:00
break ;
2015-06-04 20:51:54 +02:00
case WINDOW_OPTIONS_PAGE_AUDIO :
switch ( widgetIndex ) {
case WIDX_SOUND_CHECKBOX :
2016-02-24 23:42:50 +01:00
gConfigSound . sound_enabled = ! gConfigSound . sound_enabled ;
2015-06-04 20:51:54 +02:00
config_save_default ( ) ;
window_invalidate ( w ) ;
break ;
case WIDX_MUSIC_CHECKBOX :
2016-02-24 23:42:50 +01:00
gConfigSound . ride_music_enabled = ! gConfigSound . ride_music_enabled ;
if ( ! gConfigSound . ride_music_enabled ) {
2015-11-16 23:39:40 +01:00
audio_stop_ride_music ( ) ;
2015-07-15 23:44:05 +02:00
}
2015-06-04 20:51:54 +02:00
config_save_default ( ) ;
window_invalidate ( w ) ;
break ;
2015-08-11 13:06:00 +02:00
case WIDX_AUDIO_FOCUS_CHECKBOX :
gConfigSound . audio_focus = ! gConfigSound . audio_focus ;
config_save_default ( ) ;
window_invalidate ( w ) ;
break ;
2015-06-04 20:51:54 +02:00
}
2015-05-25 21:38:33 +02:00
break ;
2015-06-04 20:51:54 +02:00
2015-07-26 14:37:27 +02:00
case WINDOW_OPTIONS_PAGE_CONTROLS_AND_INTERFACE :
2015-06-04 20:51:54 +02:00
switch ( widgetIndex ) {
case WIDX_HOTKEY_DROPDOWN :
window_shortcut_keys_open ( ) ;
break ;
case WIDX_SCREEN_EDGE_SCROLLING :
gConfigGeneral . edge_scrolling ^ = 1 ;
config_save_default ( ) ;
2015-10-02 16:13:36 +02:00
window_invalidate ( w ) ;
break ;
case WIDX_TRAP_CURSOR :
gConfigGeneral . trap_cursor ^ = 1 ;
config_save_default ( ) ;
2015-12-18 08:51:50 +01:00
SDL_SetWindowGrab ( gWindow , gConfigGeneral . trap_cursor ? SDL_TRUE : SDL_FALSE ) ;
2015-06-04 20:51:54 +02:00
window_invalidate ( w ) ;
break ;
2016-07-21 21:00:29 +02:00
case WIDX_ZOOM_TO_CURSOR :
gConfigGeneral . zoom_to_cursor ^ = 1 ;
config_save_default ( ) ;
window_invalidate ( w ) ;
break ;
2015-06-04 20:51:54 +02:00
case WIDX_TOOLBAR_SHOW_FINANCES :
gConfigInterface . toolbar_show_finances ^ = 1 ;
config_save_default ( ) ;
window_invalidate ( w ) ;
window_invalidate_by_class ( WC_TOP_TOOLBAR ) ;
break ;
case WIDX_TOOLBAR_SHOW_RESEARCH :
gConfigInterface . toolbar_show_research ^ = 1 ;
config_save_default ( ) ;
window_invalidate ( w ) ;
window_invalidate_by_class ( WC_TOP_TOOLBAR ) ;
break ;
case WIDX_TOOLBAR_SHOW_CHEATS :
gConfigInterface . toolbar_show_cheats ^ = 1 ;
config_save_default ( ) ;
window_invalidate ( w ) ;
window_invalidate_by_class ( WC_TOP_TOOLBAR ) ;
break ;
2015-07-22 19:13:35 +02:00
case WIDX_TOOLBAR_SHOW_NEWS :
gConfigInterface . toolbar_show_news ^ = 1 ;
config_save_default ( ) ;
window_invalidate ( w ) ;
window_invalidate_by_class ( WC_TOP_TOOLBAR ) ;
break ;
2015-06-20 17:52:38 +02:00
case WIDX_INVERT_DRAG :
gConfigGeneral . invert_viewport_drag ^ = 1 ;
config_save_default ( ) ;
window_invalidate ( w ) ;
break ;
2015-07-26 14:37:27 +02:00
case WIDX_THEMES_BUTTON :
window_themes_open ( ) ;
window_invalidate ( w ) ;
break ;
2015-06-24 12:41:19 +02:00
case WIDX_SELECT_BY_TRACK_TYPE :
gConfigInterface . select_by_track_type ^ = 1 ;
2015-06-04 20:51:54 +02:00
config_save_default ( ) ;
window_invalidate ( w ) ;
window_invalidate_by_class ( WC_RIDE ) ;
2015-06-25 11:46:17 +02:00
window_invalidate_by_class ( WC_CONSTRUCT_RIDE ) ;
2015-06-04 20:51:54 +02:00
break ;
2015-12-28 12:39:17 +01:00
case WIDX_SCENARIO_UNLOCKING :
2015-12-30 23:30:54 +01:00
gConfigGeneral . scenario_unlocking_enabled ^ = 1 ;
2015-12-28 12:39:17 +01:00
config_save_default ( ) ;
2016-01-01 14:46:23 +01:00
window_close_by_class ( WC_SCENARIO_SELECT ) ;
2015-12-28 12:39:17 +01:00
break ;
2015-07-26 14:37:27 +02:00
}
break ;
case WINDOW_OPTIONS_PAGE_MISC :
switch ( widgetIndex ) {
2015-06-04 20:51:54 +02:00
case WIDX_DEBUGGING_TOOLS :
gConfigGeneral . debugging_tools ^ = 1 ;
config_save_default ( ) ;
2015-12-31 22:13:49 +01:00
gfx_invalidate_screen ( ) ;
2015-06-04 20:51:54 +02:00
break ;
case WIDX_TEST_UNFINISHED_TRACKS :
gConfigGeneral . test_unfinished_tracks ^ = 1 ;
config_save_default ( ) ;
window_invalidate ( w ) ;
break ;
case WIDX_REAL_NAME_CHECKBOX :
2015-06-29 01:51:03 +02:00
peep_update_names (
2016-04-23 01:51:22 +02:00
! ( gParkFlags & PARK_FLAGS_SHOW_REAL_GUEST_NAMES )
2015-06-29 01:51:03 +02:00
) ;
2015-06-04 20:51:54 +02:00
break ;
case WIDX_SAVE_PLUGIN_DATA_CHECKBOX :
gConfigGeneral . save_plugin_data ^ = 1 ;
config_save_default ( ) ;
window_invalidate ( w ) ;
break ;
2015-06-11 22:34:38 +02:00
case WIDX_AUTO_STAFF_PLACEMENT :
gConfigGeneral . auto_staff_placement ^ = 1 ;
config_save_default ( ) ;
window_invalidate ( w ) ;
break ;
2015-08-17 01:26:42 +02:00
case WIDX_HANDYMEN_MOW_DEFAULT :
gConfigGeneral . handymen_mow_default = ! gConfigGeneral . handymen_mow_default ;
config_save_default ( ) ;
window_invalidate ( w ) ;
break ;
2015-06-24 18:22:12 +02:00
case WIDX_TITLE_SEQUENCE_BUTTON :
window_title_editor_open ( 0 ) ;
2015-08-18 11:58:47 +02:00
break ;
case WIDX_ALLOW_LOADING_WITH_INCORRECT_CHECKSUM :
gConfigGeneral . allow_loading_with_incorrect_checksum = ! gConfigGeneral . allow_loading_with_incorrect_checksum ;
2015-08-18 15:49:16 +02:00
config_save_default ( ) ;
window_invalidate ( w ) ;
2015-08-18 11:58:47 +02:00
break ;
2015-10-16 23:45:17 +02:00
case WIDX_STAY_CONNECTED_AFTER_DESYNC :
gConfigNetwork . stay_connected = ! gConfigNetwork . stay_connected ;
config_save_default ( ) ;
window_invalidate ( w ) ;
2015-12-24 09:00:41 +01:00
break ;
case WIDX_AUTO_OPEN_SHOPS :
gConfigGeneral . auto_open_shops = ! gConfigGeneral . auto_open_shops ;
config_save_default ( ) ;
window_invalidate ( w ) ;
2016-05-30 19:13:54 +02:00
break ;
2015-06-04 20:51:54 +02:00
}
2014-07-16 04:41:12 +02:00
break ;
2015-03-24 21:42:20 +01:00
2015-06-04 20:51:54 +02:00
case WINDOW_OPTIONS_PAGE_TWITCH :
switch ( widgetIndex ) {
case WIDX_CHANNEL_BUTTON :
window_text_input_raw_open ( w , widgetIndex , STR_TWITCH_NAME , STR_TWITCH_NAME_DESC , gConfigTwitch . channel , 32 ) ;
break ;
case WIDX_FOLLOWER_PEEP_NAMES_CHECKBOX :
gConfigTwitch . enable_follower_peep_names ^ = 1 ;
config_save_default ( ) ;
window_invalidate ( w ) ;
break ;
case WIDX_FOLLOWER_PEEP_TRACKING_CHECKBOX :
gConfigTwitch . enable_follower_peep_tracking ^ = 1 ;
config_save_default ( ) ;
window_invalidate ( w ) ;
break ;
case WIDX_CHAT_PEEP_NAMES_CHECKBOX :
gConfigTwitch . enable_chat_peep_names ^ = 1 ;
config_save_default ( ) ;
window_invalidate ( w ) ;
break ;
case WIDX_CHAT_PEEP_TRACKING_CHECKBOX :
gConfigTwitch . enable_chat_peep_tracking ^ = 1 ;
config_save_default ( ) ;
window_invalidate ( w ) ;
break ;
case WIDX_NEWS_CHECKBOX :
gConfigTwitch . enable_news ^ = 1 ;
config_save_default ( ) ;
window_invalidate ( w ) ;
break ;
}
2015-03-07 17:50:54 +01:00
break ;
2014-05-13 00:13:23 +02:00
}
2014-05-11 09:01:01 +02:00
}
/**
*
* rct2 : 0x006BB01B
*/
2017-01-04 22:17:08 +01:00
static void window_options_mousedown ( sint32 widgetIndex , rct_window * w , rct_widget * widget )
2014-05-11 09:01:01 +02:00
{
2017-01-04 22:17:08 +01:00
sint32 num_items ;
2015-10-20 20:16:30 +02:00
2014-05-11 17:24:52 +02:00
widget = & w - > widgets [ widgetIndex - 1 ] ;
2015-06-04 20:51:54 +02:00
switch ( w - > page ) {
case WINDOW_OPTIONS_PAGE_DISPLAY :
switch ( widgetIndex ) {
case WIDX_RESOLUTION_DROPDOWN :
{
platform_update_fullscreen_resolutions ( ) ;
2014-05-12 16:59:20 +02:00
2017-01-04 22:17:08 +01:00
sint32 selectedResolution = - 1 ;
for ( sint32 i = 0 ; i < gNumResolutions ; i + + ) {
2017-01-13 10:47:39 +01:00
resolution_t * resolution = & gResolutions [ i ] ;
2014-08-04 18:07:20 +02:00
2016-05-19 19:22:24 +02:00
gDropdownItemsFormat [ i ] = STR_DROPDOWN_MENU_LABEL ;
2015-02-06 23:35:08 +01:00
2015-06-04 20:51:54 +02:00
uint16 * args = ( uint16 * ) & gDropdownItemsArgs [ i ] ;
2016-07-14 14:07:49 +02:00
args [ 0 ] = STR_RESOLUTION_X_BY_Y ;
2015-06-04 20:51:54 +02:00
args [ 1 ] = resolution - > width ;
args [ 2 ] = resolution - > height ;
2015-02-06 23:35:08 +01:00
2015-06-04 20:51:54 +02:00
if ( resolution - > width = = gConfigGeneral . fullscreen_width & & resolution - > height = = gConfigGeneral . fullscreen_height )
selectedResolution = i ;
}
2015-02-06 23:35:08 +01:00
2015-06-04 20:51:54 +02:00
window_options_show_dropdown ( w , widget , gNumResolutions ) ;
2014-05-12 16:59:20 +02:00
2015-10-14 21:54:02 +02:00
if ( selectedResolution ! = - 1 & & selectedResolution < 32 ) {
dropdown_set_checked ( selectedResolution , true ) ;
}
2014-05-12 16:59:20 +02:00
}
2014-07-31 18:43:57 +02:00
2014-05-11 17:24:52 +02:00
break ;
2015-06-04 20:51:54 +02:00
case WIDX_FULLSCREEN_DROPDOWN :
2016-05-19 19:22:24 +02:00
gDropdownItemsFormat [ 0 ] = STR_DROPDOWN_MENU_LABEL ;
gDropdownItemsFormat [ 1 ] = STR_DROPDOWN_MENU_LABEL ;
gDropdownItemsFormat [ 2 ] = STR_DROPDOWN_MENU_LABEL ;
2016-07-14 14:07:49 +02:00
gDropdownItemsArgs [ 0 ] = STR_OPTIONS_DISPLAY_WINDOWED ;
gDropdownItemsArgs [ 1 ] = STR_OPTIONS_DISPLAY_FULLSCREEN ;
gDropdownItemsArgs [ 2 ] = STR_OPTIONS_DISPLAY_FULLSCREEN_BORDERLESS ;
2015-06-04 20:51:54 +02:00
window_options_show_dropdown ( w , widget , 3 ) ;
2015-10-14 21:54:02 +02:00
dropdown_set_checked ( gConfigGeneral . fullscreen_mode , true ) ;
2015-06-04 20:51:54 +02:00
break ;
2016-06-05 23:16:35 +02:00
case WIDX_DRAWING_ENGINE_DROPDOWN :
2016-06-06 00:43:58 +02:00
{
2017-01-04 22:17:08 +01:00
sint32 numItems = 3 ;
2016-06-06 00:43:58 +02:00
# ifdef DISABLE_OPENGL
numItems = 2 ;
# endif
2017-01-04 22:17:08 +01:00
for ( sint32 i = 0 ; i < numItems ; i + + ) {
2016-06-05 23:16:35 +02:00
gDropdownItemsFormat [ i ] = STR_DROPDOWN_MENU_LABEL ;
gDropdownItemsArgs [ i ] = DrawingEngineStringIds [ i ] ;
}
2016-06-06 00:43:58 +02:00
window_options_show_dropdown ( w , widget , numItems ) ;
2016-06-05 23:16:35 +02:00
dropdown_set_checked ( gConfigGeneral . drawing_engine , true ) ;
break ;
2016-06-06 00:43:58 +02:00
}
2015-11-12 00:42:42 +01:00
case WIDX_SCALE_UP :
gConfigGeneral . window_scale + = 0.25f ;
config_save_default ( ) ;
gfx_invalidate_screen ( ) ;
platform_trigger_resize ( ) ;
break ;
case WIDX_SCALE_DOWN :
gConfigGeneral . window_scale - = 0.25f ;
gConfigGeneral . window_scale = max ( 0.5f , gConfigGeneral . window_scale ) ;
config_save_default ( ) ;
gfx_invalidate_screen ( ) ;
platform_trigger_resize ( ) ;
break ;
2016-01-31 17:42:19 +01:00
case WIDX_SCALE_QUALITY_DROPDOWN :
2016-05-19 19:22:24 +02:00
gDropdownItemsFormat [ 0 ] = STR_DROPDOWN_MENU_LABEL ;
gDropdownItemsFormat [ 1 ] = STR_DROPDOWN_MENU_LABEL ;
gDropdownItemsFormat [ 2 ] = STR_DROPDOWN_MENU_LABEL ;
2016-01-31 17:42:19 +01:00
gDropdownItemsArgs [ 0 ] = STR_SCALING_QUALITY_NN ;
gDropdownItemsArgs [ 1 ] = STR_SCALING_QUALITY_LINEAR ;
gDropdownItemsArgs [ 2 ] = STR_SCALING_QUALITY_ANISOTROPIC ;
window_options_show_dropdown ( w , widget , 3 ) ;
dropdown_set_checked ( gConfigGeneral . scale_quality , true ) ;
break ;
2015-06-04 20:51:54 +02:00
}
2014-05-11 17:24:52 +02:00
break ;
2015-01-23 21:47:33 +01:00
2016-01-31 19:26:28 +01:00
case WINDOW_OPTIONS_PAGE_RENDERING :
switch ( widgetIndex ) {
case WIDX_CONSTRUCTION_MARKER_DROPDOWN :
2016-05-19 19:22:24 +02:00
gDropdownItemsFormat [ 0 ] = STR_DROPDOWN_MENU_LABEL ;
gDropdownItemsFormat [ 1 ] = STR_DROPDOWN_MENU_LABEL ;
2016-07-14 14:07:49 +02:00
gDropdownItemsArgs [ 0 ] = STR_CONSTRUCTION_MARKER_COLOUR_WHITE ;
gDropdownItemsArgs [ 1 ] = STR_CONSTRUCTION_MARKER_COLOUR_TRANSLUCENT ;
2016-01-31 19:26:28 +01:00
window_options_show_dropdown ( w , widget , 2 ) ;
dropdown_set_checked ( gConfigGeneral . construction_marker_colour , true ) ;
break ;
}
break ;
2015-06-04 20:51:54 +02:00
case WINDOW_OPTIONS_PAGE_CULTURE :
switch ( widgetIndex ) {
case WIDX_HEIGHT_LABELS_DROPDOWN :
2016-05-19 19:22:24 +02:00
gDropdownItemsFormat [ 0 ] = STR_DROPDOWN_MENU_LABEL ;
gDropdownItemsFormat [ 1 ] = STR_DROPDOWN_MENU_LABEL ;
2015-06-04 20:51:54 +02:00
gDropdownItemsArgs [ 0 ] = STR_UNITS ;
gDropdownItemsArgs [ 1 ] = STR_REAL_VALUES ;
window_options_show_dropdown ( w , widget , 2 ) ;
2015-11-08 11:46:11 +01:00
dropdown_set_checked ( gConfigGeneral . show_height_as_units ? 0 : 1 , true ) ;
2015-06-04 20:51:54 +02:00
break ;
case WIDX_CURRENCY_DROPDOWN :
2016-06-22 13:17:30 +02:00
num_items = CURRENCY_END + 1 ; // All the currencies plus the separator
2017-01-04 22:17:08 +01:00
sint32 num_ordinary_currencies = CURRENCY_END - 1 ; // All the currencies except custom currency
2015-06-04 20:51:54 +02:00
2017-01-04 22:17:08 +01:00
for ( size_t i = 0 ; i < num_ordinary_currencies ; i + + ) {
2016-05-19 19:22:24 +02:00
gDropdownItemsFormat [ i ] = STR_DROPDOWN_MENU_LABEL ;
2015-11-25 23:31:00 +01:00
gDropdownItemsArgs [ i ] = CurrencyDescriptors [ i ] . stringId ;
2015-06-04 20:51:54 +02:00
}
2015-01-23 21:47:33 +01:00
2016-06-22 13:17:30 +02:00
gDropdownItemsFormat [ num_ordinary_currencies ] = DROPDOWN_SEPARATOR ;
2016-07-01 21:37:54 +02:00
gDropdownItemsFormat [ num_ordinary_currencies + 1 ] = STR_DROPDOWN_MENU_LABEL ;
gDropdownItemsArgs [ num_ordinary_currencies + 1 ] = CurrencyDescriptors [ CURRENCY_CUSTOM ] . stringId ;
2016-06-22 13:17:30 +02:00
2015-06-04 20:51:54 +02:00
window_options_show_dropdown ( w , widget , num_items ) ;
2016-06-23 22:52:10 +02:00
if ( gConfigGeneral . currency_format = = CURRENCY_CUSTOM ) {
2016-07-01 21:37:54 +02:00
dropdown_set_checked ( gConfigGeneral . currency_format + 1 , true ) ;
2016-06-23 22:52:10 +02:00
} else {
dropdown_set_checked ( gConfigGeneral . currency_format , true ) ;
}
2015-06-04 20:51:54 +02:00
break ;
case WIDX_DISTANCE_DROPDOWN :
2016-05-19 19:22:24 +02:00
gDropdownItemsFormat [ 0 ] = STR_DROPDOWN_MENU_LABEL ;
gDropdownItemsFormat [ 1 ] = STR_DROPDOWN_MENU_LABEL ;
gDropdownItemsFormat [ 2 ] = STR_DROPDOWN_MENU_LABEL ;
2015-06-04 20:51:54 +02:00
gDropdownItemsArgs [ 0 ] = STR_IMPERIAL ;
gDropdownItemsArgs [ 1 ] = STR_METRIC ;
2015-12-18 22:11:24 +01:00
gDropdownItemsArgs [ 2 ] = STR_SI ;
2015-06-04 20:51:54 +02:00
2015-12-18 22:11:24 +01:00
window_options_show_dropdown ( w , widget , 3 ) ;
2015-06-04 20:51:54 +02:00
2015-10-14 21:54:02 +02:00
dropdown_set_checked ( gConfigGeneral . measurement_format , true ) ;
2015-06-04 20:51:54 +02:00
break ;
case WIDX_TEMPERATURE_DROPDOWN :
2016-05-19 19:22:24 +02:00
gDropdownItemsFormat [ 0 ] = STR_DROPDOWN_MENU_LABEL ;
gDropdownItemsFormat [ 1 ] = STR_DROPDOWN_MENU_LABEL ;
2015-06-04 20:51:54 +02:00
gDropdownItemsArgs [ 0 ] = STR_CELSIUS ;
gDropdownItemsArgs [ 1 ] = STR_FAHRENHEIT ;
window_options_show_dropdown ( w , widget , 2 ) ;
2015-10-14 21:54:02 +02:00
dropdown_set_checked ( gConfigGeneral . temperature_format , true ) ;
2015-06-04 20:51:54 +02:00
break ;
case WIDX_LANGUAGE_DROPDOWN :
2017-01-04 22:17:08 +01:00
for ( size_t i = 1 ; i < LANGUAGE_COUNT ; i + + ) {
2016-07-14 14:07:49 +02:00
gDropdownItemsFormat [ i - 1 ] = STR_OPTIONS_DROPDOWN_ITEM ;
2016-08-03 20:53:25 +02:00
gDropdownItemsArgs [ i - 1 ] = ( uintptr_t ) LanguagesDescriptors [ i ] . native_name ;
2015-06-04 20:51:54 +02:00
}
window_options_show_dropdown ( w , widget , LANGUAGE_COUNT - 1 ) ;
2015-10-14 21:54:02 +02:00
dropdown_set_checked ( gCurrentLanguage - 1 , true ) ;
2015-06-04 20:51:54 +02:00
break ;
case WIDX_DATE_FORMAT_DROPDOWN :
2017-01-04 22:17:08 +01:00
for ( size_t i = 0 ; i < 4 ; i + + ) {
2016-05-19 19:22:24 +02:00
gDropdownItemsFormat [ i ] = STR_DROPDOWN_MENU_LABEL ;
2015-09-26 15:35:26 +02:00
gDropdownItemsArgs [ i ] = DateFormatStringIds [ i ] ;
2015-06-04 20:51:54 +02:00
}
2015-09-26 15:35:26 +02:00
window_options_show_dropdown ( w , widget , 4 ) ;
2015-10-14 21:54:02 +02:00
dropdown_set_checked ( gConfigGeneral . date_format , true ) ;
2015-06-04 20:51:54 +02:00
break ;
2015-01-23 21:47:33 +01:00
}
2014-05-11 17:24:52 +02:00
break ;
2014-07-31 18:43:57 +02:00
2015-06-04 20:51:54 +02:00
case WINDOW_OPTIONS_PAGE_AUDIO :
switch ( widgetIndex ) {
case WIDX_SOUND_DROPDOWN :
2015-11-16 23:39:47 +01:00
audio_populate_devices ( ) ;
2015-06-04 20:51:54 +02:00
// populate the list with the sound devices
2017-01-04 22:17:08 +01:00
for ( size_t i = 0 ; i < gAudioDeviceCount ; i + + ) {
2016-09-05 01:05:48 +02:00
gDropdownItemsFormat [ i ] = STR_OPTIONS_DROPDOWN_ITEM ;
gDropdownItemsArgs [ i ] = ( uintptr_t ) gAudioDevices [ i ] . name ;
2015-06-04 20:51:54 +02:00
}
2014-08-04 18:07:20 +02:00
2015-06-04 20:51:54 +02:00
window_options_show_dropdown ( w , widget , gAudioDeviceCount ) ;
2014-05-12 16:59:20 +02:00
2016-04-17 15:20:26 +02:00
dropdown_set_checked ( gAudioCurrentDevice , true ) ;
2015-06-04 20:51:54 +02:00
break ;
case WIDX_TITLE_MUSIC_DROPDOWN :
num_items = 4 ;
2014-08-04 18:07:20 +02:00
2017-01-04 22:17:08 +01:00
for ( size_t i = 0 ; i < num_items ; i + + ) {
2016-05-19 19:22:24 +02:00
gDropdownItemsFormat [ i ] = STR_DROPDOWN_MENU_LABEL ;
2016-07-14 14:07:49 +02:00
gDropdownItemsArgs [ i ] = window_options_title_music_names [ i ] ;
2015-06-04 20:51:54 +02:00
}
2014-08-04 18:07:20 +02:00
2015-06-04 20:51:54 +02:00
window_options_show_dropdown ( w , widget , num_items ) ;
2015-05-30 18:43:24 +02:00
2015-10-14 21:54:02 +02:00
dropdown_set_checked ( gConfigSound . title_music , true ) ;
2015-06-04 20:51:54 +02:00
break ;
2015-05-30 18:43:24 +02:00
}
break ;
2015-06-04 20:51:54 +02:00
2015-07-26 14:37:27 +02:00
case WINDOW_OPTIONS_PAGE_CONTROLS_AND_INTERFACE :
switch ( widgetIndex ) {
case WIDX_THEMES_DROPDOWN :
2017-01-04 22:17:08 +01:00
num_items = ( sint32 ) theme_manager_get_num_available_themes ( ) ;
2015-07-26 14:37:27 +02:00
2017-01-04 22:17:08 +01:00
for ( sint32 i = 0 ; i < num_items ; i + + ) {
2016-07-14 14:07:49 +02:00
gDropdownItemsFormat [ i ] = STR_OPTIONS_DROPDOWN_ITEM ;
2016-08-03 20:53:25 +02:00
gDropdownItemsArgs [ i ] = ( uintptr_t ) theme_manager_get_available_theme_name ( i ) ;
2015-07-26 14:37:27 +02:00
}
window_dropdown_show_text_custom_width (
w - > x + widget - > left ,
w - > y + widget - > top ,
widget - > bottom - widget - > top + 1 ,
w - > colours [ 1 ] ,
DROPDOWN_FLAG_STAY_OPEN ,
num_items ,
widget - > right - widget - > left - 3
2016-01-29 20:39:31 +01:00
) ;
2015-07-26 14:37:27 +02:00
2017-01-04 22:17:08 +01:00
dropdown_set_checked ( ( sint32 ) theme_manager_get_active_available_theme_index ( ) , true ) ;
2016-01-29 20:39:31 +01:00
widget_invalidate ( w , WIDX_THEMES_DROPDOWN ) ;
2015-07-26 14:37:27 +02:00
break ;
2015-12-28 12:39:17 +01:00
2015-12-30 23:30:54 +01:00
case WIDX_SCENARIO_GROUPING_DROPDOWN :
2015-12-28 12:39:17 +01:00
num_items = 2 ;
2016-05-19 19:22:24 +02:00
gDropdownItemsFormat [ 0 ] = STR_DROPDOWN_MENU_LABEL ;
2015-12-30 23:30:54 +01:00
gDropdownItemsArgs [ 0 ] = STR_OPTIONS_SCENARIO_DIFFICULTY ;
2016-05-19 19:22:24 +02:00
gDropdownItemsFormat [ 1 ] = STR_DROPDOWN_MENU_LABEL ;
2015-12-30 23:30:54 +01:00
gDropdownItemsArgs [ 1 ] = STR_OPTIONS_SCENARIO_ORIGIN ;
2015-12-28 12:39:17 +01:00
2015-12-30 23:30:54 +01:00
window_dropdown_show_text_custom_width (
w - > x + widget - > left ,
w - > y + widget - > top ,
widget - > bottom - widget - > top + 1 ,
w - > colours [ 1 ] ,
DROPDOWN_FLAG_STAY_OPEN ,
num_items ,
widget - > right - widget - > left - 3
) ;
2015-12-28 12:39:17 +01:00
2015-12-30 23:30:54 +01:00
dropdown_set_checked ( gConfigGeneral . scenario_select_mode , true ) ;
2015-12-28 12:39:17 +01:00
break ;
2015-07-26 14:37:27 +02:00
}
2014-08-15 00:46:36 +02:00
break ;
2015-06-04 20:51:54 +02:00
case WINDOW_OPTIONS_PAGE_MISC :
switch ( widgetIndex ) {
case WIDX_AUTOSAVE_DROPDOWN :
2017-01-04 22:17:08 +01:00
for ( size_t i = AUTOSAVE_EVERY_MINUTE ; i < = AUTOSAVE_NEVER ; i + + ) {
2016-05-19 19:22:24 +02:00
gDropdownItemsFormat [ i ] = STR_DROPDOWN_MENU_LABEL ;
2016-07-14 14:07:49 +02:00
gDropdownItemsArgs [ i ] = window_options_autosave_names [ i ] ;
2015-06-04 20:51:54 +02:00
}
2015-10-03 14:18:43 +02:00
2015-06-04 20:51:54 +02:00
window_options_show_dropdown ( w , widget , AUTOSAVE_NEVER + 1 ) ;
2015-10-14 21:54:02 +02:00
dropdown_set_checked ( gConfigGeneral . autosave_frequency , true ) ;
2015-06-04 20:51:54 +02:00
break ;
2015-06-14 22:01:48 +02:00
case WIDX_TITLE_SEQUENCE_DROPDOWN :
2017-01-04 22:17:08 +01:00
num_items = ( sint32 ) title_sequence_manager_get_count ( ) ;
for ( size_t i = 0 ; i < num_items ; i + + ) {
2016-07-14 14:07:49 +02:00
gDropdownItemsFormat [ i ] = STR_OPTIONS_DROPDOWN_ITEM ;
2016-11-12 18:12:11 +01:00
gDropdownItemsArgs [ i ] = ( uintptr_t ) title_sequence_manager_get_name ( i ) ;
2015-06-24 18:22:12 +02:00
}
2016-01-01 17:30:18 +01:00
window_dropdown_show_text (
2015-06-24 18:22:12 +02:00
w - > x + widget - > left ,
w - > y + widget - > top ,
widget - > bottom - widget - > top + 1 ,
w - > colours [ 1 ] ,
DROPDOWN_FLAG_STAY_OPEN ,
2016-01-01 17:30:18 +01:00
num_items
) ;
2015-06-24 18:22:12 +02:00
2016-12-07 03:53:58 +01:00
dropdown_set_checked ( gTitleCurrentSequence , true ) ;
2015-06-24 18:22:12 +02:00
break ;
2016-03-02 20:27:54 +01:00
case WIDX_DEFAULT_INSPECTION_INTERVAL_DROPDOWN :
2017-01-04 22:17:08 +01:00
for ( size_t i = 0 ; i < 7 ; i + + ) {
2016-05-19 19:22:24 +02:00
gDropdownItemsFormat [ i ] = STR_DROPDOWN_MENU_LABEL ;
2016-07-14 14:07:49 +02:00
gDropdownItemsArgs [ i ] = RideInspectionIntervalNames [ i ] ;
2016-03-02 20:27:54 +01:00
}
window_options_show_dropdown ( w , widget , 7 ) ;
dropdown_set_checked ( gConfigGeneral . default_inspection_interval , true ) ;
break ;
2016-05-30 19:13:54 +02:00
case WIDX_WINDOW_LIMIT_UP :
2017-01-12 19:20:22 +01:00
{
2017-01-04 22:17:08 +01:00
sint32 i = gConfigGeneral . window_limit ;
2016-07-15 16:25:59 +02:00
if ( i < WINDOW_LIMIT_MAX ) {
2016-05-30 19:13:54 +02:00
window_set_window_limit ( + + i ) ;
}
window_invalidate ( w ) ;
break ;
2017-01-12 19:20:22 +01:00
}
2016-05-30 19:13:54 +02:00
case WIDX_WINDOW_LIMIT_DOWN :
2017-01-12 19:20:22 +01:00
{
2017-01-04 22:17:08 +01:00
sint32 i = gConfigGeneral . window_limit ;
2016-07-15 16:25:59 +02:00
if ( i > WINDOW_LIMIT_MIN ) {
2016-05-30 19:13:54 +02:00
window_set_window_limit ( - - i ) ;
}
window_invalidate ( w ) ;
break ;
2015-02-21 12:05:15 +01:00
}
2017-01-12 19:20:22 +01:00
}
2015-02-21 12:05:15 +01:00
break ;
2015-06-04 20:51:54 +02:00
case WINDOW_OPTIONS_PAGE_TWITCH :
2015-05-24 18:38:07 +02:00
break ;
2014-05-11 17:24:52 +02:00
}
2014-05-11 09:01:01 +02:00
}
/**
*
* rct2 : 0x006BB076
*/
2017-01-04 22:17:08 +01:00
static void window_options_dropdown ( rct_window * w , sint32 widgetIndex , sint32 dropdownIndex )
2014-05-11 09:01:01 +02:00
{
2014-05-12 21:18:27 +02:00
if ( dropdownIndex = = - 1 )
return ;
2015-06-04 20:51:54 +02:00
switch ( w - > page ) {
case WINDOW_OPTIONS_PAGE_DISPLAY :
switch ( widgetIndex ) {
case WIDX_RESOLUTION_DROPDOWN :
{
2017-01-13 10:47:39 +01:00
resolution_t * resolution = & gResolutions [ dropdownIndex ] ;
2015-06-04 20:51:54 +02:00
if ( resolution - > width ! = gConfigGeneral . fullscreen_width | | resolution - > height ! = gConfigGeneral . fullscreen_height ) {
gConfigGeneral . fullscreen_width = resolution - > width ;
gConfigGeneral . fullscreen_height = resolution - > height ;
if ( gConfigGeneral . fullscreen_mode = = SDL_WINDOW_FULLSCREEN )
platform_set_fullscreen_mode ( SDL_WINDOW_FULLSCREEN ) ;
config_save_default ( ) ;
gfx_invalidate_screen ( ) ;
}
2014-10-07 20:16:17 +02:00
}
2015-06-04 20:51:54 +02:00
break ;
case WIDX_FULLSCREEN_DROPDOWN :
if ( dropdownIndex ! = gConfigGeneral . fullscreen_mode ) {
platform_set_fullscreen_mode ( dropdownIndex ) ;
2015-01-23 21:47:33 +01:00
2015-06-04 20:51:54 +02:00
gConfigGeneral . fullscreen_mode = ( uint8 ) dropdownIndex ;
2015-02-16 23:47:11 +01:00
config_save_default ( ) ;
2015-01-23 21:47:33 +01:00
gfx_invalidate_screen ( ) ;
}
2015-06-04 20:51:54 +02:00
break ;
2016-06-05 23:16:35 +02:00
case WIDX_DRAWING_ENGINE_DROPDOWN :
if ( dropdownIndex ! = gConfigGeneral . drawing_engine ) {
gConfigGeneral . drawing_engine = ( uint8 ) dropdownIndex ;
# ifdef __WINDOWS__
// Windows is apparently able to switch to hardware rendering on the fly although
// using the same window in an unaccelerated and accelerated context is unsupported by SDL2
platform_refresh_video ( ) ;
# else
// Linux requires a restart. This could be improved in the future by recreating the window,
// https://github.com/OpenRCT2/OpenRCT2/issues/2015
window_error_open ( STR_RESTART_REQUIRED , STR_NONE ) ;
# endif
config_save_default ( ) ;
window_invalidate ( w ) ;
}
break ;
2016-01-31 17:42:19 +01:00
case WIDX_SCALE_QUALITY_DROPDOWN :
if ( dropdownIndex ! = gConfigGeneral . scale_quality ) {
gConfigGeneral . scale_quality = ( uint8 ) dropdownIndex ;
config_save_default ( ) ;
gfx_invalidate_screen ( ) ;
platform_trigger_resize ( ) ;
}
break ;
2014-05-12 21:18:27 +02:00
}
break ;
2015-06-04 20:51:54 +02:00
2016-01-31 19:26:28 +01:00
case WINDOW_OPTIONS_PAGE_RENDERING :
switch ( widgetIndex ) {
case WIDX_CONSTRUCTION_MARKER_DROPDOWN :
if ( dropdownIndex ! = gConfigGeneral . construction_marker_colour ) {
gConfigGeneral . construction_marker_colour = ( uint8 ) dropdownIndex ;
config_save_default ( ) ;
gfx_invalidate_screen ( ) ;
}
break ;
}
break ;
2015-06-04 20:51:54 +02:00
case WINDOW_OPTIONS_PAGE_CULTURE :
switch ( widgetIndex ) {
case WIDX_HEIGHT_LABELS_DROPDOWN :
// reset flag and set it to 1 if height as units is selected
gConfigGeneral . show_height_as_units = 0 ;
if ( dropdownIndex = = 0 ) {
gConfigGeneral . show_height_as_units = 1 ;
}
2016-05-03 23:36:29 +02:00
config_save_default ( ) ;
2015-06-04 20:51:54 +02:00
window_options_update_height_markers ( ) ;
break ;
case WIDX_CURRENCY_DROPDOWN :
2016-07-01 21:37:54 +02:00
if ( dropdownIndex = = CURRENCY_CUSTOM + 1 ) { // Add 1 because the separator occupies a position
gConfigGeneral . currency_format = ( sint8 ) dropdownIndex - 1 ;
2016-06-27 23:03:41 +02:00
custom_currency_window_open ( ) ;
2016-06-22 13:17:30 +02:00
} else {
gConfigGeneral . currency_format = ( sint8 ) dropdownIndex ;
2016-06-24 19:57:17 +02:00
}
2015-02-16 23:47:11 +01:00
config_save_default ( ) ;
2014-05-12 21:18:27 +02:00
gfx_invalidate_screen ( ) ;
2015-06-04 20:51:54 +02:00
break ;
case WIDX_DISTANCE_DROPDOWN :
gConfigGeneral . measurement_format = ( sint8 ) dropdownIndex ;
2015-02-16 23:47:11 +01:00
config_save_default ( ) ;
2015-06-04 20:51:54 +02:00
window_options_update_height_markers ( ) ;
break ;
case WIDX_TEMPERATURE_DROPDOWN :
if ( dropdownIndex ! = gConfigGeneral . temperature_format ) {
gConfigGeneral . temperature_format = ( sint8 ) dropdownIndex ;
config_save_default ( ) ;
gfx_invalidate_screen ( ) ;
}
break ;
case WIDX_LANGUAGE_DROPDOWN :
2015-11-04 18:11:10 +01:00
{
2017-01-04 22:17:08 +01:00
sint32 fallbackLanguage = gCurrentLanguage ;
2015-11-04 18:11:10 +01:00
if ( dropdownIndex ! = gCurrentLanguage - 1 ) {
if ( ! language_open ( dropdownIndex + 1 ) )
{
// Failed to open language file, try to recover by falling
// back to previously used language
if ( language_open ( fallbackLanguage ) )
{
// It worked, so we can say it with error message in-game
window_error_open ( STR_LANGUAGE_LOAD_FAILED , STR_NONE ) ;
}
// report error to console regardless
log_error ( " Failed to open language file. " ) ;
dropdownIndex = fallbackLanguage - 1 ;
} else {
gConfigGeneral . language = dropdownIndex + 1 ;
config_save_default ( ) ;
gfx_invalidate_screen ( ) ;
}
}
2015-06-04 20:51:54 +02:00
}
break ;
case WIDX_DATE_FORMAT_DROPDOWN :
if ( dropdownIndex ! = gConfigGeneral . date_format ) {
gConfigGeneral . date_format = ( uint8 ) dropdownIndex ;
config_save_default ( ) ;
gfx_invalidate_screen ( ) ;
}
break ;
2014-08-15 00:46:36 +02:00
}
break ;
2015-06-04 20:51:54 +02:00
case WINDOW_OPTIONS_PAGE_AUDIO :
switch ( widgetIndex ) {
case WIDX_SOUND_DROPDOWN :
2015-11-17 01:42:23 +01:00
audio_init_ride_sounds ( dropdownIndex ) ;
2015-06-04 20:51:54 +02:00
if ( dropdownIndex < gAudioDeviceCount ) {
if ( dropdownIndex = = 0 ) {
Mixer_Init ( NULL ) ;
2015-07-14 23:49:46 +02:00
gConfigSound . device = NULL ;
2015-06-04 20:51:54 +02:00
}
else {
2015-07-14 23:49:46 +02:00
char * devicename = gAudioDevices [ dropdownIndex ] . name ;
Mixer_Init ( devicename ) ;
SafeFree ( gConfigSound . device ) ;
2015-10-30 15:18:29 +01:00
gConfigSound . device = strndup ( devicename , AUDIO_DEVICE_NAME_SIZE ) ;
2015-06-04 20:51:54 +02:00
}
2015-07-14 23:49:46 +02:00
config_save_default ( ) ;
2016-11-09 18:37:41 +01:00
audio_start_title_music ( ) ;
2015-06-04 20:51:54 +02:00
}
2015-02-21 12:05:15 +01:00
window_invalidate ( w ) ;
2015-06-04 20:51:54 +02:00
break ;
case WIDX_TITLE_MUSIC_DROPDOWN :
if ( ( dropdownIndex = = 1 | | dropdownIndex = = 3 ) & & ! platform_file_exists ( get_file_path ( PATH_ID_CSS50 ) ) ) {
2016-07-14 14:07:49 +02:00
window_error_open ( STR_OPTIONS_MUSIC_ERR_CSS50_NOT_FOUND , STR_OPTIONS_MUSIC_ERR_CSS50_NOT_FOUND_HINT ) ;
2015-06-04 20:51:54 +02:00
}
else {
gConfigSound . title_music = ( sint8 ) dropdownIndex ;
config_save_default ( ) ;
window_invalidate ( w ) ;
}
2015-11-16 23:39:40 +01:00
audio_stop_title_music ( ) ;
2015-06-04 20:51:54 +02:00
if ( dropdownIndex ! = 0 )
2015-11-16 23:39:40 +01:00
audio_start_title_music ( ) ;
2015-06-04 20:51:54 +02:00
break ;
2015-02-21 12:05:15 +01:00
}
break ;
2015-06-04 20:51:54 +02:00
2015-07-26 14:37:27 +02:00
case WINDOW_OPTIONS_PAGE_CONTROLS_AND_INTERFACE :
switch ( widgetIndex ) {
case WIDX_THEMES_DROPDOWN :
if ( dropdownIndex ! = - 1 ) {
2016-01-29 20:39:31 +01:00
theme_manager_set_active_available_theme ( dropdownIndex ) ;
2015-07-26 14:37:27 +02:00
}
config_save_default ( ) ;
break ;
2015-12-30 23:30:54 +01:00
case WIDX_SCENARIO_GROUPING_DROPDOWN :
if ( dropdownIndex ! = gConfigGeneral . scenario_select_mode ) {
gConfigGeneral . scenario_select_mode = dropdownIndex ;
config_save_default ( ) ;
window_invalidate ( w ) ;
2015-12-31 03:59:08 +01:00
window_close_by_class ( WC_SCENARIO_SELECT ) ;
2015-12-30 23:30:54 +01:00
}
2015-12-28 12:39:17 +01:00
break ;
2015-07-26 14:37:27 +02:00
}
2015-05-24 18:38:07 +02:00
break ;
2015-06-04 20:51:54 +02:00
case WINDOW_OPTIONS_PAGE_MISC :
switch ( widgetIndex ) {
case WIDX_AUTOSAVE_DROPDOWN :
if ( dropdownIndex ! = gConfigGeneral . autosave_frequency ) {
gConfigGeneral . autosave_frequency = ( uint8 ) dropdownIndex ;
config_save_default ( ) ;
window_invalidate ( w ) ;
}
break ;
2015-06-14 22:01:48 +02:00
case WIDX_TITLE_SEQUENCE_DROPDOWN :
2016-12-07 03:53:58 +01:00
if ( dropdownIndex ! = gTitleCurrentSequence ) {
2015-06-24 18:22:12 +02:00
title_sequence_change_preset ( dropdownIndex ) ;
2015-06-14 22:01:48 +02:00
config_save_default ( ) ;
window_invalidate ( w ) ;
}
break ;
2016-03-02 20:27:54 +01:00
case WIDX_DEFAULT_INSPECTION_INTERVAL_DROPDOWN :
if ( dropdownIndex ! = gConfigGeneral . default_inspection_interval ) {
gConfigGeneral . default_inspection_interval = ( uint8 ) dropdownIndex ;
config_save_default ( ) ;
window_invalidate ( w ) ;
}
break ;
2015-05-30 18:43:24 +02:00
}
2015-06-04 20:51:54 +02:00
break ;
case WINDOW_OPTIONS_PAGE_TWITCH :
2015-05-30 18:43:24 +02:00
break ;
2014-05-12 21:18:27 +02:00
}
2014-05-11 09:01:01 +02:00
}
/**
2015-10-20 20:16:30 +02:00
*
2014-05-11 09:01:01 +02:00
* rct2 : 0x006BAD48
*/
2015-07-10 02:39:16 +02:00
static void window_options_invalidate ( rct_window * w )
2014-05-11 09:01:01 +02:00
{
2015-06-04 22:29:21 +02:00
rct_widget * widget ;
2014-05-19 22:53:14 +02:00
2015-05-29 18:04:53 +02:00
colour_scheme_update ( w ) ;
2014-05-14 00:59:34 +02:00
2015-06-04 20:51:54 +02:00
if ( window_options_page_widgets [ w - > page ] ! = w - > widgets ) {
w - > widgets = window_options_page_widgets [ w - > page ] ;
window_init_scroll_widgets ( w ) ;
2014-05-14 00:59:34 +02:00
}
2015-06-04 20:51:54 +02:00
window_options_set_pressed_tab ( w ) ;
2015-06-09 18:14:57 +02:00
w - > disabled_widgets = 0 ;
2014-08-16 16:29:15 +02:00
switch ( w - > page ) {
case WINDOW_OPTIONS_PAGE_DISPLAY :
2016-05-15 23:03:53 +02:00
set_format_arg ( 16 , uint16 , ( uint16 ) gConfigGeneral . fullscreen_width ) ;
set_format_arg ( 18 , uint16 , ( uint16 ) gConfigGeneral . fullscreen_height ) ;
2016-07-27 00:29:25 +02:00
set_format_arg ( 12 , rct_string_id , window_options_fullscreen_mode_names [ gConfigGeneral . fullscreen_mode ] ) ;
2014-08-16 16:29:15 +02:00
2015-02-19 23:49:17 +01:00
// disable resolution dropdown on "Fullscreen (desktop)"
if ( gConfigGeneral . fullscreen_mode = = 2 ) {
w - > disabled_widgets | = ( 1 < < WIDX_RESOLUTION_DROPDOWN ) ;
w - > disabled_widgets | = ( 1 < < WIDX_RESOLUTION ) ;
}
else {
w - > disabled_widgets & = ~ ( 1 < < WIDX_RESOLUTION_DROPDOWN ) ;
w - > disabled_widgets & = ~ ( 1 < < WIDX_RESOLUTION ) ;
}
2016-06-05 23:16:35 +02:00
if ( gConfigGeneral . drawing_engine = = DRAWING_ENGINE_SOFTWARE ) {
2016-02-01 00:40:02 +01:00
w - > disabled_widgets | = ( 1 < < WIDX_SCALE_QUALITY ) ;
w - > disabled_widgets | = ( 1 < < WIDX_SCALE_QUALITY_DROPDOWN ) ;
w - > disabled_widgets | = ( 1 < < WIDX_SCALE_USE_NN_AT_INTEGER_SCALES_CHECKBOX ) ;
w - > disabled_widgets | = ( 1 < < WIDX_STEAM_OVERLAY_PAUSE ) ;
} else {
w - > disabled_widgets & = ~ ( 1 < < WIDX_SCALE_QUALITY ) ;
w - > disabled_widgets & = ~ ( 1 < < WIDX_SCALE_QUALITY_DROPDOWN ) ;
w - > disabled_widgets & = ~ ( 1 < < WIDX_SCALE_USE_NN_AT_INTEGER_SCALES_CHECKBOX ) ;
w - > disabled_widgets & = ~ ( 1 < < WIDX_STEAM_OVERLAY_PAUSE ) ;
}
2015-07-04 21:00:32 +02:00
widget_set_checkbox_value ( w , WIDX_UNCAP_FPS_CHECKBOX , gConfigGeneral . uncap_fps ) ;
2015-12-09 22:42:46 +01:00
widget_set_checkbox_value ( w , WIDX_SHOW_FPS_CHECKBOX , gConfigGeneral . show_fps ) ;
2015-06-25 00:12:53 +02:00
widget_set_checkbox_value ( w , WIDX_MINIMIZE_FOCUS_LOSS , gConfigGeneral . minimize_fullscreen_focus_loss ) ;
2015-10-03 20:46:34 +02:00
widget_set_checkbox_value ( w , WIDX_STEAM_OVERLAY_PAUSE , gConfigGeneral . steam_overlay_pause ) ;
2016-01-31 17:58:09 +01:00
widget_set_checkbox_value ( w , WIDX_SCALE_USE_NN_AT_INTEGER_SCALES_CHECKBOX , gConfigGeneral . use_nn_at_integer_scales ) ;
2015-05-22 04:17:46 +02:00
2016-07-14 14:07:49 +02:00
window_options_display_widgets [ WIDX_SCALE_QUALITY ] . text = window_options_scale_quality_names [ gConfigGeneral . scale_quality ] ;
2015-06-04 20:51:54 +02:00
window_options_display_widgets [ WIDX_RESOLUTION ] . type = WWT_DROPDOWN ;
window_options_display_widgets [ WIDX_RESOLUTION_DROPDOWN ] . type = WWT_DROPDOWN_BUTTON ;
window_options_display_widgets [ WIDX_FULLSCREEN ] . type = WWT_DROPDOWN ;
window_options_display_widgets [ WIDX_FULLSCREEN_DROPDOWN ] . type = WWT_DROPDOWN_BUTTON ;
2016-06-05 23:16:35 +02:00
window_options_display_widgets [ WIDX_DRAWING_ENGINE ] . type = WWT_DROPDOWN ;
window_options_display_widgets [ WIDX_DRAWING_ENGINE_DROPDOWN ] . type = WWT_DROPDOWN_BUTTON ;
2015-07-04 21:00:32 +02:00
window_options_display_widgets [ WIDX_UNCAP_FPS_CHECKBOX ] . type = WWT_CHECKBOX ;
2015-12-09 22:42:46 +01:00
window_options_display_widgets [ WIDX_SHOW_FPS_CHECKBOX ] . type = WWT_CHECKBOX ;
2015-06-25 00:12:53 +02:00
window_options_display_widgets [ WIDX_MINIMIZE_FOCUS_LOSS ] . type = WWT_CHECKBOX ;
2015-10-03 20:46:34 +02:00
window_options_display_widgets [ WIDX_STEAM_OVERLAY_PAUSE ] . type = WWT_CHECKBOX ;
2016-01-31 19:26:28 +01:00
break ;
case WINDOW_OPTIONS_PAGE_RENDERING :
2016-05-03 23:36:29 +02:00
widget_set_checkbox_value ( w , WIDX_TILE_SMOOTHING_CHECKBOX , gConfigGeneral . landscape_smoothing ) ;
widget_set_checkbox_value ( w , WIDX_GRIDLINES_CHECKBOX , gConfigGeneral . always_show_gridlines ) ;
2016-01-31 19:26:28 +01:00
widget_set_checkbox_value ( w , WIDX_DAY_NIGHT_CHECKBOX , gConfigGeneral . day_night_cycle ) ;
widget_set_checkbox_value ( w , WIDX_UPPER_CASE_BANNERS_CHECKBOX , gConfigGeneral . upper_case_banners ) ;
2016-08-17 00:23:16 +02:00
widget_set_checkbox_value ( w , WIDX_RENDER_WEATHER_EFFECTS_CHECKBOX , gConfigGeneral . render_weather_effects | | gConfigGeneral . render_weather_gloom ) ;
2016-09-03 15:09:40 +02:00
widget_set_checkbox_value ( w , WIDX_DISABLE_LIGHTNING_EFFECT_CHECKBOX , gConfigGeneral . disable_lightning_effect ) ;
if ( ! gConfigGeneral . render_weather_effects & & ! gConfigGeneral . render_weather_gloom ) {
widget_set_checkbox_value ( w , WIDX_DISABLE_LIGHTNING_EFFECT_CHECKBOX , true ) ;
w - > enabled_widgets & = ~ ( 1 < < WIDX_DISABLE_LIGHTNING_EFFECT_CHECKBOX ) ;
w - > disabled_widgets | = ( 1 < < WIDX_DISABLE_LIGHTNING_EFFECT_CHECKBOX ) ;
}
else {
w - > enabled_widgets | = ( 1 < < WIDX_DISABLE_LIGHTNING_EFFECT_CHECKBOX ) ;
w - > disabled_widgets & = ~ ( 1 < < WIDX_DISABLE_LIGHTNING_EFFECT_CHECKBOX ) ;
}
2016-01-31 19:26:28 +01:00
// construction marker: white/translucent
2016-07-14 14:07:49 +02:00
static const rct_string_id construction_marker_colours [ ] = {
STR_CONSTRUCTION_MARKER_COLOUR_WHITE ,
STR_CONSTRUCTION_MARKER_COLOUR_TRANSLUCENT ,
} ;
window_options_rendering_widgets [ WIDX_CONSTRUCTION_MARKER ] . text = construction_marker_colours [ gConfigGeneral . construction_marker_colour ] ;
2016-01-31 19:26:28 +01:00
window_options_rendering_widgets [ WIDX_TILE_SMOOTHING_CHECKBOX ] . type = WWT_CHECKBOX ;
window_options_rendering_widgets [ WIDX_GRIDLINES_CHECKBOX ] . type = WWT_CHECKBOX ;
window_options_rendering_widgets [ WIDX_CONSTRUCTION_MARKER ] . type = WWT_DROPDOWN ;
window_options_rendering_widgets [ WIDX_CONSTRUCTION_MARKER_DROPDOWN ] . type = WWT_DROPDOWN_BUTTON ;
window_options_rendering_widgets [ WIDX_DAY_NIGHT_CHECKBOX ] . type = WWT_CHECKBOX ;
window_options_rendering_widgets [ WIDX_UPPER_CASE_BANNERS_CHECKBOX ] . type = WWT_CHECKBOX ;
2016-08-17 00:23:16 +02:00
window_options_rendering_widgets [ WIDX_RENDER_WEATHER_EFFECTS_CHECKBOX ] . type = WWT_CHECKBOX ;
2016-09-03 15:09:40 +02:00
window_options_rendering_widgets [ WIDX_DISABLE_LIGHTNING_EFFECT_CHECKBOX ] . type = WWT_CHECKBOX ;
2014-08-16 16:29:15 +02:00
break ;
2015-06-04 20:51:54 +02:00
2014-08-16 16:29:15 +02:00
case WINDOW_OPTIONS_PAGE_CULTURE :
// currency: pounds, dollars, etc. (10 total)
2016-07-27 00:29:25 +02:00
set_format_arg ( 12 , rct_string_id , CurrencyDescriptors [ gConfigGeneral . currency_format ] . stringId ) ;
2014-08-16 16:29:15 +02:00
2015-12-18 22:11:24 +01:00
// distance: metric / imperial / si
{
rct_string_id stringId ;
switch ( gConfigGeneral . measurement_format ) {
default :
case MEASUREMENT_FORMAT_IMPERIAL : stringId = STR_IMPERIAL ; break ;
case MEASUREMENT_FORMAT_METRIC : stringId = STR_METRIC ; break ;
case MEASUREMENT_FORMAT_SI : stringId = STR_SI ; break ;
}
2016-07-27 00:29:25 +02:00
set_format_arg ( 14 , rct_string_id , stringId ) ;
2015-12-18 22:11:24 +01:00
}
2014-08-16 16:29:15 +02:00
// temperature: celsius/fahrenheit
2016-07-14 14:07:49 +02:00
set_format_arg ( 20 , rct_string_id , ( gConfigGeneral . temperature_format = = TEMPERATURE_FORMAT_F ) ? STR_FAHRENHEIT : STR_CELSIUS ) ;
2014-08-16 16:29:15 +02:00
// height: units/real values
2016-07-14 14:07:49 +02:00
set_format_arg ( 6 , rct_string_id , gConfigGeneral . show_height_as_units ? STR_UNITS : STR_REAL_VALUES ) ;
2014-08-16 16:29:15 +02:00
2015-06-04 20:51:54 +02:00
window_options_culture_widgets [ WIDX_LANGUAGE ] . type = WWT_DROPDOWN ;
window_options_culture_widgets [ WIDX_LANGUAGE_DROPDOWN ] . type = WWT_DROPDOWN_BUTTON ;
window_options_culture_widgets [ WIDX_CURRENCY ] . type = WWT_DROPDOWN ;
window_options_culture_widgets [ WIDX_CURRENCY_DROPDOWN ] . type = WWT_DROPDOWN_BUTTON ;
window_options_culture_widgets [ WIDX_DISTANCE ] . type = WWT_DROPDOWN ;
window_options_culture_widgets [ WIDX_DISTANCE_DROPDOWN ] . type = WWT_DROPDOWN_BUTTON ;
window_options_culture_widgets [ WIDX_TEMPERATURE ] . type = WWT_DROPDOWN ;
window_options_culture_widgets [ WIDX_TEMPERATURE_DROPDOWN ] . type = WWT_DROPDOWN_BUTTON ;
window_options_culture_widgets [ WIDX_HEIGHT_LABELS ] . type = WWT_DROPDOWN ;
window_options_culture_widgets [ WIDX_HEIGHT_LABELS_DROPDOWN ] . type = WWT_DROPDOWN_BUTTON ;
window_options_culture_widgets [ WIDX_DATE_FORMAT ] . type = WWT_DROPDOWN ;
window_options_culture_widgets [ WIDX_DATE_FORMAT_DROPDOWN ] . type = WWT_DROPDOWN_BUTTON ;
2014-08-16 16:29:15 +02:00
break ;
2015-06-04 20:51:54 +02:00
2014-08-16 16:29:15 +02:00
case WINDOW_OPTIONS_PAGE_AUDIO :
// music: on/off
2016-07-14 14:07:49 +02:00
set_format_arg ( 8 , rct_string_id , gConfigSound . ride_music_enabled ? STR_OPTIONS_RIDE_MUSIC_ON : STR_OPTIONS_RIDE_MUSIC_OFF ) ;
2014-08-16 16:29:15 +02:00
2016-02-24 23:42:50 +01:00
widget_set_checkbox_value ( w , WIDX_SOUND_CHECKBOX , gConfigSound . sound_enabled ) ;
widget_set_checkbox_value ( w , WIDX_MUSIC_CHECKBOX , gConfigSound . ride_music_enabled ) ;
2015-08-11 13:06:00 +02:00
widget_set_checkbox_value ( w , WIDX_AUDIO_FOCUS_CHECKBOX , gConfigSound . audio_focus ) ;
2014-08-16 16:29:15 +02:00
2015-06-04 22:29:21 +02:00
if ( w - > frame_no = = 0 ) { // initialize only on first frame, otherwise the scrollbars wont be able to be modified
2016-02-24 23:42:50 +01:00
widget = & window_options_audio_widgets [ WIDX_SOUND_VOLUME ] ;
w - > scrolls [ 0 ] . h_left = ( sint16 ) ceil ( ( gConfigSound . sound_volume / 100.0f ) * ( w - > scrolls [ 0 ] . h_right - ( ( widget - > right - widget - > left ) - 1 ) ) ) ;
2015-06-04 22:29:21 +02:00
widget = & window_options_audio_widgets [ WIDX_MUSIC_VOLUME ] ;
2016-02-24 23:42:50 +01:00
w - > scrolls [ 1 ] . h_left = ( sint16 ) ceil ( ( gConfigSound . ride_music_volume / 100.0f ) * ( w - > scrolls [ 1 ] . h_right - ( ( widget - > right - widget - > left ) - 1 ) ) ) ;
2015-06-04 22:29:21 +02:00
}
2016-02-24 23:42:50 +01:00
widget_scroll_update_thumbs ( w , WIDX_SOUND_VOLUME ) ;
2015-06-04 22:29:21 +02:00
widget_scroll_update_thumbs ( w , WIDX_MUSIC_VOLUME ) ;
2015-06-04 20:51:54 +02:00
window_options_audio_widgets [ WIDX_SOUND ] . type = WWT_DROPDOWN ;
window_options_audio_widgets [ WIDX_SOUND_DROPDOWN ] . type = WWT_DROPDOWN_BUTTON ;
window_options_audio_widgets [ WIDX_SOUND_CHECKBOX ] . type = WWT_CHECKBOX ;
window_options_audio_widgets [ WIDX_MUSIC_CHECKBOX ] . type = WWT_CHECKBOX ;
2015-08-11 13:06:00 +02:00
window_options_audio_widgets [ WIDX_AUDIO_FOCUS_CHECKBOX ] . type = WWT_CHECKBOX ;
2015-06-04 20:51:54 +02:00
window_options_audio_widgets [ WIDX_TITLE_MUSIC ] . type = WWT_DROPDOWN ;
window_options_audio_widgets [ WIDX_TITLE_MUSIC_DROPDOWN ] . type = WWT_DROPDOWN_BUTTON ;
2016-02-24 23:42:50 +01:00
window_options_audio_widgets [ WIDX_SOUND_VOLUME ] . type = WWT_SCROLL ;
2015-06-04 22:29:21 +02:00
window_options_audio_widgets [ WIDX_MUSIC_VOLUME ] . type = WWT_SCROLL ;
2014-08-16 16:29:15 +02:00
break ;
2015-06-04 20:51:54 +02:00
2015-07-26 14:37:27 +02:00
case WINDOW_OPTIONS_PAGE_CONTROLS_AND_INTERFACE :
2015-03-07 17:38:17 +01:00
widget_set_checkbox_value ( w , WIDX_SCREEN_EDGE_SCROLLING , gConfigGeneral . edge_scrolling ) ;
2015-10-02 16:13:36 +02:00
widget_set_checkbox_value ( w , WIDX_TRAP_CURSOR , gConfigGeneral . trap_cursor ) ;
2015-06-20 17:52:38 +02:00
widget_set_checkbox_value ( w , WIDX_INVERT_DRAG , gConfigGeneral . invert_viewport_drag ) ;
2016-07-21 21:00:29 +02:00
widget_set_checkbox_value ( w , WIDX_ZOOM_TO_CURSOR , gConfigGeneral . zoom_to_cursor ) ;
2015-03-07 17:38:17 +01:00
widget_set_checkbox_value ( w , WIDX_TOOLBAR_SHOW_FINANCES , gConfigInterface . toolbar_show_finances ) ;
widget_set_checkbox_value ( w , WIDX_TOOLBAR_SHOW_RESEARCH , gConfigInterface . toolbar_show_research ) ;
2015-05-19 00:15:43 +02:00
widget_set_checkbox_value ( w , WIDX_TOOLBAR_SHOW_CHEATS , gConfigInterface . toolbar_show_cheats ) ;
2015-07-22 19:13:35 +02:00
widget_set_checkbox_value ( w , WIDX_TOOLBAR_SHOW_NEWS , gConfigInterface . toolbar_show_news ) ;
2015-07-26 14:37:27 +02:00
widget_set_checkbox_value ( w , WIDX_SELECT_BY_TRACK_TYPE , gConfigInterface . select_by_track_type ) ;
2015-12-28 12:39:17 +01:00
widget_set_checkbox_value ( w , WIDX_SCENARIO_UNLOCKING , gConfigGeneral . scenario_unlocking_enabled ) ;
2014-08-16 16:29:15 +02:00
2016-01-01 14:46:23 +01:00
if ( gConfigGeneral . scenario_select_mode = = SCENARIO_SELECT_MODE_ORIGIN ) {
w - > disabled_widgets & = ~ ( 1ULL < < WIDX_SCENARIO_UNLOCKING ) ;
} else {
w - > disabled_widgets | = ( 1ULL < < WIDX_SCENARIO_UNLOCKING ) ;
}
2015-07-26 14:37:27 +02:00
window_options_controls_and_interface_widgets [ WIDX_THEMES ] . type = WWT_DROPDOWN ;
window_options_controls_and_interface_widgets [ WIDX_THEMES_DROPDOWN ] . type = WWT_DROPDOWN_BUTTON ;
window_options_controls_and_interface_widgets [ WIDX_THEMES_BUTTON ] . type = WWT_DROPDOWN_BUTTON ;
window_options_controls_and_interface_widgets [ WIDX_SCREEN_EDGE_SCROLLING ] . type = WWT_CHECKBOX ;
2015-10-02 16:13:36 +02:00
window_options_controls_and_interface_widgets [ WIDX_TRAP_CURSOR ] . type = WWT_CHECKBOX ;
2015-07-26 14:37:27 +02:00
window_options_controls_and_interface_widgets [ WIDX_HOTKEY_DROPDOWN ] . type = WWT_DROPDOWN_BUTTON ;
window_options_controls_and_interface_widgets [ WIDX_TOOLBAR_SHOW_FINANCES ] . type = WWT_CHECKBOX ;
window_options_controls_and_interface_widgets [ WIDX_TOOLBAR_SHOW_RESEARCH ] . type = WWT_CHECKBOX ;
window_options_controls_and_interface_widgets [ WIDX_TOOLBAR_SHOW_CHEATS ] . type = WWT_CHECKBOX ;
window_options_controls_and_interface_widgets [ WIDX_TOOLBAR_SHOW_NEWS ] . type = WWT_CHECKBOX ;
window_options_controls_and_interface_widgets [ WIDX_SELECT_BY_TRACK_TYPE ] . type = WWT_CHECKBOX ;
2015-12-28 12:39:17 +01:00
window_options_controls_and_interface_widgets [ WIDX_SCENARIO_GROUPING ] . type = WWT_DROPDOWN ;
window_options_controls_and_interface_widgets [ WIDX_SCENARIO_UNLOCKING ] . type = WWT_CHECKBOX ;
2014-08-16 16:29:15 +02:00
break ;
2015-06-04 20:51:54 +02:00
case WINDOW_OPTIONS_PAGE_MISC :
2014-08-16 16:29:15 +02:00
// unknown park flag can disable real name checkbox
2016-04-23 01:51:22 +02:00
if ( gParkFlags & PARK_FLAGS_LOCK_REAL_NAMES_OPTION )
2014-08-16 16:29:15 +02:00
w - > disabled_widgets | = ( 1ULL < < WIDX_REAL_NAME_CHECKBOX ) ;
2016-05-30 19:13:54 +02:00
w - > hold_down_widgets | = ( 1 < < WIDX_WINDOW_LIMIT_UP ) | ( 1 < < WIDX_WINDOW_LIMIT_DOWN ) ;
2016-11-13 20:17:49 +01:00
2014-08-16 16:29:15 +02:00
// save plugin data checkbox: visible or not
2016-07-02 21:42:10 +02:00
window_options_misc_widgets [ WIDX_SAVE_PLUGIN_DATA_CHECKBOX ] . type = WWT_CHECKBOX ;
2014-08-16 16:29:15 +02:00
2016-04-23 01:51:22 +02:00
widget_set_checkbox_value ( w , WIDX_REAL_NAME_CHECKBOX , gParkFlags & PARK_FLAGS_SHOW_REAL_GUEST_NAMES ) ;
2015-06-04 20:51:54 +02:00
widget_set_checkbox_value ( w , WIDX_SAVE_PLUGIN_DATA_CHECKBOX , gConfigGeneral . save_plugin_data ) ;
2015-05-22 20:18:48 +02:00
widget_set_checkbox_value ( w , WIDX_TEST_UNFINISHED_TRACKS , gConfigGeneral . test_unfinished_tracks ) ;
2015-06-11 22:34:38 +02:00
widget_set_checkbox_value ( w , WIDX_AUTO_STAFF_PLACEMENT , gConfigGeneral . auto_staff_placement ) ;
2015-08-17 01:26:42 +02:00
widget_set_checkbox_value ( w , WIDX_HANDYMEN_MOW_DEFAULT , gConfigGeneral . handymen_mow_default ) ;
2015-06-11 22:34:38 +02:00
widget_set_checkbox_value ( w , WIDX_DEBUGGING_TOOLS , gConfigGeneral . debugging_tools ) ;
2015-08-18 11:58:47 +02:00
widget_set_checkbox_value ( w , WIDX_ALLOW_LOADING_WITH_INCORRECT_CHECKSUM , gConfigGeneral . allow_loading_with_incorrect_checksum ) ;
2015-10-16 23:45:17 +02:00
widget_set_checkbox_value ( w , WIDX_STAY_CONNECTED_AFTER_DESYNC , gConfigNetwork . stay_connected ) ;
2015-12-24 09:00:41 +01:00
widget_set_checkbox_value ( w , WIDX_AUTO_OPEN_SHOPS , gConfigGeneral . auto_open_shops ) ;
2015-05-19 00:15:43 +02:00
2015-06-04 20:51:54 +02:00
window_options_misc_widgets [ WIDX_REAL_NAME_CHECKBOX ] . type = WWT_CHECKBOX ;
window_options_misc_widgets [ WIDX_SAVE_PLUGIN_DATA_CHECKBOX ] . type = WWT_CHECKBOX ;
window_options_misc_widgets [ WIDX_AUTOSAVE ] . type = WWT_DROPDOWN ;
window_options_misc_widgets [ WIDX_AUTOSAVE_DROPDOWN ] . type = WWT_DROPDOWN_BUTTON ;
window_options_misc_widgets [ WIDX_TEST_UNFINISHED_TRACKS ] . type = WWT_CHECKBOX ;
2015-06-11 22:34:38 +02:00
window_options_misc_widgets [ WIDX_AUTO_STAFF_PLACEMENT ] . type = WWT_CHECKBOX ;
2015-08-17 01:26:42 +02:00
window_options_misc_widgets [ WIDX_HANDYMEN_MOW_DEFAULT ] . type = WWT_CHECKBOX ;
2015-06-11 22:34:38 +02:00
window_options_misc_widgets [ WIDX_DEBUGGING_TOOLS ] . type = WWT_CHECKBOX ;
2015-06-14 22:01:48 +02:00
window_options_misc_widgets [ WIDX_TITLE_SEQUENCE ] . type = WWT_DROPDOWN ;
window_options_misc_widgets [ WIDX_TITLE_SEQUENCE_DROPDOWN ] . type = WWT_DROPDOWN_BUTTON ;
2015-06-24 18:22:12 +02:00
window_options_misc_widgets [ WIDX_TITLE_SEQUENCE_BUTTON ] . type = WWT_DROPDOWN_BUTTON ;
2015-08-18 11:58:47 +02:00
window_options_misc_widgets [ WIDX_ALLOW_LOADING_WITH_INCORRECT_CHECKSUM ] . type = WWT_CHECKBOX ;
2015-10-16 23:45:17 +02:00
window_options_misc_widgets [ WIDX_STAY_CONNECTED_AFTER_DESYNC ] . type = WWT_CHECKBOX ;
2015-12-24 09:00:41 +01:00
window_options_misc_widgets [ WIDX_AUTO_OPEN_SHOPS ] . type = WWT_CHECKBOX ;
2016-03-02 20:27:54 +01:00
window_options_misc_widgets [ WIDX_DEFAULT_INSPECTION_INTERVAL ] . type = WWT_DROPDOWN ;
window_options_misc_widgets [ WIDX_DEFAULT_INSPECTION_INTERVAL_DROPDOWN ] . type = WWT_DROPDOWN_BUTTON ;
2016-05-30 19:13:54 +02:00
window_options_misc_widgets [ WIDX_WINDOW_LIMIT ] . type = WWT_SPINNER ;
window_options_misc_widgets [ WIDX_WINDOW_LIMIT_UP ] . type = WWT_DROPDOWN_BUTTON ;
window_options_misc_widgets [ WIDX_WINDOW_LIMIT_DOWN ] . type = WWT_DROPDOWN_BUTTON ;
2015-05-25 21:38:33 +02:00
break ;
2015-06-04 20:51:54 +02:00
2015-05-25 21:38:33 +02:00
case WINDOW_OPTIONS_PAGE_TWITCH :
widget_set_checkbox_value ( w , WIDX_FOLLOWER_PEEP_NAMES_CHECKBOX , gConfigTwitch . enable_follower_peep_names ) ;
widget_set_checkbox_value ( w , WIDX_FOLLOWER_PEEP_TRACKING_CHECKBOX , gConfigTwitch . enable_follower_peep_tracking ) ;
widget_set_checkbox_value ( w , WIDX_CHAT_PEEP_NAMES_CHECKBOX , gConfigTwitch . enable_chat_peep_names ) ;
widget_set_checkbox_value ( w , WIDX_CHAT_PEEP_TRACKING_CHECKBOX , gConfigTwitch . enable_chat_peep_tracking ) ;
widget_set_checkbox_value ( w , WIDX_NEWS_CHECKBOX , gConfigTwitch . enable_news ) ;
2015-06-04 20:51:54 +02:00
window_options_twitch_widgets [ WIDX_CHANNEL_BUTTON ] . type = WWT_DROPDOWN_BUTTON ;
window_options_twitch_widgets [ WIDX_FOLLOWER_PEEP_NAMES_CHECKBOX ] . type = WWT_CHECKBOX ;
window_options_twitch_widgets [ WIDX_FOLLOWER_PEEP_TRACKING_CHECKBOX ] . type = WWT_CHECKBOX ;
window_options_twitch_widgets [ WIDX_CHAT_PEEP_NAMES_CHECKBOX ] . type = WWT_CHECKBOX ;
window_options_twitch_widgets [ WIDX_CHAT_PEEP_TRACKING_CHECKBOX ] . type = WWT_CHECKBOX ;
window_options_twitch_widgets [ WIDX_NEWS_CHECKBOX ] . type = WWT_CHECKBOX ;
2014-08-16 16:29:15 +02:00
break ;
}
2016-01-01 14:46:23 +01:00
// Automatically adjust window height to fit widgets
2017-01-04 22:17:08 +01:00
sint32 y = 0 ;
2016-01-01 14:46:23 +01:00
for ( widget = & w - > widgets [ WIDX_PAGE_START ] ; widget - > type ! = WWT_LAST ; widget + + ) {
y = max ( y , widget - > bottom ) ;
}
w - > height = y + 6 ;
w - > widgets [ WIDX_BACKGROUND ] . bottom = w - > height - 1 ;
w - > widgets [ WIDX_PAGE_BACKGROUND ] . bottom = w - > height - 1 ;
2014-08-16 16:29:15 +02:00
}
static void window_options_update ( rct_window * w )
{
// Tab animation
w - > frame_no + + ;
2014-10-16 03:02:43 +02:00
widget_invalidate ( w , WIDX_TAB_1 + w - > page ) ;
2015-06-04 22:29:21 +02:00
if ( w - > page = = WINDOW_OPTIONS_PAGE_AUDIO ) {
2016-11-30 23:32:47 +01:00
rct_widget * widget = & window_options_audio_widgets [ WIDX_SOUND_VOLUME ] ;
2016-02-24 23:42:50 +01:00
uint8 sound_volume = ( uint8 ) ( ( ( float ) w - > scrolls [ 0 ] . h_left / ( w - > scrolls [ 0 ] . h_right - ( ( widget - > right - widget - > left ) - 1 ) ) ) * 100 ) ;
2015-06-04 22:29:21 +02:00
widget = & window_options_audio_widgets [ WIDX_MUSIC_VOLUME ] ;
2016-02-24 23:42:50 +01:00
uint8 ride_music_volume = ( uint8 ) ( ( ( float ) w - > scrolls [ 1 ] . h_left / ( w - > scrolls [ 1 ] . h_right - ( ( widget - > right - widget - > left ) - 1 ) ) ) * 100 ) ;
if ( sound_volume ! = gConfigSound . sound_volume ) {
gConfigSound . sound_volume = sound_volume ;
2015-06-04 22:29:21 +02:00
config_save_default ( ) ;
}
2016-02-24 23:42:50 +01:00
if ( ride_music_volume ! = gConfigSound . ride_music_volume ) {
gConfigSound . ride_music_volume = ride_music_volume ;
2015-06-04 22:29:21 +02:00
config_save_default ( ) ;
}
2016-02-24 23:42:50 +01:00
widget_invalidate ( w , WIDX_SOUND_VOLUME ) ;
2015-06-04 22:29:21 +02:00
widget_invalidate ( w , WIDX_MUSIC_VOLUME ) ;
}
2014-05-11 09:01:01 +02:00
}
/**
*
* rct2 : 0x006BAEB4
*/
2015-07-10 02:39:16 +02:00
static void window_options_paint ( rct_window * w , rct_drawpixelinfo * dpi )
2014-05-11 09:01:01 +02:00
{
window_draw_widgets ( w , dpi ) ;
2014-08-16 16:29:15 +02:00
window_options_draw_tab_images ( dpi , w ) ;
2014-05-11 09:01:01 +02:00
2014-08-16 16:29:15 +02:00
switch ( w - > page ) {
case WINDOW_OPTIONS_PAGE_DISPLAY :
2015-06-04 20:51:54 +02:00
gfx_draw_string_left ( dpi , STR_FULLSCREEN_MODE , w , w - > colours [ 1 ] , w - > x + 10 , w - > y + window_options_display_widgets [ WIDX_FULLSCREEN ] . top + 1 ) ;
2016-02-01 00:40:02 +01:00
2017-01-04 22:17:08 +01:00
sint32 colour = w - > colours [ 1 ] ;
2016-02-01 00:40:02 +01:00
// disable resolution dropdown on "Fullscreen (desktop)"
if ( gConfigGeneral . fullscreen_mode = = 2 ) {
2016-11-13 23:29:03 +01:00
colour | = COLOUR_FLAG_INSET ;
2016-02-01 00:40:02 +01:00
}
gfx_draw_string_left ( dpi , STR_DISPLAY_RESOLUTION , w , colour , w - > x + 10 + 15 , w - > y + window_options_display_widgets [ WIDX_RESOLUTION ] . top + 1 ) ;
2015-11-12 00:42:42 +01:00
gfx_draw_string_left ( dpi , STR_UI_SCALING_DESC , w , w - > colours [ 1 ] , w - > x + 10 , w - > y + window_options_display_widgets [ WIDX_SCALE ] . top + 1 ) ;
2016-06-05 23:16:35 +02:00
gfx_draw_string_left ( dpi , STR_DRAWING_ENGINE , w , w - > colours [ 1 ] , w - > x + 10 , w - > y + window_options_display_widgets [ WIDX_DRAWING_ENGINE ] . top + 1 ) ;
gCurrentFontSpriteBase = FONT_SPRITE_BASE_MEDIUM ;
gfx_draw_string_left_clipped (
dpi ,
DrawingEngineStringIds [ gConfigGeneral . drawing_engine ] ,
NULL ,
w - > colours [ 1 ] ,
w - > x + window_options_culture_widgets [ WIDX_DRAWING_ENGINE ] . left + 1 ,
w - > y + window_options_culture_widgets [ WIDX_DRAWING_ENGINE ] . top ,
window_options_culture_widgets [ WIDX_DRAWING_ENGINE ] . right - window_options_culture_widgets [ WIDX_DRAWING_ENGINE ] . left - 11
) ;
2017-01-04 22:17:08 +01:00
sint32 scale = ( sint32 ) ( gConfigGeneral . window_scale * 100 ) ;
2016-07-14 14:07:49 +02:00
gfx_draw_string_left ( dpi , STR_WINDOW_OBJECTIVE_VALUE_RATING , & scale , w - > colours [ 1 ] , w - > x + w - > widgets [ WIDX_SCALE ] . left + 1 , w - > y + w - > widgets [ WIDX_SCALE ] . top + 1 ) ;
2016-02-01 00:40:02 +01:00
colour = w - > colours [ 1 ] ;
2016-06-05 23:16:35 +02:00
if ( gConfigGeneral . drawing_engine = = DRAWING_ENGINE_SOFTWARE ) {
2016-02-01 00:40:02 +01:00
colour | = 0x40 ;
}
gfx_draw_string_left ( dpi , STR_SCALING_QUALITY , w , colour , w - > x + 25 , w - > y + window_options_display_widgets [ WIDX_SCALE_QUALITY ] . top + 1 ) ;
2014-08-16 16:29:15 +02:00
break ;
2016-01-31 19:26:28 +01:00
case WINDOW_OPTIONS_PAGE_RENDERING :
gfx_draw_string_left ( dpi , STR_CONSTRUCTION_MARKER , w , w - > colours [ 1 ] , w - > x + 10 , w - > y + window_options_rendering_widgets [ WIDX_CONSTRUCTION_MARKER ] . top + 1 ) ;
break ;
2014-08-16 16:29:15 +02:00
case WINDOW_OPTIONS_PAGE_CULTURE :
2016-07-14 14:07:49 +02:00
gfx_draw_string_left ( dpi , STR_OPTIONS_LANGUAGE , w , w - > colours [ 1 ] , w - > x + 10 , w - > y + window_options_culture_widgets [ WIDX_LANGUAGE ] . top + 1 ) ;
2015-06-17 17:21:50 +02:00
2016-04-26 00:00:58 +02:00
gCurrentFontSpriteBase = FONT_SPRITE_BASE_MEDIUM ;
2014-08-16 16:29:15 +02:00
gfx_draw_string (
dpi ,
2015-07-26 18:50:01 +02:00
( char * ) LanguagesDescriptors [ gCurrentLanguage ] . native_name ,
2015-06-04 20:51:54 +02:00
w - > colours [ 1 ] ,
w - > x + window_options_culture_widgets [ WIDX_LANGUAGE ] . left + 1 ,
w - > y + window_options_culture_widgets [ WIDX_LANGUAGE ] . top
2014-08-16 16:29:15 +02:00
) ;
2015-06-04 20:51:54 +02:00
gfx_draw_string_left ( dpi , STR_CURRENCY , w , w - > colours [ 1 ] , w - > x + 10 , w - > y + window_options_culture_widgets [ WIDX_CURRENCY ] . top + 1 ) ;
gfx_draw_string_left ( dpi , STR_DISTANCE_AND_SPEED , w , w - > colours [ 1 ] , w - > x + 10 , w - > y + window_options_culture_widgets [ WIDX_DISTANCE ] . top + 1 ) ;
gfx_draw_string_left ( dpi , STR_TEMPERATURE , w , w - > colours [ 1 ] , w - > x + 10 , w - > y + window_options_culture_widgets [ WIDX_TEMPERATURE ] . top + 1 ) ;
gfx_draw_string_left ( dpi , STR_HEIGHT_LABELS , w , w - > colours [ 1 ] , w - > x + 10 , w - > y + window_options_culture_widgets [ WIDX_HEIGHT_LABELS ] . top + 1 ) ;
2015-11-12 00:42:42 +01:00
gfx_draw_string_left ( dpi , STR_DATE_FORMAT , w , w - > colours [ 1 ] , w - > x + 10 , w - > y + window_options_culture_widgets [ WIDX_DATE_FORMAT ] . top + 1 ) ;
2015-05-24 18:38:07 +02:00
gfx_draw_string_left (
dpi ,
2015-09-26 15:35:26 +02:00
DateFormatStringIds [ gConfigGeneral . date_format ] ,
2015-05-24 18:38:07 +02:00
NULL ,
2015-06-04 20:51:54 +02:00
w - > colours [ 1 ] ,
w - > x + window_options_culture_widgets [ WIDX_DATE_FORMAT ] . left + 1 ,
w - > y + window_options_culture_widgets [ WIDX_DATE_FORMAT ] . top
2015-09-26 15:35:26 +02:00
) ;
2014-08-16 16:29:15 +02:00
break ;
case WINDOW_OPTIONS_PAGE_AUDIO :
2016-09-05 01:05:48 +02:00
{
// Sound device
rct_string_id audioDeviceStringId = STR_OPTIONS_SOUND_VALUE_DEFAULT ;
const char * audioDeviceName = NULL ;
if ( gAudioCurrentDevice = = - 1 ) {
audioDeviceStringId = STR_SOUND_NONE ;
} else {
audioDeviceStringId = STR_STRING ;
# ifndef __LINUX__
if ( gAudioCurrentDevice = = 0 ) {
audioDeviceStringId = STR_OPTIONS_SOUND_VALUE_DEFAULT ;
}
# endif // __LINUX__
if ( audioDeviceStringId = = STR_STRING ) {
audioDeviceName = gAudioDevices [ gAudioCurrentDevice ] . name ;
}
}
gfx_draw_string_left_clipped (
dpi ,
audioDeviceStringId ,
( void * ) & audioDeviceName ,
w - > colours [ 1 ] ,
w - > x + window_options_audio_widgets [ WIDX_SOUND ] . left + 1 ,
w - > y + window_options_audio_widgets [ WIDX_SOUND ] . top ,
window_options_audio_widgets [ WIDX_SOUND_DROPDOWN ] . left - window_options_audio_widgets [ WIDX_SOUND ] . left - 4
) ;
2016-07-14 14:07:49 +02:00
gfx_draw_string_left ( dpi , STR_OPTIONS_MUSIC_LABEL , w , w - > colours [ 1 ] , w - > x + 10 , w - > y + window_options_audio_widgets [ WIDX_TITLE_MUSIC ] . top + 1 ) ;
2015-02-06 23:35:08 +01:00
gfx_draw_string_left (
dpi ,
2016-07-14 14:07:49 +02:00
window_options_title_music_names [ gConfigSound . title_music ] ,
2015-02-06 23:35:08 +01:00
NULL ,
2015-06-04 20:51:54 +02:00
w - > colours [ 1 ] ,
w - > x + window_options_audio_widgets [ WIDX_TITLE_MUSIC ] . left + 1 ,
w - > y + window_options_audio_widgets [ WIDX_TITLE_MUSIC ] . top
2015-02-06 23:35:08 +01:00
) ;
2014-08-16 16:29:15 +02:00
break ;
2016-09-05 01:05:48 +02:00
}
2015-07-26 14:37:27 +02:00
case WINDOW_OPTIONS_PAGE_CONTROLS_AND_INTERFACE :
gfx_draw_string_left ( dpi , STR_SHOW_TOOLBAR_BUTTONS_FOR , w , w - > colours [ 1 ] , w - > x + 10 , w - > y + window_options_controls_and_interface_widgets [ WIDX_TOOLBAR_BUTTONS_GROUP ] . top + 15 ) ;
2016-01-29 20:39:31 +01:00
2016-08-28 00:32:15 +02:00
size_t activeAvailableThemeIndex = theme_manager_get_active_available_theme_index ( ) ;
2016-01-29 20:39:31 +01:00
const utf8 * activeThemeName = theme_manager_get_available_theme_name ( activeAvailableThemeIndex ) ;
2016-08-03 20:53:25 +02:00
set_format_arg ( 0 , uintptr_t , ( uintptr_t ) activeThemeName ) ;
2016-01-29 20:39:31 +01:00
2016-07-14 14:07:49 +02:00
gfx_draw_string_left ( dpi , STR_THEMES_LABEL_CURRENT_THEME , NULL , w - > colours [ 1 ] , w - > x + 10 , w - > y + window_options_controls_and_interface_widgets [ WIDX_THEMES ] . top + 1 ) ;
2015-07-26 14:37:27 +02:00
gfx_draw_string_left_clipped (
dpi ,
2016-07-14 14:07:49 +02:00
STR_STRING ,
2016-05-15 23:03:53 +02:00
gCommonFormatArgs ,
2015-07-26 14:37:27 +02:00
w - > colours [ 1 ] ,
w - > x + window_options_controls_and_interface_widgets [ WIDX_THEMES ] . left + 1 ,
w - > y + window_options_controls_and_interface_widgets [ WIDX_THEMES ] . top ,
window_options_controls_and_interface_widgets [ WIDX_THEMES_DROPDOWN ] . left - window_options_controls_and_interface_widgets [ WIDX_THEMES ] . left - 4
2015-12-30 23:30:54 +01:00
) ;
gfx_draw_string_left ( dpi , STR_OPTIONS_SCENARIO_GROUPING , NULL , w - > colours [ 1 ] , w - > x + 10 , w - > y + window_options_controls_and_interface_widgets [ WIDX_SCENARIO_GROUPING ] . top + 1 ) ;
gfx_draw_string_left_clipped (
dpi ,
2015-12-31 03:59:08 +01:00
gConfigGeneral . scenario_select_mode = = SCENARIO_SELECT_MODE_DIFFICULTY ?
STR_OPTIONS_SCENARIO_DIFFICULTY :
STR_OPTIONS_SCENARIO_ORIGIN ,
2015-12-30 23:30:54 +01:00
NULL ,
w - > colours [ 1 ] ,
w - > x + window_options_controls_and_interface_widgets [ WIDX_SCENARIO_GROUPING ] . left + 1 ,
w - > y + window_options_controls_and_interface_widgets [ WIDX_SCENARIO_GROUPING ] . top ,
window_options_controls_and_interface_widgets [ WIDX_SCENARIO_GROUPING_DROPDOWN ] . left - window_options_controls_and_interface_widgets [ WIDX_SCENARIO_GROUPING ] . left - 4
) ;
2015-07-26 14:37:27 +02:00
break ;
2015-02-21 12:05:15 +01:00
case WINDOW_OPTIONS_PAGE_MISC :
2016-07-14 14:07:49 +02:00
gfx_draw_string_left ( dpi , STR_OPTIONS_AUTOSAVE_FREQUENCY_LABEL , w , w - > colours [ 1 ] , w - > x + 10 , w - > y + window_options_misc_widgets [ WIDX_AUTOSAVE ] . top + 1 ) ;
2015-02-21 12:05:15 +01:00
gfx_draw_string_left (
dpi ,
2016-07-14 14:07:49 +02:00
window_options_autosave_names [ gConfigGeneral . autosave_frequency ] ,
2015-02-21 12:05:15 +01:00
NULL ,
2015-06-04 20:51:54 +02:00
w - > colours [ 1 ] ,
w - > x + window_options_misc_widgets [ WIDX_AUTOSAVE ] . left + 1 ,
w - > y + window_options_misc_widgets [ WIDX_AUTOSAVE ] . top
2015-02-21 12:05:15 +01:00
) ;
2015-10-20 20:16:30 +02:00
2016-12-07 03:53:58 +01:00
const utf8 * name = title_sequence_manager_get_name ( gTitleCurrentSequence ) ;
2016-11-12 18:12:11 +01:00
set_format_arg ( 0 , uintptr_t , ( uintptr_t ) name ) ;
2015-06-14 22:01:48 +02:00
gfx_draw_string_left ( dpi , STR_TITLE_SEQUENCE , w , w - > colours [ 1 ] , w - > x + 10 , w - > y + window_options_misc_widgets [ WIDX_TITLE_SEQUENCE ] . top + 1 ) ;
2015-06-24 18:22:12 +02:00
gfx_draw_string_left_clipped (
2015-06-14 22:01:48 +02:00
dpi ,
2016-07-14 14:07:49 +02:00
STR_STRING ,
2016-05-15 23:03:53 +02:00
gCommonFormatArgs ,
2015-06-14 22:01:48 +02:00
w - > colours [ 1 ] ,
w - > x + window_options_misc_widgets [ WIDX_TITLE_SEQUENCE ] . left + 1 ,
2015-06-24 18:22:12 +02:00
w - > y + window_options_misc_widgets [ WIDX_TITLE_SEQUENCE ] . top ,
window_options_misc_widgets [ WIDX_TITLE_SEQUENCE_DROPDOWN ] . left - window_options_misc_widgets [ WIDX_TITLE_SEQUENCE ] . left - 4
2015-06-14 22:01:48 +02:00
) ;
2016-03-02 20:27:54 +01:00
gfx_draw_string_left ( dpi , STR_DEFAULT_INSPECTION_INTERVAL , w , w - > colours [ 1 ] , w - > x + 10 , w - > y + window_options_misc_widgets [ WIDX_DEFAULT_INSPECTION_INTERVAL ] . top + 1 ) ;
gfx_draw_string_left (
dpi ,
2016-07-14 14:07:49 +02:00
RideInspectionIntervalNames [ gConfigGeneral . default_inspection_interval ] ,
2016-03-02 20:27:54 +01:00
NULL ,
w - > colours [ 1 ] ,
w - > x + window_options_misc_widgets [ WIDX_DEFAULT_INSPECTION_INTERVAL ] . left + 1 ,
w - > y + window_options_misc_widgets [ WIDX_DEFAULT_INSPECTION_INTERVAL ] . top
) ;
2016-05-30 19:13:54 +02:00
gfx_draw_string_left ( dpi , STR_WINDOW_LIMIT , w , w - > colours [ 1 ] , w - > x + 10 , w - > y + window_options_misc_widgets [ WIDX_WINDOW_LIMIT ] . top + 1 ) ;
2016-09-09 18:16:12 +02:00
set_format_arg ( 0 , sint16 , gConfigGeneral . window_limit ) ;
2016-05-30 19:13:54 +02:00
gfx_draw_string_left (
dpi ,
STR_COMMA16 ,
2016-09-09 18:16:12 +02:00
gCommonFormatArgs ,
2016-05-30 19:13:54 +02:00
w - > colours [ 1 ] ,
w - > x + window_options_misc_widgets [ WIDX_WINDOW_LIMIT ] . left + 1 ,
w - > y + window_options_misc_widgets [ WIDX_WINDOW_LIMIT ] . top
) ;
2015-02-21 12:05:15 +01:00
break ;
2014-08-16 16:29:15 +02:00
}
2014-05-12 16:59:20 +02:00
}
// helper function, all dropdown boxes have similar properties
2017-01-04 22:17:08 +01:00
static void window_options_show_dropdown ( rct_window * w , rct_widget * widget , sint32 num_items )
2014-05-12 16:59:20 +02:00
{
window_dropdown_show_text_custom_width (
w - > x + widget - > left ,
w - > y + widget - > top ,
widget - > bottom - widget - > top + 1 ,
w - > colours [ 1 ] ,
2015-05-07 20:31:11 +02:00
DROPDOWN_FLAG_STAY_OPEN ,
2014-05-12 16:59:20 +02:00
num_items ,
widget - > right - widget - > left - 3
2014-08-15 00:46:36 +02:00
) ;
2014-05-12 21:18:27 +02:00
}
2015-10-20 20:16:30 +02:00
static void window_options_update_height_markers ( )
2014-05-12 21:18:27 +02:00
{
2015-02-16 23:47:11 +01:00
config_save_default ( ) ;
2014-05-12 21:18:27 +02:00
gfx_invalidate_screen ( ) ;
2014-05-26 19:06:57 +02:00
}
2014-08-16 16:29:15 +02:00
2017-01-04 22:17:08 +01:00
static void window_options_scrollgetsize ( rct_window * w , sint32 scrollIndex , sint32 * width , sint32 * height )
2015-06-04 22:29:21 +02:00
{
if ( w - > page = = WINDOW_OPTIONS_PAGE_AUDIO ) {
2015-07-10 02:39:16 +02:00
* width = 1000 ;
2015-06-04 22:29:21 +02:00
}
}
2017-01-04 22:17:08 +01:00
static void window_options_text_input ( rct_window * w , sint32 widgetIndex , char * text )
2015-07-10 02:39:16 +02:00
{
if ( text = = NULL )
2015-05-25 21:38:33 +02:00
return ;
2015-07-10 02:39:16 +02:00
if ( widgetIndex = = WIDX_CHANNEL_BUTTON ) {
2015-05-25 21:38:33 +02:00
if ( gConfigTwitch . channel ! = NULL )
free ( gConfigTwitch . channel ) ;
gConfigTwitch . channel = _strdup ( text ) ;
config_save_default ( ) ;
}
}
2014-08-16 16:29:15 +02:00
# pragma region Common
2017-01-04 22:17:08 +01:00
static void window_options_set_page ( rct_window * w , sint32 page )
2014-08-16 16:29:15 +02:00
{
w - > page = page ;
w - > frame_no = 0 ;
2015-06-04 20:51:54 +02:00
w - > enabled_widgets = window_options_page_enabled_widgets [ page ] ;
w - > pressed_widgets = 0 ;
w - > widgets = window_options_page_widgets [ page ] ;
2014-08-16 16:29:15 +02:00
window_invalidate ( w ) ;
2015-03-31 03:21:30 +02:00
window_event_resize_call ( w ) ;
window_event_invalidate_call ( w ) ;
2014-08-16 16:29:15 +02:00
window_init_scroll_widgets ( w ) ;
window_invalidate ( w ) ;
}
static void window_options_set_pressed_tab ( rct_window * w )
{
2017-01-04 22:17:08 +01:00
sint32 i ;
2014-08-16 16:29:15 +02:00
for ( i = 0 ; i < WINDOW_OPTIONS_PAGE_COUNT ; i + + )
w - > pressed_widgets & = ~ ( 1 < < ( WIDX_TAB_1 + i ) ) ;
w - > pressed_widgets | = 1LL < < ( WIDX_TAB_1 + w - > page ) ;
}
2017-01-04 22:17:08 +01:00
static void window_options_draw_tab_image ( rct_drawpixelinfo * dpi , rct_window * w , sint32 page , sint32 spriteIndex )
2014-08-16 16:29:15 +02:00
{
2017-01-04 22:17:08 +01:00
sint32 widgetIndex = WIDX_TAB_1 + page ;
2014-08-16 16:29:15 +02:00
if ( ! ( w - > disabled_widgets & ( 1LL < < widgetIndex ) ) ) {
if ( w - > page = = page ) {
2017-01-04 22:17:08 +01:00
sint32 frame = w - > frame_no / window_options_tab_animation_divisor [ w - > page ] ;
2014-08-16 16:29:15 +02:00
spriteIndex + = ( frame % window_options_tab_animation_frames [ w - > page ] ) ;
}
gfx_draw_sprite ( dpi , spriteIndex , w - > x + w - > widgets [ widgetIndex ] . left , w - > y + w - > widgets [ widgetIndex ] . top , 0 ) ;
}
}
static void window_options_draw_tab_images ( rct_drawpixelinfo * dpi , rct_window * w )
{
2016-07-14 14:07:49 +02:00
window_options_draw_tab_image ( dpi , w , WINDOW_OPTIONS_PAGE_DISPLAY , SPR_TAB_RIDE_0 ) ;
window_options_draw_tab_image ( dpi , w , WINDOW_OPTIONS_PAGE_RENDERING , SPR_TAB_PAINT_0 ) ;
window_options_draw_tab_image ( dpi , w , WINDOW_OPTIONS_PAGE_CULTURE , SPR_TAB_TIMER_0 ) ;
window_options_draw_tab_image ( dpi , w , WINDOW_OPTIONS_PAGE_AUDIO , SPR_TAB_MUSIC_0 ) ;
window_options_draw_tab_image ( dpi , w , WINDOW_OPTIONS_PAGE_CONTROLS_AND_INTERFACE , SPR_TAB_GEARS_0 ) ;
window_options_draw_tab_image ( dpi , w , WINDOW_OPTIONS_PAGE_MISC , SPR_TAB_WRENCH_0 ) ;
2015-05-25 21:38:33 +02:00
window_options_draw_tab_image ( dpi , w , WINDOW_OPTIONS_PAGE_TWITCH , SPR_G2_TAB_TWITCH ) ;
2014-08-16 16:29:15 +02:00
}
2015-06-11 22:34:38 +02:00
# pragma endregion