1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2025-12-11 01:52:32 +01:00

Split 'controls and interface' tab into two tabs

This commit is contained in:
Aaron van Geffen
2025-04-18 16:40:38 +02:00
parent 614d0d6d9d
commit ae16743b52
4 changed files with 120 additions and 82 deletions

View File

@@ -2510,7 +2510,7 @@ STR_5265 :Select which content sources are visible
STR_5266 :Display
STR_5267 :Culture and Units
STR_5268 :Audio
STR_5269 :Controls and interface
STR_5269 :Controls
STR_5270 :Miscellaneous
STR_5272 :Small Scenery
STR_5273 :Large Scenery
@@ -3806,3 +3806,4 @@ STR_6758 :Loan options
STR_6759 :Business model
STR_6760 :Earnings:
STR_6761 :Scenario Details
STR_6762 :Interface

View File

@@ -12,6 +12,7 @@
- Change: [#24069] [Plugin] Plugins are now available in the scenario editor and track designer.
- Change: [#24135] Compress Emscripten js/wasm files.
- Change: [#24235] Small changes to RCT1 theme.
- Change: [#24236] Controls and Interface options now both have their own tabs in the Options window.
- Change: [#24308] “Software” and “Software (hardware display)” renderers have been merged into a single “Software” renderer.
- Fix: [#19782] Game stops counting inversions and golf holes after 31 (original bug).
- Fix: [#21207] Track List window gets positioned incorrectly.

View File

@@ -1152,12 +1152,13 @@ namespace OpenRCT2
STR_OPTIONS_ADVANCED = 6167,
STR_OPTIONS_AUDIO_TIP = 5268,
STR_OPTIONS_AUTOSAVE_FREQUENCY_LABEL = 2700,
STR_OPTIONS_CONTROLS_AND_INTERFACE_TIP = 5269,
STR_OPTIONS_CONTROLS_TIP = 5269,
STR_OPTIONS_CULTURE_TIP = 5267,
STR_OPTIONS_DISPLAY_FULLSCREEN = 2774,
STR_OPTIONS_DISPLAY_FULLSCREEN_BORDERLESS = 2775,
STR_OPTIONS_DISPLAY_TIP = 5266,
STR_OPTIONS_DISPLAY_WINDOWED = 2773,
STR_OPTIONS_INTERFACE_TIP = 6762,
STR_OPTIONS_LANGUAGE = 2776,
STR_OPTIONS_MISCELLANEOUS_TIP = 5270,
STR_OPTIONS_MUSIC_LABEL = 2738,

View File

@@ -64,7 +64,8 @@ namespace OpenRCT2::Ui::Windows
WINDOW_OPTIONS_PAGE_RENDERING,
WINDOW_OPTIONS_PAGE_CULTURE,
WINDOW_OPTIONS_PAGE_AUDIO,
WINDOW_OPTIONS_PAGE_CONTROLS_AND_INTERFACE,
WINDOW_OPTIONS_PAGE_INTERFACE,
WINDOW_OPTIONS_PAGE_CONTROLS,
WINDOW_OPTIONS_PAGE_MISC,
WINDOW_OPTIONS_PAGE_ADVANCED,
WINDOW_OPTIONS_PAGE_COUNT
@@ -83,7 +84,8 @@ namespace OpenRCT2::Ui::Windows
WIDX_TAB_RENDERING,
WIDX_TAB_CULTURE,
WIDX_TAB_AUDIO,
WIDX_TAB_CONTROLS_AND_INTERFACE,
WIDX_TAB_INTERFACE,
WIDX_TAB_CONTROLS,
WIDX_TAB_MISC,
WIDX_TAB_ADVANCED,
@@ -163,17 +165,8 @@ namespace OpenRCT2::Ui::Windows
WIDX_SOUND_VOLUME,
WIDX_MUSIC_VOLUME,
// Controls and interface
WIDX_CONTROLS_GROUP = WIDX_PAGE_START,
WIDX_SCREEN_EDGE_SCROLLING,
WIDX_TRAP_CURSOR,
WIDX_INVERT_DRAG,
WIDX_ZOOM_TO_CURSOR,
WIDX_WINDOW_BUTTONS_ON_THE_LEFT,
WIDX_ENLARGED_UI,
WIDX_TOUCH_ENHANCEMENTS,
WIDX_HOTKEY_DROPDOWN,
WIDX_THEMES_GROUP,
// Interface
WIDX_THEMES_GROUP = WIDX_PAGE_START,
WIDX_THEMES_LABEL,
WIDX_THEMES,
WIDX_THEMES_DROPDOWN,
@@ -190,6 +183,17 @@ namespace OpenRCT2::Ui::Windows
WIDX_TOOLBAR_SHOW_ZOOM,
WIDX_TOOLBAR_SHOW_ROTATE_ANTI_CLOCKWISE,
// Controls
WIDX_CONTROLS_GROUP = WIDX_PAGE_START,
WIDX_SCREEN_EDGE_SCROLLING,
WIDX_TRAP_CURSOR,
WIDX_INVERT_DRAG,
WIDX_ZOOM_TO_CURSOR,
WIDX_WINDOW_BUTTONS_ON_THE_LEFT,
WIDX_ENLARGED_UI,
WIDX_TOUCH_ENHANCEMENTS,
WIDX_HOTKEY_DROPDOWN,
// Misc
WIDX_TITLE_SEQUENCE_GROUP = WIDX_PAGE_START,
WIDX_TITLE_SEQUENCE,
@@ -244,9 +248,10 @@ namespace OpenRCT2::Ui::Windows
MakeTab({ 34, 17 }, STR_OPTIONS_RENDERING_TIP), \
MakeTab({ 65, 17 }, STR_OPTIONS_CULTURE_TIP), \
MakeTab({ 96, 17 }, STR_OPTIONS_AUDIO_TIP), \
MakeTab({ 127, 17 }, STR_OPTIONS_CONTROLS_AND_INTERFACE_TIP), \
MakeTab({ 158, 17 }, STR_OPTIONS_MISCELLANEOUS_TIP), \
MakeTab({ 189, 17 }, STR_OPTIONS_ADVANCED)
MakeTab({ 127, 17 }, STR_OPTIONS_INTERFACE_TIP), \
MakeTab({ 158, 17 }, STR_OPTIONS_CONTROLS_TIP), \
MakeTab({ 189, 17 }, STR_OPTIONS_MISCELLANEOUS_TIP), \
MakeTab({ 220, 17 }, STR_OPTIONS_ADVANCED)
static constexpr Widget window_options_display_widgets[] = {
MAIN_OPTIONS_WIDGETS,
@@ -333,10 +338,8 @@ namespace OpenRCT2::Ui::Windows
};
constexpr int32_t kControlsGroupStart = 53;
constexpr int32_t kThemesGroupStart = 193;
constexpr int32_t kToolbarGroupStart = 245;
static constexpr Widget window_options_controls_and_interface_widgets[] = {
static constexpr Widget window_options_controls_widgets[] = {
MAIN_OPTIONS_WIDGETS,
MakeWidget({ 5, kControlsGroupStart + 0}, {300,137}, WindowWidgetType::Groupbox, WindowColour::Secondary, STR_CONTROLS_GROUP ), // Controls group
MakeWidget({ 10, kControlsGroupStart + 13}, {290, 14}, WindowWidgetType::Checkbox, WindowColour::Tertiary , STR_SCREEN_EDGE_SCROLLING, STR_SCREEN_EDGE_SCROLLING_TIP ), // Edge scrolling
@@ -347,7 +350,13 @@ namespace OpenRCT2::Ui::Windows
MakeWidget({ 10, kControlsGroupStart + 90}, {290, 12}, WindowWidgetType::Checkbox, WindowColour::Tertiary, STR_ENLARGED_UI, STR_ENLARGED_UI_TIP ),
MakeWidget({ 25, kControlsGroupStart + 105}, {275, 12}, WindowWidgetType::Checkbox, WindowColour::Tertiary, STR_TOUCH_ENHANCEMENTS, STR_TOUCH_ENHANCEMENTS_TIP ),
MakeWidget({155, kControlsGroupStart + 120}, {145, 13}, WindowWidgetType::Button, WindowColour::Secondary, STR_HOTKEY, STR_HOTKEY_TIP ), // Set hotkeys buttons
};
constexpr int32_t kThemesGroupStart = 53;
constexpr int32_t kToolbarGroupStart = kThemesGroupStart + 52;
static constexpr Widget window_options_interface_widgets[] = {
MAIN_OPTIONS_WIDGETS,
MakeWidget({ 5, kThemesGroupStart + 0}, {300, 48}, WindowWidgetType::Groupbox, WindowColour::Secondary, STR_THEMES_GROUP ), // Themes group
MakeWidget({ 10, kThemesGroupStart + 14}, {145, 12}, WindowWidgetType::Label, WindowColour::Secondary, STR_THEMES_LABEL_CURRENT_THEME, STR_CURRENT_THEME_TIP ), // Themes
MakeWidget({155, kThemesGroupStart + 14}, {145, 12}, WindowWidgetType::DropdownMenu, WindowColour::Secondary, STR_STRING ),
@@ -422,7 +431,8 @@ namespace OpenRCT2::Ui::Windows
window_options_rendering_widgets,
window_options_culture_widgets,
window_options_audio_widgets,
window_options_controls_and_interface_widgets,
window_options_interface_widgets,
window_options_controls_widgets,
window_options_misc_widgets,
window_options_advanced_widgets,
};
@@ -462,9 +472,12 @@ namespace OpenRCT2::Ui::Windows
case WINDOW_OPTIONS_PAGE_AUDIO:
AudioMouseUp(widgetIndex);
break;
case WINDOW_OPTIONS_PAGE_CONTROLS_AND_INTERFACE:
case WINDOW_OPTIONS_PAGE_CONTROLS:
ControlsMouseUp(widgetIndex);
break;
case WINDOW_OPTIONS_PAGE_INTERFACE:
InterfaceMouseUp(widgetIndex);
break;
case WINDOW_OPTIONS_PAGE_MISC:
MiscMouseUp(widgetIndex);
break;
@@ -494,8 +507,8 @@ namespace OpenRCT2::Ui::Windows
case WINDOW_OPTIONS_PAGE_AUDIO:
AudioMouseDown(widgetIndex);
break;
case WINDOW_OPTIONS_PAGE_CONTROLS_AND_INTERFACE:
ControlsMouseDown(widgetIndex);
case WINDOW_OPTIONS_PAGE_INTERFACE:
InterfaceMouseDown(widgetIndex);
break;
case WINDOW_OPTIONS_PAGE_MISC:
MiscMouseDown(widgetIndex);
@@ -527,8 +540,8 @@ namespace OpenRCT2::Ui::Windows
case WINDOW_OPTIONS_PAGE_AUDIO:
AudioDropdown(widgetIndex, dropdownIndex);
break;
case WINDOW_OPTIONS_PAGE_CONTROLS_AND_INTERFACE:
ControlsDropdown(widgetIndex, dropdownIndex);
case WINDOW_OPTIONS_PAGE_INTERFACE:
InterfaceDropdown(widgetIndex, dropdownIndex);
break;
case WINDOW_OPTIONS_PAGE_MISC:
MiscDropdown(widgetIndex, dropdownIndex);
@@ -559,9 +572,12 @@ namespace OpenRCT2::Ui::Windows
case WINDOW_OPTIONS_PAGE_AUDIO:
AudioPrepareDraw();
break;
case WINDOW_OPTIONS_PAGE_CONTROLS_AND_INTERFACE:
case WINDOW_OPTIONS_PAGE_CONTROLS:
ControlsPrepareDraw();
break;
case WINDOW_OPTIONS_PAGE_INTERFACE:
InterfacePrepareDraw();
break;
case WINDOW_OPTIONS_PAGE_MISC:
MiscPrepareDraw();
break;
@@ -605,7 +621,7 @@ namespace OpenRCT2::Ui::Windows
case WINDOW_OPTIONS_PAGE_DISPLAY:
case WINDOW_OPTIONS_PAGE_RENDERING:
case WINDOW_OPTIONS_PAGE_CULTURE:
case WINDOW_OPTIONS_PAGE_CONTROLS_AND_INTERFACE:
case WINDOW_OPTIONS_PAGE_CONTROLS:
case WINDOW_OPTIONS_PAGE_MISC:
case WINDOW_OPTIONS_PAGE_ADVANCED:
default:
@@ -622,7 +638,7 @@ namespace OpenRCT2::Ui::Windows
case WINDOW_OPTIONS_PAGE_DISPLAY:
case WINDOW_OPTIONS_PAGE_RENDERING:
case WINDOW_OPTIONS_PAGE_CULTURE:
case WINDOW_OPTIONS_PAGE_CONTROLS_AND_INTERFACE:
case WINDOW_OPTIONS_PAGE_CONTROLS:
case WINDOW_OPTIONS_PAGE_MISC:
case WINDOW_OPTIONS_PAGE_ADVANCED:
default:
@@ -651,7 +667,8 @@ namespace OpenRCT2::Ui::Windows
case WIDX_TAB_RENDERING:
case WIDX_TAB_CULTURE:
case WIDX_TAB_AUDIO:
case WIDX_TAB_CONTROLS_AND_INTERFACE:
case WIDX_TAB_CONTROLS:
case WIDX_TAB_INTERFACE:
case WIDX_TAB_MISC:
case WIDX_TAB_ADVANCED:
SetPage(widgetIndex - WIDX_FIRST_TAB);
@@ -1527,15 +1544,6 @@ namespace OpenRCT2::Ui::Windows
#pragma endregion
#pragma region Controls tab events
void ToggleToolbarSetting(bool& setting)
{
setting ^= true;
Config::Save();
Invalidate();
auto* windowMgr = Ui::GetWindowManager();
windowMgr->InvalidateByClass(WindowClass::TopToolbar);
}
void ControlsMouseUp(WidgetIndex widgetIndex)
{
@@ -1562,33 +1570,6 @@ namespace OpenRCT2::Ui::Windows
Config::Save();
Invalidate();
break;
case WIDX_TOOLBAR_BUTTONS_CENTRED:
ToggleToolbarSetting(Config::Get().interface.ToolbarButtonsCentred);
break;
case WIDX_TOOLBAR_SHOW_FINANCES:
ToggleToolbarSetting(Config::Get().interface.ToolbarShowFinances);
break;
case WIDX_TOOLBAR_SHOW_RESEARCH:
ToggleToolbarSetting(Config::Get().interface.ToolbarShowResearch);
break;
case WIDX_TOOLBAR_SHOW_CHEATS:
ToggleToolbarSetting(Config::Get().interface.ToolbarShowCheats);
break;
case WIDX_TOOLBAR_SHOW_NEWS:
ToggleToolbarSetting(Config::Get().interface.ToolbarShowNews);
break;
case WIDX_TOOLBAR_SHOW_MUTE:
ToggleToolbarSetting(Config::Get().interface.ToolbarShowMute);
break;
case WIDX_TOOLBAR_SHOW_CHAT:
ToggleToolbarSetting(Config::Get().interface.ToolbarShowChat);
break;
case WIDX_TOOLBAR_SHOW_ZOOM:
ToggleToolbarSetting(Config::Get().interface.ToolbarShowZoom);
break;
case WIDX_TOOLBAR_SHOW_ROTATE_ANTI_CLOCKWISE:
ToggleToolbarSetting(Config::Get().interface.ToolbarShowRotateAnticlockwise);
break;
case WIDX_WINDOW_BUTTONS_ON_THE_LEFT:
Config::Get().interface.WindowButtonsOnTheLeft ^= 1;
Config::Save();
@@ -1616,6 +1597,66 @@ namespace OpenRCT2::Ui::Windows
Config::Save();
Invalidate();
break;
}
}
void ControlsPrepareDraw()
{
SetCheckboxValue(WIDX_SCREEN_EDGE_SCROLLING, Config::Get().general.EdgeScrolling);
SetCheckboxValue(WIDX_TRAP_CURSOR, Config::Get().general.TrapCursor);
SetCheckboxValue(WIDX_INVERT_DRAG, Config::Get().general.InvertViewportDrag);
SetCheckboxValue(WIDX_ZOOM_TO_CURSOR, Config::Get().general.ZoomToCursor);
SetCheckboxValue(WIDX_WINDOW_BUTTONS_ON_THE_LEFT, Config::Get().interface.WindowButtonsOnTheLeft);
SetCheckboxValue(WIDX_ENLARGED_UI, Config::Get().interface.EnlargedUi);
SetCheckboxValue(WIDX_TOUCH_ENHANCEMENTS, Config::Get().interface.TouchEnhancements);
WidgetSetEnabled(*this, WIDX_TOUCH_ENHANCEMENTS, Config::Get().interface.EnlargedUi);
}
#pragma endregion
#pragma region Interface tab events
void ToggleToolbarSetting(bool& setting)
{
setting ^= true;
Config::Save();
Invalidate();
auto* windowMgr = Ui::GetWindowManager();
windowMgr->InvalidateByClass(WindowClass::TopToolbar);
}
void InterfaceMouseUp(WidgetIndex widgetIndex)
{
switch (widgetIndex)
{
case WIDX_TOOLBAR_BUTTONS_CENTRED:
ToggleToolbarSetting(Config::Get().interface.ToolbarButtonsCentred);
break;
case WIDX_TOOLBAR_SHOW_FINANCES:
ToggleToolbarSetting(Config::Get().interface.ToolbarShowFinances);
break;
case WIDX_TOOLBAR_SHOW_RESEARCH:
ToggleToolbarSetting(Config::Get().interface.ToolbarShowResearch);
break;
case WIDX_TOOLBAR_SHOW_CHEATS:
ToggleToolbarSetting(Config::Get().interface.ToolbarShowCheats);
break;
case WIDX_TOOLBAR_SHOW_NEWS:
ToggleToolbarSetting(Config::Get().interface.ToolbarShowNews);
break;
case WIDX_TOOLBAR_SHOW_MUTE:
ToggleToolbarSetting(Config::Get().interface.ToolbarShowMute);
break;
case WIDX_TOOLBAR_SHOW_CHAT:
ToggleToolbarSetting(Config::Get().interface.ToolbarShowChat);
break;
case WIDX_TOOLBAR_SHOW_ZOOM:
ToggleToolbarSetting(Config::Get().interface.ToolbarShowZoom);
break;
case WIDX_TOOLBAR_SHOW_ROTATE_ANTI_CLOCKWISE:
ToggleToolbarSetting(Config::Get().interface.ToolbarShowRotateAnticlockwise);
break;
case WIDX_THEMES_BUTTON:
ContextOpenWindow(WindowClass::Themes);
Invalidate();
@@ -1623,7 +1664,7 @@ namespace OpenRCT2::Ui::Windows
}
}
void ControlsMouseDown(WidgetIndex widgetIndex)
void InterfaceMouseDown(WidgetIndex widgetIndex)
{
Widget* widget = &widgets[widgetIndex - 1];
@@ -1648,7 +1689,7 @@ namespace OpenRCT2::Ui::Windows
}
}
void ControlsDropdown(WidgetIndex widgetIndex, int32_t dropdownIndex)
void InterfaceDropdown(WidgetIndex widgetIndex, int32_t dropdownIndex)
{
switch (widgetIndex)
{
@@ -1662,12 +1703,8 @@ namespace OpenRCT2::Ui::Windows
}
}
void ControlsPrepareDraw()
void InterfacePrepareDraw()
{
SetCheckboxValue(WIDX_SCREEN_EDGE_SCROLLING, Config::Get().general.EdgeScrolling);
SetCheckboxValue(WIDX_TRAP_CURSOR, Config::Get().general.TrapCursor);
SetCheckboxValue(WIDX_INVERT_DRAG, Config::Get().general.InvertViewportDrag);
SetCheckboxValue(WIDX_ZOOM_TO_CURSOR, Config::Get().general.ZoomToCursor);
SetCheckboxValue(WIDX_TOOLBAR_BUTTONS_CENTRED, Config::Get().interface.ToolbarButtonsCentred);
SetCheckboxValue(WIDX_TOOLBAR_SHOW_FINANCES, Config::Get().interface.ToolbarShowFinances);
SetCheckboxValue(WIDX_TOOLBAR_SHOW_RESEARCH, Config::Get().interface.ToolbarShowResearch);
@@ -1677,11 +1714,6 @@ namespace OpenRCT2::Ui::Windows
SetCheckboxValue(WIDX_TOOLBAR_SHOW_CHAT, Config::Get().interface.ToolbarShowChat);
SetCheckboxValue(WIDX_TOOLBAR_SHOW_ZOOM, Config::Get().interface.ToolbarShowZoom);
SetCheckboxValue(WIDX_TOOLBAR_SHOW_ROTATE_ANTI_CLOCKWISE, Config::Get().interface.ToolbarShowRotateAnticlockwise);
SetCheckboxValue(WIDX_WINDOW_BUTTONS_ON_THE_LEFT, Config::Get().interface.WindowButtonsOnTheLeft);
SetCheckboxValue(WIDX_ENLARGED_UI, Config::Get().interface.EnlargedUi);
SetCheckboxValue(WIDX_TOUCH_ENHANCEMENTS, Config::Get().interface.TouchEnhancements);
WidgetSetEnabled(*this, WIDX_TOUCH_ENHANCEMENTS, Config::Get().interface.EnlargedUi);
size_t activeAvailableThemeIndex = ThemeManagerGetAvailableThemeIndex();
const utf8* activeThemeName = ThemeManagerGetAvailableThemeName(activeAvailableThemeIndex);
@@ -2130,7 +2162,8 @@ namespace OpenRCT2::Ui::Windows
DrawTabImage(dpi, WINDOW_OPTIONS_PAGE_RENDERING, SPR_G2_TAB_TREE);
DrawTabImage(dpi, WINDOW_OPTIONS_PAGE_CULTURE, SPR_TAB_TIMER_0);
DrawTabImage(dpi, WINDOW_OPTIONS_PAGE_AUDIO, SPR_TAB_MUSIC_0);
DrawTabImage(dpi, WINDOW_OPTIONS_PAGE_CONTROLS_AND_INTERFACE, SPR_TAB_GEARS_0);
DrawTabImage(dpi, WINDOW_OPTIONS_PAGE_INTERFACE, SPR_TAB_PAINT_0);
DrawTabImage(dpi, WINDOW_OPTIONS_PAGE_CONTROLS, SPR_TAB_GEARS_0);
DrawTabImage(dpi, WINDOW_OPTIONS_PAGE_MISC, SPR_TAB_RIDE_0);
DrawTabImage(dpi, WINDOW_OPTIONS_PAGE_ADVANCED, SPR_TAB_WRENCH_0);
}
@@ -2225,7 +2258,8 @@ namespace OpenRCT2::Ui::Windows
1, // WINDOW_OPTIONS_PAGE_RENDERING,
8, // WINDOW_OPTIONS_PAGE_CULTURE,
2, // WINDOW_OPTIONS_PAGE_AUDIO,
2, // WINDOW_OPTIONS_PAGE_CONTROLS_AND_INTERFACE,
4, // WINDOW_OPTIONS_PAGE_INTERFACE,
2, // WINDOW_OPTIONS_PAGE_CONTROLS,
4, // WINDOW_OPTIONS_PAGE_MISC,
2, // WINDOW_OPTIONS_PAGE_ADVANCED,
};
@@ -2235,7 +2269,8 @@ namespace OpenRCT2::Ui::Windows
1, // WINDOW_OPTIONS_PAGE_RENDERING,
8, // WINDOW_OPTIONS_PAGE_CULTURE,
16, // WINDOW_OPTIONS_PAGE_AUDIO,
4, // WINDOW_OPTIONS_PAGE_CONTROLS_AND_INTERFACE,
8, // WINDOW_OPTIONS_PAGE_INTERFACE,
4, // WINDOW_OPTIONS_PAGE_CONTROLS,
16, // WINDOW_OPTIONS_PAGE_MISC,
16, // WINDOW_OPTIONS_PAGE_ADVANCED,
};