diff --git a/data/language/english_uk.txt b/data/language/english_uk.txt index 190617e9db..08f5a92055 100644 --- a/data/language/english_uk.txt +++ b/data/language/english_uk.txt @@ -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 # ################ diff --git a/src/localisation/string_ids.h b/src/localisation/string_ids.h index f88d2670d0..2c4b69e0dc 100644 --- a/src/localisation/string_ids.h +++ b/src/localisation/string_ids.h @@ -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 }; diff --git a/src/windows/options.c b/src/windows/options.c index 32f05912a2..c02d3286e0 100644 --- a/src/windows/options.c +++ b/src/windows/options.c @@ -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);