diff --git a/data/language/en-GB.txt b/data/language/en-GB.txt index 907c552e89..6f0eb44b3c 100644 --- a/data/language/en-GB.txt +++ b/data/language/en-GB.txt @@ -4032,13 +4032,13 @@ STR_5723 :Heavy Rain STR_5724 :Thunderstorm STR_5725 :{BLACK}Force weather: STR_5726 :{SMALLFONT}{BLACK}Sets the current weather in park -STR_5727 :Scaling quality +STR_5727 :Scaling quality: STR_5728 :Requires hardware display option STR_5729 :{SMALLFONT}{BLACK}Requires hardware display option -STR_5730 :Nearest neighbour +STR_5730 : STR_5731 :Linear -STR_5732 :Anisotropic -STR_5733 :Use NN scaling at integer scales +STR_5732 : +STR_5733 : # tooltip for tab in options window STR_5734 :{SMALLFONT}{BLACK}Rendering STR_5735 :Network Status @@ -4125,8 +4125,8 @@ STR_5814 :{WINDOW_COLOUR_1}{OPENQUOTES}{STRING}{ENDQUOTES} #tooltips STR_5815 :{SMALLFONT}{BLACK}Display FPS counter in-game STR_5816 :{SMALLFONT}{BLACK}Sets ratio to scale the game by.{NEWLINE}Most useful when playing in{NEWLINE}high resolutions -STR_5817 :{SMALLFONT}{BLACK}[Requires hardware display]{NEWLINE}Sets UI scaling type{NEWLINE}{NEWLINE}Nearest Neighbour is sharp but causes distortion at non-integer scales.{NEWLINE}Linear and Anisotropic are smooth but blurry.{NEWLINE}Smooth NN is sharp even at non-integer scales but can cause a minor performance hit. -STR_5818 :{SMALLFONT}{BLACK}[Requires hardware display]{NEWLINE}Use nearest neighbour scaling{NEWLINE}when window scaling factor set{NEWLINE}to integer values (1, 2, 3, etc) +STR_5817 :{SMALLFONT}{BLACK}Sets UI scaling type. Requires hardware display to be used.{NEWLINE}Linear scaling is smooth, but blurry. Smooth Nearest Neighbour scaling is sharp, but can cause a minor performance hit. +STR_5818 : STR_5819 :{SMALLFONT}{BLACK}[Requires hardware display]{NEWLINE}Pause the game if Steam{NEWLINE}in-game overlay is opened STR_5820 :{SMALLFONT}{BLACK}Minimise the game if focus is{NEWLINE}lost while in fullscreen mode STR_5821 :{SMALLFONT}{BLACK}Changes the colour of the construction marker when building rides,{NEWLINE}paths, shops, scenery, etc. diff --git a/src/openrct2-ui/UiContext.cpp b/src/openrct2-ui/UiContext.cpp index 5c92cccaa1..c48aa29b05 100644 --- a/src/openrct2-ui/UiContext.cpp +++ b/src/openrct2-ui/UiContext.cpp @@ -492,12 +492,11 @@ public: { char scaleQualityBuffer[4]; _scaleQuality = gConfigGeneral.scale_quality; - if (gConfigGeneral.use_nn_at_integer_scales && - gConfigGeneral.window_scale == std::floor(gConfigGeneral.window_scale)) + if (gConfigGeneral.window_scale == std::floor(gConfigGeneral.window_scale)) { _scaleQuality = SCALE_QUALITY_NN; } - + sint32 scaleQuality = _scaleQuality; if (_scaleQuality == SCALE_QUALITY_SMOOTH_NN) { diff --git a/src/openrct2-ui/windows/Options.cpp b/src/openrct2-ui/windows/Options.cpp index 0b500f94bd..6bc8e6a19f 100644 --- a/src/openrct2-ui/windows/Options.cpp +++ b/src/openrct2-ui/windows/Options.cpp @@ -22,6 +22,8 @@ * Padding between the widgets and the window needs reducing, an artifact from originally being inside group boxes. */ +#include + #include #include #include @@ -87,7 +89,6 @@ enum WINDOW_OPTIONS_WIDGET_IDX { WIDX_DRAWING_ENGINE_DROPDOWN, WIDX_SCALE_QUALITY, WIDX_SCALE_QUALITY_DROPDOWN, - WIDX_SCALE_USE_NN_AT_INTEGER_SCALES_CHECKBOX, WIDX_STEAM_OVERLAY_PAUSE, WIDX_UNCAP_FPS_CHECKBOX, WIDX_SHOW_FPS_CHECKBOX, @@ -212,7 +213,7 @@ enum WINDOW_OPTIONS_WIDGET_IDX { static rct_widget window_options_display_widgets[] = { MAIN_OPTIONS_WIDGETS, - { WWT_GROUPBOX, 1, 5, 304, 53, 205, STR_HARDWARE_GROUP, STR_NONE }, // Hardware group + { WWT_GROUPBOX, 1, 5, 304, 53, 192, STR_HARDWARE_GROUP, STR_NONE }, // Hardware group { WWT_DROPDOWN, 1, 155, 299, 68, 79, STR_ARG_12_STRINGID, STR_NONE }, // Fullscreen { WWT_DROPDOWN_BUTTON, 1, 288, 298, 69, 78, STR_DROPDOWN_GLYPH, STR_FULLSCREEN_MODE_TIP }, @@ -229,13 +230,12 @@ static rct_widget window_options_display_widgets[] = { { 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 - { WWT_CHECKBOX, 1, 25, 290, 158, 169, STR_STEAM_OVERLAY_PAUSE, STR_STEAM_OVERLAY_PAUSE_TIP }, // Pause on steam overlay + { WWT_CHECKBOX, 1, 25, 290, 150, 151, STR_STEAM_OVERLAY_PAUSE, STR_STEAM_OVERLAY_PAUSE_TIP }, // Pause on steam overlay - { 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 + { WWT_CHECKBOX, 1, 11, 290, 161, 172, STR_UNCAP_FPS, STR_UNCAP_FPS_TIP }, // Uncap fps + { WWT_CHECKBOX, 1, 155, 299, 161, 172, STR_SHOW_FPS, STR_SHOW_FPS_TIP }, // Show fps + { WWT_CHECKBOX, 1, 11, 290, 176, 187, STR_MINIMISE_FULLSCREEN_ON_FOCUS_LOSS, STR_MINIMISE_FULLSCREEN_ON_FOCUS_LOSS_TIP }, // Minimise fullscreen focus loss { WIDGETS_END }, @@ -382,9 +382,7 @@ static const rct_string_id window_options_title_music_names[] = { }; static const rct_string_id window_options_scale_quality_names[] = { - STR_SCALING_QUALITY_NN, STR_SCALING_QUALITY_LINEAR, - STR_SCALING_QUALITY_ANISOTROPIC, STR_SCALING_QUALITY_SMOOTH_NN }; @@ -480,8 +478,7 @@ static uint64 window_options_page_enabled_widgets[] = { (1 << WIDX_SCALE_UP) | (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_QUALITY_DROPDOWN), MAIN_OPTIONS_ENABLED_WIDGETS | (1 << WIDX_TILE_SMOOTHING_CHECKBOX) | @@ -650,12 +647,6 @@ static void window_options_mouseup(rct_window *w, rct_widgetindex widgetIndex) config_save_default(); window_invalidate(w); break; - case WIDX_SCALE_USE_NN_AT_INTEGER_SCALES_CHECKBOX: - gConfigGeneral.use_nn_at_integer_scales ^= 1; - config_save_default(); - gfx_invalidate_screen(); - context_trigger_resize(); - break; } break; @@ -1022,16 +1013,13 @@ static void window_options_mousedown(rct_window *w, rct_widgetindex widgetIndex, case WIDX_SCALE_QUALITY_DROPDOWN: gDropdownItemsFormat[0] = STR_DROPDOWN_MENU_LABEL; gDropdownItemsFormat[1] = STR_DROPDOWN_MENU_LABEL; - gDropdownItemsFormat[2] = STR_DROPDOWN_MENU_LABEL; - gDropdownItemsFormat[3] = STR_DROPDOWN_MENU_LABEL; - gDropdownItemsArgs[0] = STR_SCALING_QUALITY_NN; - gDropdownItemsArgs[1] = STR_SCALING_QUALITY_LINEAR; - gDropdownItemsArgs[2] = STR_SCALING_QUALITY_ANISOTROPIC; - gDropdownItemsArgs[3] = STR_SCALING_QUALITY_SMOOTH_NN; + gDropdownItemsArgs[0] = STR_SCALING_QUALITY_LINEAR; + gDropdownItemsArgs[1] = STR_SCALING_QUALITY_SMOOTH_NN; - window_options_show_dropdown(w, widget, 4); + window_options_show_dropdown(w, widget, 2); - dropdown_set_checked(gConfigGeneral.scale_quality, true); + // Note: offset by one to compensate for lack of NN option. + dropdown_set_checked(gConfigGeneral.scale_quality - 1, true); break; } break; @@ -1321,8 +1309,10 @@ static void window_options_dropdown(rct_window *w, rct_widgetindex widgetIndex, } break; case WIDX_SCALE_QUALITY_DROPDOWN: - if (dropdownIndex != gConfigGeneral.scale_quality) { - gConfigGeneral.scale_quality = (uint8)dropdownIndex; + // Note: offset by one to compensate for lack of NN option. + if ((dropdownIndex + 1) != gConfigGeneral.scale_quality) + { + gConfigGeneral.scale_quality = (uint8)dropdownIndex + 1; config_save_default(); gfx_invalidate_screen(); context_trigger_resize(); @@ -1534,25 +1524,36 @@ static void window_options_invalidate(rct_window *w) w->disabled_widgets &= ~(1 << WIDX_RESOLUTION); } - if (gConfigGeneral.drawing_engine == DRAWING_ENGINE_SOFTWARE) { + // Disable Steam Overlay checkbox when using software rendering. + if (gConfigGeneral.drawing_engine == DRAWING_ENGINE_SOFTWARE) + { + w->disabled_widgets |= (1 << WIDX_STEAM_OVERLAY_PAUSE); + } + else + { + w->disabled_widgets &= ~(1 << WIDX_STEAM_OVERLAY_PAUSE); + } + + // Disable scaling quality dropdown when using software rendering or when using an integer scalar. + // In the latter case, nearest neighbour rendering will be used to scale. + if (gConfigGeneral.drawing_engine == DRAWING_ENGINE_SOFTWARE || + gConfigGeneral.window_scale == std::floor(gConfigGeneral.window_scale)) + { 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 { + } + 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); } 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); - window_options_display_widgets[WIDX_SCALE_QUALITY].text = window_options_scale_quality_names[gConfigGeneral.scale_quality]; + window_options_display_widgets[WIDX_SCALE_QUALITY].text = window_options_scale_quality_names[gConfigGeneral.scale_quality - 1]; window_options_display_widgets[WIDX_RESOLUTION].type = WWT_DROPDOWN; window_options_display_widgets[WIDX_RESOLUTION_DROPDOWN].type = WWT_DROPDOWN_BUTTON; @@ -1592,6 +1593,7 @@ static void window_options_invalidate(rct_window *w) w->enabled_widgets |= (1 << WIDX_DISABLE_LIGHTNING_EFFECT_CHECKBOX); w->disabled_widgets &= ~(1 << WIDX_DISABLE_LIGHTNING_EFFECT_CHECKBOX); } + widget_set_checkbox_value(w, WIDX_SHOW_GUEST_PURCHASES_CHECKBOX, gConfigGeneral.show_guest_purchases); // construction marker: white/translucent static const rct_string_id construction_marker_colours[] = { @@ -1847,7 +1849,9 @@ static void window_options_paint(rct_window *w, rct_drawpixelinfo *dpi) 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); colour = w->colours[1]; - if (gConfigGeneral.drawing_engine == DRAWING_ENGINE_SOFTWARE) { + if (gConfigGeneral.drawing_engine == DRAWING_ENGINE_SOFTWARE || + gConfigGeneral.window_scale == std::floor(gConfigGeneral.window_scale)) + { 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); diff --git a/src/openrct2/config/Config.cpp b/src/openrct2/config/Config.cpp index c911c8e24f..33458fe843 100644 --- a/src/openrct2/config/Config.cpp +++ b/src/openrct2/config/Config.cpp @@ -105,7 +105,6 @@ namespace Config { ConfigEnumEntry("NEAREST_NEIGHBOUR", SCALE_QUALITY_NN), ConfigEnumEntry("LINEAR", SCALE_QUALITY_LINEAR), - ConfigEnumEntry("ANISOTROPIC_FILTERING", SCALE_QUALITY_ANISOTROPIC), ConfigEnumEntry("SMOOTH_NEAREST_NEIGHBOUR", SCALE_QUALITY_SMOOTH_NN), }); @@ -194,7 +193,6 @@ namespace Config model->steam_overlay_pause = reader->GetBoolean("steam_overlay_pause", true); model->window_scale = reader->GetFloat("window_scale", platform_get_default_scale()); model->scale_quality = reader->GetEnum("scale_quality", SCALE_QUALITY_SMOOTH_NN, Enum_ScaleQuality); - model->use_nn_at_integer_scales = reader->GetBoolean("use_nn_at_integer_scales", true); model->show_fps = reader->GetBoolean("show_fps", false); model->trap_cursor = reader->GetBoolean("trap_cursor", false); model->auto_open_shops = reader->GetBoolean("auto_open_shops", false); @@ -264,7 +262,6 @@ namespace Config writer->WriteBoolean("steam_overlay_pause", model->steam_overlay_pause); writer->WriteFloat("window_scale", model->window_scale); writer->WriteEnum("scale_quality", model->scale_quality, Enum_ScaleQuality); - writer->WriteBoolean("use_nn_at_integer_scales", model->use_nn_at_integer_scales); writer->WriteBoolean("show_fps", model->show_fps); writer->WriteBoolean("trap_cursor", model->trap_cursor); writer->WriteBoolean("auto_open_shops", model->auto_open_shops); diff --git a/src/openrct2/config/Config.h b/src/openrct2/config/Config.h index 75877d80b9..d777db3fdf 100644 --- a/src/openrct2/config/Config.h +++ b/src/openrct2/config/Config.h @@ -34,7 +34,6 @@ typedef struct GeneralConfiguration float window_scale; sint32 drawing_engine; sint32 scale_quality; - bool use_nn_at_integer_scales; bool uncap_fps; bool show_fps; bool minimize_fullscreen_focus_loss; @@ -213,7 +212,6 @@ enum SCALE_QUALITY { SCALE_QUALITY_NN, SCALE_QUALITY_LINEAR, - SCALE_QUALITY_ANISOTROPIC, SCALE_QUALITY_SMOOTH_NN }; diff --git a/src/openrct2/localisation/string_ids.h b/src/openrct2/localisation/string_ids.h index 5257b0f470..002fb38ff8 100644 --- a/src/openrct2/localisation/string_ids.h +++ b/src/openrct2/localisation/string_ids.h @@ -3350,10 +3350,7 @@ enum { STR_SCALING_QUALITY = 5727, STR_REQUIRES_HW_DISPLAY = 5728, // unused STR_REQUIRES_HW_DISPLAY_TIP = 5729, // unused - STR_SCALING_QUALITY_NN = 5730, STR_SCALING_QUALITY_LINEAR = 5731, - STR_SCALING_QUALITY_ANISOTROPIC = 5732, - STR_USE_NN_AT_INTEGER_SCALE = 5733, STR_OPTIONS_RENDERING_TIP = 5734, STR_THEMES_WINDOW_NETWORK_STATUS = 5735, STR_THEMES_WINDOW_PLAYER = 5736, @@ -3438,7 +3435,6 @@ enum { STR_SHOW_FPS_TIP = 5815, STR_WINDOW_SCALE_TIP = 5816, STR_SCALE_QUALITY_TIP = 5817, - STR_USE_NN_AT_INTEGER_SCALE_TIP = 5818, STR_STEAM_OVERLAY_PAUSE_TIP = 5819, STR_MINIMISE_FULLSCREEN_ON_FOCUS_LOSS_TIP = 5820, STR_CONSTRUCTION_MARKER_COLOUR_TIP = 5821,