1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2026-01-06 06:32:56 +01:00

Rework display tab in options window (#24385)

* Divide display options into three group boxes

* Turn frame rate limit options into dropdown
This commit is contained in:
Aaron van Geffen
2025-05-15 22:40:04 +02:00
committed by GitHub
parent 42df41efdb
commit bcb6c40c59
3 changed files with 102 additions and 33 deletions

View File

@@ -3811,3 +3811,10 @@ STR_6763 :RollerCoaster Tycoon 1
STR_6764 :Saving and autosaves
STR_6765 :Advanced
STR_6766 :Clear
STR_6767 :Window
STR_6768 :Rendering
STR_6769 :Behaviour
STR_6770 :Frame rate limit:
STR_6771 :Internal speed (default)
STR_6772 :Vertical sync
STR_6773 :Unrestricted

View File

@@ -1125,13 +1125,20 @@ namespace OpenRCT2
STR_FAHRENHEIT = 2367,
STR_FINANCES_BUTTON_ON_TOOLBAR = 5120,
STR_FINANCES_BUTTON_ON_TOOLBAR_TIP = 5838,
STR_FRAME_RATE_LIMIT_DEFAULT = 6771,
STR_FRAME_RATE_LIMIT_LABEL = 6770,
STR_FRAME_RATE_LIMIT_UNRESTRICTED = 6773,
STR_FRAME_RATE_LIMIT_VSYNC = 6772,
STR_FULLSCREEN_MODE = 5177,
STR_FULLSCREEN_MODE_TIP = 5855,
STR_GRIDLINES = 2363,
STR_GRIDLINES_TIP = 2364,
STR_GROUP_ADVANCED = 6765,
STR_GROUP_BEHAVIOUR = 6769,
STR_GROUP_RCT1 = 6763,
STR_GROUP_RENDERING = 6768,
STR_GROUP_SAVING = 6764,
STR_GROUP_WINDOW = 6767,
STR_HARDWARE_GROUP = 5476,
STR_HEIGHT_IN_UNITS = 2358,
STR_HEIGHT_LABELS = 2331,

View File

@@ -92,7 +92,7 @@ namespace OpenRCT2::Ui::Windows
WIDX_PAGE_START,
// Display
WIDX_HARDWARE_GROUP = WIDX_PAGE_START,
WIDX_WINDOW_GROUP = WIDX_PAGE_START,
WIDX_FULLSCREEN_LABEL,
WIDX_FULLSCREEN,
WIDX_FULLSCREEN_DROPDOWN,
@@ -103,19 +103,24 @@ namespace OpenRCT2::Ui::Windows
WIDX_SCALE,
WIDX_SCALE_UP,
WIDX_SCALE_DOWN,
WIDX_RENDERING_GROUP,
WIDX_DRAWING_ENGINE_LABEL,
WIDX_DRAWING_ENGINE,
WIDX_DRAWING_ENGINE_DROPDOWN,
WIDX_STEAM_OVERLAY_PAUSE,
WIDX_UNCAP_FPS_CHECKBOX,
WIDX_FRAME_RATE_LIMIT_LABEL,
WIDX_FRAME_RATE_LIMIT,
WIDX_FRAME_RATE_LIMIT_DROPDOWN,
WIDX_SHOW_FPS_CHECKBOX,
WIDX_MULTITHREADING_CHECKBOX,
WIDX_USE_VSYNC_CHECKBOX,
WIDX_BEHAVIOUR_GROUP,
WIDX_STEAM_OVERLAY_PAUSE,
WIDX_MINIMIZE_FOCUS_LOSS,
WIDX_DISABLE_SCREENSAVER_LOCK,
// Rendering
WIDX_RENDERING_GROUP = WIDX_PAGE_START,
// Map rendering
WIDX_MAP_RENDERING_GROUP = WIDX_PAGE_START,
WIDX_TILE_SMOOTHING_CHECKBOX,
WIDX_GRIDLINES_CHECKBOX,
WIDX_UPPER_CASE_BANNERS_CHECKBOX,
@@ -261,7 +266,7 @@ namespace OpenRCT2::Ui::Windows
static constexpr Widget window_options_display_widgets[] = {
MAIN_OPTIONS_WIDGETS,
MakeWidget ({ 5, 53}, {300, 170}, WindowWidgetType::Groupbox, WindowColour::Secondary, STR_HARDWARE_GROUP ), // Hardware group
MakeWidget ({ 5, 53}, {300, 64}, WindowWidgetType::Groupbox, WindowColour::Secondary, STR_GROUP_WINDOW ), // Window group
MakeWidget ({ 10, 67}, {145, 12}, WindowWidgetType::Label, WindowColour::Secondary, STR_FULLSCREEN_MODE, STR_FULLSCREEN_MODE_TIP ), // Fullscreen
MakeWidget ({155, 68}, {145, 12}, WindowWidgetType::DropdownMenu, WindowColour::Secondary ),
MakeWidget ({288, 69}, { 11, 10}, WindowWidgetType::Button, WindowColour::Secondary, STR_DROPDOWN_GLYPH, STR_FULLSCREEN_MODE_TIP ),
@@ -269,17 +274,22 @@ namespace OpenRCT2::Ui::Windows
MakeWidget ({155, 83}, {145, 12}, WindowWidgetType::DropdownMenu, WindowColour::Secondary, STR_ARG_16_RESOLUTION_X_BY_Y ),
MakeWidget ({288, 84}, { 11, 10}, WindowWidgetType::Button, WindowColour::Secondary, STR_DROPDOWN_GLYPH, STR_DISPLAY_RESOLUTION_TIP ),
MakeWidget ({ 10, 98}, {145, 12}, WindowWidgetType::Label, WindowColour::Secondary, STR_UI_SCALING_DESC, STR_WINDOW_SCALE_TIP ), // Scale
MakeSpinnerWidgets({155, 98}, {145, 12}, WindowWidgetType::Spinner, WindowColour::Secondary, kStringIdNone, STR_WINDOW_SCALE_TIP ), // Scale spinner (3 widgets)
MakeWidget ({ 10, 113}, {145, 12}, WindowWidgetType::Label, WindowColour::Secondary, STR_DRAWING_ENGINE, STR_DRAWING_ENGINE_TIP ), // Drawing engine
MakeWidget ({155, 113}, {145, 12}, WindowWidgetType::DropdownMenu, WindowColour::Secondary ), // Drawing engine
MakeWidget ({288, 114}, { 11, 10}, WindowWidgetType::Button, WindowColour::Secondary, STR_DROPDOWN_GLYPH, STR_DRAWING_ENGINE_TIP ),
MakeWidget ({ 11, 144}, {280, 12}, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_STEAM_OVERLAY_PAUSE, STR_STEAM_OVERLAY_PAUSE_TIP ), // Pause on steam overlay
MakeWidget ({ 11, 161}, {143, 12}, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_UNCAP_FPS, STR_UNCAP_FPS_TIP ), // Uncap fps
MakeWidget ({155, 161}, {136, 12}, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_SHOW_FPS, STR_SHOW_FPS_TIP ), // Show fps
MakeWidget ({155, 176}, {136, 12}, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_MULTITHREADING, STR_MULTITHREADING_TIP ), // Multithreading
MakeWidget ({ 11, 176}, {143, 12}, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_USE_VSYNC, STR_USE_VSYNC_TIP ), // Use vsync
MakeWidget ({ 11, 191}, {280, 12}, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_MINIMISE_FULLSCREEN_ON_FOCUS_LOSS, STR_MINIMISE_FULLSCREEN_ON_FOCUS_LOSS_TIP), // Minimise fullscreen focus loss
MakeWidget ({ 11, 206}, {280, 12}, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_DISABLE_SCREENSAVER, STR_DISABLE_SCREENSAVER_TIP ), // Disable screensaver
MakeSpinnerWidgets({155, 98}, {145, 12}, WindowWidgetType::Spinner, WindowColour::Secondary, kStringIdNone, STR_WINDOW_SCALE_TIP ), // Scale spinner (3 widgets)
MakeWidget ({ 5, 121}, {300, 64}, WindowWidgetType::Groupbox, WindowColour::Secondary, STR_GROUP_RENDERING ), // Rendering group
MakeWidget ({ 10, 135}, {145, 12}, WindowWidgetType::Label, WindowColour::Secondary, STR_DRAWING_ENGINE, STR_DRAWING_ENGINE_TIP ), // Drawing engine (label)
MakeWidget ({155, 135}, {145, 12}, WindowWidgetType::DropdownMenu, WindowColour::Secondary ), // Drawing engine (dropdown label)
MakeWidget ({288, 136}, { 11, 10}, WindowWidgetType::Button, WindowColour::Secondary, STR_DROPDOWN_GLYPH, STR_DRAWING_ENGINE_TIP ), // Drawing engine (chevron)
MakeWidget ({ 10, 150}, {145, 12}, WindowWidgetType::Label, WindowColour::Secondary, STR_FRAME_RATE_LIMIT_LABEL ), // Frame rate limit (label)
MakeWidget ({155, 150}, {145, 12}, WindowWidgetType::DropdownMenu, WindowColour::Secondary ), // Frame rate limit (dropdown label)
MakeWidget ({288, 151}, { 11, 10}, WindowWidgetType::Button, WindowColour::Secondary, STR_DROPDOWN_GLYPH ), // Frame rate limit (chevron)
MakeWidget ({ 10, 166}, {136, 12}, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_SHOW_FPS, STR_SHOW_FPS_TIP ), // Show fps
MakeWidget ({155, 166}, {136, 12}, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_MULTITHREADING, STR_MULTITHREADING_TIP ), // Multithreading
MakeWidget ({ 5, 188}, {300, 64}, WindowWidgetType::Groupbox, WindowColour::Secondary, STR_GROUP_BEHAVIOUR ), // Behaviour group
MakeWidget ({ 11, 203}, {280, 12}, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_STEAM_OVERLAY_PAUSE, STR_STEAM_OVERLAY_PAUSE_TIP ), // Pause on steam overlay
MakeWidget ({ 11, 218}, {280, 12}, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_MINIMISE_FULLSCREEN_ON_FOCUS_LOSS, STR_MINIMISE_FULLSCREEN_ON_FOCUS_LOSS_TIP), // Minimise fullscreen focus loss
MakeWidget ({ 11, 233}, {280, 12}, WindowWidgetType::Checkbox, WindowColour::Secondary, STR_DISABLE_SCREENSAVER, STR_DISABLE_SCREENSAVER_TIP ), // Disable screensaver
};
constexpr int32_t kFrameRenderingStart = 53;
@@ -739,18 +749,6 @@ namespace OpenRCT2::Ui::Windows
{
switch (widgetIndex)
{
case WIDX_UNCAP_FPS_CHECKBOX:
Config::Get().general.UncapFPS ^= 1;
DrawingEngineSetVSync(Config::Get().general.UseVSync);
Config::Save();
Invalidate();
break;
case WIDX_USE_VSYNC_CHECKBOX:
Config::Get().general.UseVSync ^= 1;
DrawingEngineSetVSync(Config::Get().general.UseVSync);
Config::Save();
Invalidate();
break;
case WIDX_SHOW_FPS_CHECKBOX:
Config::Get().general.ShowFPS ^= 1;
Config::Save();
@@ -857,6 +855,27 @@ namespace OpenRCT2::Ui::Windows
ContextTriggerResize();
ContextUpdateCursorScale();
break;
case WIDX_FRAME_RATE_LIMIT_DROPDOWN:
{
gDropdownItems[0].Format = STR_DROPDOWN_MENU_LABEL;
gDropdownItems[1].Format = STR_DROPDOWN_MENU_LABEL;
gDropdownItems[2].Format = STR_DROPDOWN_MENU_LABEL;
gDropdownItems[0].Args = STR_FRAME_RATE_LIMIT_DEFAULT;
gDropdownItems[1].Args = STR_FRAME_RATE_LIMIT_VSYNC;
gDropdownItems[2].Args = STR_FRAME_RATE_LIMIT_UNRESTRICTED;
ShowDropdown(widget, 3);
auto& config = Config::Get().general;
auto activeItem = 0;
if (config.UncapFPS)
{
activeItem = config.UseVSync ? 1 : 2;
}
Dropdown::SetChecked(activeItem, true);
break;
}
}
}
@@ -882,8 +901,8 @@ namespace OpenRCT2::Ui::Windows
Config::Save();
GfxInvalidateScreen();
}
break;
}
break;
case WIDX_FULLSCREEN_DROPDOWN:
if (dropdownIndex != Config::Get().general.FullscreenMode)
{
@@ -905,6 +924,30 @@ namespace OpenRCT2::Ui::Windows
Invalidate();
}
break;
case WIDX_FRAME_RATE_LIMIT_DROPDOWN:
{
auto& config = Config::Get().general;
switch (dropdownIndex)
{
case 0: // vanilla
config.UncapFPS = 0;
config.UseVSync = 0;
break;
case 1: // vsync
config.UncapFPS = 1;
config.UseVSync = 1;
break;
case 2: // uncapped
config.UncapFPS = 1;
config.UseVSync = 0;
break;
}
DrawingEngineSetVSync(config.UseVSync);
Config::Save();
Invalidate();
break;
}
}
}
@@ -930,8 +973,6 @@ namespace OpenRCT2::Ui::Windows
disabled_widgets &= ~(1uLL << WIDX_RESOLUTION_LABEL);
}
SetCheckboxValue(WIDX_UNCAP_FPS_CHECKBOX, Config::Get().general.UncapFPS);
SetCheckboxValue(WIDX_USE_VSYNC_CHECKBOX, Config::Get().general.UseVSync);
SetCheckboxValue(WIDX_SHOW_FPS_CHECKBOX, Config::Get().general.ShowFPS);
SetCheckboxValue(WIDX_MULTITHREADING_CHECKBOX, Config::Get().general.MultiThreading);
SetCheckboxValue(WIDX_MINIMIZE_FOCUS_LOSS, Config::Get().general.MinimizeFullscreenFocusLoss);
@@ -941,6 +982,20 @@ namespace OpenRCT2::Ui::Windows
// Dropdown captions for straightforward strings.
widgets[WIDX_FULLSCREEN].text = FullscreenModeNames[Config::Get().general.FullscreenMode];
widgets[WIDX_DRAWING_ENGINE].text = kDrawingEngineStringIds[EnumValue(Config::Get().general.DrawingEngine)];
static constexpr StringId kFrameRateLimitStringIds[] = {
STR_FRAME_RATE_LIMIT_DEFAULT,
STR_FRAME_RATE_LIMIT_VSYNC,
STR_FRAME_RATE_LIMIT_UNRESTRICTED,
};
auto& config = Config::Get().general;
auto activeItem = 0;
if (config.UncapFPS)
{
activeItem = config.UseVSync ? 1 : 2;
}
widgets[WIDX_FRAME_RATE_LIMIT].text = kFrameRateLimitStringIds[activeItem];
}
void DisplayDraw(RenderTarget& rt)