mirror of
https://github.com/OpenRCT2/OpenRCT2
synced 2026-01-30 10:15:36 +01:00
Simplify UI scaling display quality options (#6764)
Simplify UI scaling display quality options. This removes three options: * 'Use NN scaling at integer scales', as NN is decidedly preferable at integer scales. * Anisotropic scaling, as it produces results very similar (if not equal) to linear scaling. * NN as a selectable option in the dropdown - NN is forced on integer scales and unavailable for non-integer scales.
This commit is contained in:
committed by
Michael Steenbeek
parent
107461bbe8
commit
837b177d9d
@@ -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 :<removed string - do not use>
|
||||
STR_5731 :Linear
|
||||
STR_5732 :Anisotropic
|
||||
STR_5733 :Use NN scaling at integer scales
|
||||
STR_5732 :<removed string - do not use>
|
||||
STR_5733 :<removed string - do not use>
|
||||
# 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 :<removed string - do not use>
|
||||
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.
|
||||
|
||||
@@ -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)
|
||||
{
|
||||
|
||||
@@ -22,6 +22,8 @@
|
||||
* Padding between the widgets and the window needs reducing, an artifact from originally being inside group boxes.
|
||||
*/
|
||||
|
||||
#include <cmath>
|
||||
|
||||
#include <openrct2/audio/AudioMixer.h>
|
||||
#include <openrct2/config/Config.h>
|
||||
#include <openrct2/Context.h>
|
||||
@@ -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);
|
||||
|
||||
@@ -105,7 +105,6 @@ namespace Config
|
||||
{
|
||||
ConfigEnumEntry<sint32>("NEAREST_NEIGHBOUR", SCALE_QUALITY_NN),
|
||||
ConfigEnumEntry<sint32>("LINEAR", SCALE_QUALITY_LINEAR),
|
||||
ConfigEnumEntry<sint32>("ANISOTROPIC_FILTERING", SCALE_QUALITY_ANISOTROPIC),
|
||||
ConfigEnumEntry<sint32>("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<sint32>("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<sint32>("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);
|
||||
|
||||
@@ -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
|
||||
};
|
||||
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user