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:
@@ -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
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user