1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2025-12-24 00:03:11 +01:00

Add another page to options

All 32 available widgets on "Display" page were taken, this adds another
page, "Rendering", to the options window, so it can hold remaining widgets.
This commit is contained in:
Michał Janiszewski
2016-01-31 19:26:28 +01:00
parent 80ad302087
commit b3ed293bb3
3 changed files with 103 additions and 59 deletions

View File

@@ -4037,6 +4037,9 @@ STR_5731 :Linear
STR_5732 :Anisotropic
STR_5733 :Use NN scaling at integer scales
# tooltip for tab in options window
STR_5727 :{SMALLFONT}{BLACK}Rendering
#############
# Scenarios #
################

View File

@@ -2330,6 +2330,8 @@ enum {
STR_SCALING_QUALITY_ANISOTROPIC = 5732,
STR_USE_NN_AT_INTEGER_SCALE = 5733,
STR_OPTIONS_RENDERING_TIP = 5727,
// Have to include resource strings (from scenarios and objects) for the time being now that language is partially working
STR_COUNT = 32768
};

View File

@@ -48,6 +48,7 @@
enum WINDOW_OPTIONS_PAGE {
WINDOW_OPTIONS_PAGE_DISPLAY,
WINDOW_OPTIONS_PAGE_RENDERING,
WINDOW_OPTIONS_PAGE_CULTURE,
WINDOW_OPTIONS_PAGE_AUDIO,
WINDOW_OPTIONS_PAGE_CONTROLS_AND_INTERFACE,
@@ -69,6 +70,7 @@ enum WINDOW_OPTIONS_WIDGET_IDX {
WIDX_TAB_4,
WIDX_TAB_5,
WIDX_TAB_6,
WIDX_TAB_7,
WIDX_PAGE_START,
@@ -89,7 +91,9 @@ enum WINDOW_OPTIONS_WIDGET_IDX {
WIDX_SCALE_QUALITY,
WIDX_SCALE_QUALITY_DROPDOWN,
WIDX_SCALE_USE_NN_AT_INTEGER_SCALES_CHECKBOX,
WIDX_RENDERING_GROUP,
// Rendering
WIDX_RENDERING_GROUP = WIDX_PAGE_START,
WIDX_TILE_SMOOTHING_CHECKBOX,
WIDX_GRIDLINES_CHECKBOX,
WIDX_CONSTRUCTION_MARKER,
@@ -176,11 +180,12 @@ enum WINDOW_OPTIONS_WIDGET_IDX {
{ 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, 0x2000144E, STR_OPTIONS_DISPLAY_TIP }, \
{ WWT_TAB, 1, 34, 64, 17, 43, 0x2000144E, STR_OPTIONS_CULTURE_TIP }, \
{ WWT_TAB, 1, 65, 95, 17, 43, 0x2000144E, STR_OPTIONS_AUDIO_TIP }, \
{ WWT_TAB, 1, 96, 126, 17, 43, 0x2000144E, STR_OPTIONS_CONTROLS_AND_INTERFACE_TIP }, \
{ WWT_TAB, 1, 127, 157, 17, 43, 0x2000144E, STR_OPTIONS_MISCELLANEOUS_TIP }, \
{ WWT_TAB, 1, 158, 188, 17, 43, 0x2000144E, STR_OPTIONS_TWITCH_TIP }
{ WWT_TAB, 1, 34, 64, 17, 43, 0x2000144E, STR_OPTIONS_RENDERING_TIP }, \
{ WWT_TAB, 1, 65, 95, 17, 43, 0x2000144E, STR_OPTIONS_CULTURE_TIP }, \
{ WWT_TAB, 1, 96, 126, 17, 43, 0x2000144E, STR_OPTIONS_AUDIO_TIP }, \
{ WWT_TAB, 1, 127, 157, 17, 43, 0x2000144E, STR_OPTIONS_CONTROLS_AND_INTERFACE_TIP }, \
{ WWT_TAB, 1, 158, 188, 17, 43, 0x2000144E, STR_OPTIONS_MISCELLANEOUS_TIP }, \
{ WWT_TAB, 1, 189, 209, 17, 43, 0x2000144E, STR_OPTIONS_TWITCH_TIP }
static rct_widget window_options_display_widgets[] = {
MAIN_OPTIONS_WIDGETS,
@@ -200,8 +205,12 @@ static rct_widget window_options_display_widgets[] = {
{ WWT_DROPDOWN, 1, 155, 299, 174, 185, STR_NONE, STR_REQUIRES_HW_DISPLAY }, // scaling quality hint
{ WWT_DROPDOWN_BUTTON, 1, 288, 298, 175, 184, STR_DROPDOWN_GLYPH, STR_REQUIRES_HW_DISPLAY_TIP },
{ WWT_CHECKBOX, 1, 10, 290, 189, 200, STR_USE_NN_AT_INTEGER_SCALE, STR_NONE }, // use nn scaling at integer scales
{ WIDGETS_END },
};
#define FRAME_RENDERING_START 209
static rct_widget window_options_rendering_widgets[] = {
MAIN_OPTIONS_WIDGETS,
#define FRAME_RENDERING_START 53
{ WWT_GROUPBOX, 1, 5, 304, FRAME_RENDERING_START + 0, FRAME_RENDERING_START + 91, 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
@@ -302,6 +311,7 @@ static rct_widget window_options_twitch_widgets[] = {
rct_widget *window_options_page_widgets[] = {
window_options_display_widgets,
window_options_rendering_widgets,
window_options_culture_widgets,
window_options_audio_widgets,
window_options_controls_and_interface_widgets,
@@ -311,8 +321,8 @@ rct_widget *window_options_page_widgets[] = {
#pragma endregion
const int window_options_tab_animation_divisor[] = { 4, 8, 2, 2, 2, 1 };
const int window_options_tab_animation_frames[] = { 16, 8, 16, 4, 16, 1 };
const int window_options_tab_animation_divisor[] = { 4, 4, 8, 2, 2, 2, 1 };
const int window_options_tab_animation_frames[] = { 16, 8, 8, 16, 4, 16, 1 };
static void window_options_set_page(rct_window *w, int page);
static void window_options_set_pressed_tab(rct_window *w);
@@ -374,7 +384,8 @@ static rct_window_event_list window_options_events = {
(1 << WIDX_TAB_3) | \
(1 << WIDX_TAB_4) | \
(1 << WIDX_TAB_5) | \
(1 << WIDX_TAB_6)
(1 << WIDX_TAB_6) | \
(1 << WIDX_TAB_7)
static uint32 window_options_page_enabled_widgets[] = {
MAIN_OPTIONS_ENABLED_WIDGETS |
@@ -394,11 +405,15 @@ static uint32 window_options_page_enabled_widgets[] = {
(1 << WIDX_SCALE_DOWN) |
(1 << WIDX_SCALE_QUALITY) |
(1 << WIDX_SCALE_QUALITY_DROPDOWN) |
(1 << WIDX_SCALE_USE_NN_AT_INTEGER_SCALES_CHECKBOX) |
(1 << WIDX_SCALE_USE_NN_AT_INTEGER_SCALES_CHECKBOX),
MAIN_OPTIONS_ENABLED_WIDGETS |
(1 << WIDX_TILE_SMOOTHING_CHECKBOX) |
(1 << WIDX_GRIDLINES_CHECKBOX) |
(1 << WIDX_CONSTRUCTION_MARKER) |
(1 << WIDX_CONSTRUCTION_MARKER_DROPDOWN) |
(1u << WIDX_DAY_NIGHT_CHECKBOX) |
(1u << WIDX_UPPER_CASE_BANNERS_CHECKBOX),
(1 << WIDX_DAY_NIGHT_CHECKBOX) |
(1 << WIDX_UPPER_CASE_BANNERS_CHECKBOX),
MAIN_OPTIONS_ENABLED_WIDGETS |
(1 << WIDX_LANGUAGE) |
@@ -508,6 +523,7 @@ static void window_options_mouseup(rct_window *w, int widgetIndex)
case WIDX_TAB_4:
case WIDX_TAB_5:
case WIDX_TAB_6:
case WIDX_TAB_7:
window_options_set_page(w, widgetIndex - WIDX_TAB_1);
break;
}
@@ -515,22 +531,6 @@ static void window_options_mouseup(rct_window *w, int widgetIndex)
switch (w->page) {
case WINDOW_OPTIONS_PAGE_DISPLAY:
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;
case WIDX_HARDWARE_DISPLAY_CHECKBOX:
gConfigGeneral.hardware_display ^= 1;
#ifdef __WINDOWS__
@@ -573,6 +573,27 @@ static void window_options_mouseup(rct_window *w, int widgetIndex)
gfx_invalidate_screen();
platform_trigger_resize();
break;
}
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;
case WIDX_DAY_NIGHT_CHECKBOX:
gConfigGeneral.day_night_cycle ^= 1;
config_save_default();
@@ -815,16 +836,6 @@ static void window_options_mousedown(int widgetIndex, rct_window*w, rct_widget*
dropdown_set_checked(gConfigGeneral.fullscreen_mode, true);
break;
case WIDX_CONSTRUCTION_MARKER_DROPDOWN:
gDropdownItemsFormat[0] = 1142;
gDropdownItemsFormat[1] = 1142;
gDropdownItemsArgs[0] = STR_WHITE;
gDropdownItemsArgs[1] = STR_TRANSLUCENT;
window_options_show_dropdown(w, widget, 2);
dropdown_set_checked(gConfigGeneral.construction_marker_colour, true);
break;
case WIDX_SCALE_UP:
gConfigGeneral.window_scale += 0.25f;
config_save_default();
@@ -853,6 +864,21 @@ static void window_options_mousedown(int widgetIndex, rct_window*w, rct_widget*
}
break;
case WINDOW_OPTIONS_PAGE_RENDERING:
switch (widgetIndex) {
case WIDX_CONSTRUCTION_MARKER_DROPDOWN:
gDropdownItemsFormat[0] = 1142;
gDropdownItemsFormat[1] = 1142;
gDropdownItemsArgs[0] = STR_WHITE;
gDropdownItemsArgs[1] = STR_TRANSLUCENT;
window_options_show_dropdown(w, widget, 2);
dropdown_set_checked(gConfigGeneral.construction_marker_colour, true);
break;
}
break;
case WINDOW_OPTIONS_PAGE_CULTURE:
switch (widgetIndex) {
case WIDX_HEIGHT_LABELS_DROPDOWN:
@@ -1080,13 +1106,6 @@ static void window_options_dropdown(rct_window *w, int widgetIndex, int dropdown
gfx_invalidate_screen();
}
break;
case WIDX_CONSTRUCTION_MARKER_DROPDOWN:
if (dropdownIndex != gConfigGeneral.construction_marker_colour) {
gConfigGeneral.construction_marker_colour = (uint8)dropdownIndex;
config_save_default();
gfx_invalidate_screen();
}
break;
case WIDX_SCALE_QUALITY_DROPDOWN:
if (dropdownIndex != gConfigGeneral.scale_quality) {
gConfigGeneral.scale_quality = (uint8)dropdownIndex;
@@ -1098,6 +1117,18 @@ static void window_options_dropdown(rct_window *w, int widgetIndex, int dropdown
}
break;
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;
case WINDOW_OPTIONS_PAGE_CULTURE:
switch (widgetIndex) {
case WIDX_HEIGHT_LABELS_DROPDOWN:
@@ -1279,36 +1310,41 @@ static void window_options_invalidate(rct_window *w)
w->disabled_widgets &= ~(1 << WIDX_RESOLUTION);
}
widget_set_checkbox_value(w, WIDX_TILE_SMOOTHING_CHECKBOX, (RCT2_GLOBAL(RCT2_ADDRESS_CONFIG_FLAGS, uint8) & CONFIG_FLAG_DISABLE_SMOOTH_LANDSCAPE) == 0);
widget_set_checkbox_value(w, WIDX_GRIDLINES_CHECKBOX, RCT2_GLOBAL(RCT2_ADDRESS_CONFIG_FLAGS, uint8) & CONFIG_FLAG_ALWAYS_SHOW_GRIDLINES);
widget_set_checkbox_value(w, WIDX_HARDWARE_DISPLAY_CHECKBOX, gConfigGeneral.hardware_display);
widget_set_checkbox_value(w, WIDX_UNCAP_FPS_CHECKBOX, gConfigGeneral.uncap_fps);
widget_set_checkbox_value(w, WIDX_SHOW_FPS_CHECKBOX, gConfigGeneral.show_fps);
widget_set_checkbox_value(w, WIDX_MINIMIZE_FOCUS_LOSS, gConfigGeneral.minimize_fullscreen_focus_loss);
widget_set_checkbox_value(w, WIDX_STEAM_OVERLAY_PAUSE, gConfigGeneral.steam_overlay_pause);
widget_set_checkbox_value(w, WIDX_SCALE_USE_NN_AT_INTEGER_SCALES_CHECKBOX, gConfigGeneral.use_nn_at_integer_scales);
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);
window_options_display_widgets[WIDX_SCALE_QUALITY].image = STR_SCALING_QUALITY_NN + gConfigGeneral.scale_quality;
// construction marker: white/translucent
window_options_display_widgets[WIDX_CONSTRUCTION_MARKER].image = STR_WHITE + gConfigGeneral.construction_marker_colour;
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;
window_options_display_widgets[WIDX_TILE_SMOOTHING_CHECKBOX].type = WWT_CHECKBOX;
window_options_display_widgets[WIDX_GRIDLINES_CHECKBOX].type = WWT_CHECKBOX;
window_options_display_widgets[WIDX_CONSTRUCTION_MARKER].type = WWT_DROPDOWN;
window_options_display_widgets[WIDX_CONSTRUCTION_MARKER_DROPDOWN].type = WWT_DROPDOWN_BUTTON;
window_options_display_widgets[WIDX_HARDWARE_DISPLAY_CHECKBOX].type = WWT_CHECKBOX;
window_options_display_widgets[WIDX_UNCAP_FPS_CHECKBOX].type = WWT_CHECKBOX;
window_options_display_widgets[WIDX_SHOW_FPS_CHECKBOX].type = WWT_CHECKBOX;
window_options_display_widgets[WIDX_MINIMIZE_FOCUS_LOSS].type = WWT_CHECKBOX;
window_options_display_widgets[WIDX_STEAM_OVERLAY_PAUSE].type = WWT_CHECKBOX;
window_options_display_widgets[WIDX_DAY_NIGHT_CHECKBOX].type = WWT_CHECKBOX;
window_options_display_widgets[WIDX_UPPER_CASE_BANNERS_CHECKBOX].type = WWT_CHECKBOX;
break;
case WINDOW_OPTIONS_PAGE_RENDERING:
widget_set_checkbox_value(w, WIDX_TILE_SMOOTHING_CHECKBOX, (RCT2_GLOBAL(RCT2_ADDRESS_CONFIG_FLAGS, uint8) & CONFIG_FLAG_DISABLE_SMOOTH_LANDSCAPE) == 0);
widget_set_checkbox_value(w, WIDX_GRIDLINES_CHECKBOX, RCT2_GLOBAL(RCT2_ADDRESS_CONFIG_FLAGS, uint8) & CONFIG_FLAG_ALWAYS_SHOW_GRIDLINES);
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);
// construction marker: white/translucent
window_options_rendering_widgets[WIDX_CONSTRUCTION_MARKER].image = STR_WHITE + gConfigGeneral.construction_marker_colour;
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;
break;
case WINDOW_OPTIONS_PAGE_CULTURE:
@@ -1526,13 +1562,15 @@ static void window_options_paint(rct_window *w, rct_drawpixelinfo *dpi)
case WINDOW_OPTIONS_PAGE_DISPLAY:
gfx_draw_string_left(dpi, STR_DISPLAY_RESOLUTION, w, w->colours[1], w->x + 10, w->y + window_options_display_widgets[WIDX_RESOLUTION].top + 1);
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);
gfx_draw_string_left(dpi, STR_CONSTRUCTION_MARKER, w, w->colours[1], w->x + 10, w->y + window_options_display_widgets[WIDX_CONSTRUCTION_MARKER].top + 1);
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);
gfx_draw_string_left(dpi, STR_SCALING_QUALITY, w, w->colours[1], w->x + 10, w->y + window_options_display_widgets[WIDX_SCALE_QUALITY].top + 1);
int scale = (int)(gConfigGeneral.window_scale * 100);
gfx_draw_string_left(dpi, 3311, &scale, w->colours[1], w->x + w->widgets[WIDX_SCALE].left + 1, w->y + w->widgets[WIDX_SCALE].top + 1);
break;
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;
case WINDOW_OPTIONS_PAGE_CULTURE:
gfx_draw_string_left(dpi, 2776, w, w->colours[1], w->x + 10, w->y + window_options_culture_widgets[WIDX_LANGUAGE].top + 1);
@@ -1706,6 +1744,7 @@ static void window_options_draw_tab_image(rct_drawpixelinfo *dpi, rct_window *w,
static void window_options_draw_tab_images(rct_drawpixelinfo *dpi, rct_window *w)
{
window_options_draw_tab_image(dpi, w, WINDOW_OPTIONS_PAGE_DISPLAY, 5442);
window_options_draw_tab_image(dpi, w, WINDOW_OPTIONS_PAGE_RENDERING, 5221);
window_options_draw_tab_image(dpi, w, WINDOW_OPTIONS_PAGE_CULTURE, 5229);
window_options_draw_tab_image(dpi, w, WINDOW_OPTIONS_PAGE_AUDIO, 5335);
window_options_draw_tab_image(dpi, w, WINDOW_OPTIONS_PAGE_CONTROLS_AND_INTERFACE, 5201);