diff --git a/data/language/en-GB.txt b/data/language/en-GB.txt index 7bc26d4c2c..2f9f6b2840 100644 --- a/data/language/en-GB.txt +++ b/data/language/en-GB.txt @@ -3794,3 +3794,4 @@ STR_6728 :Dive Loop (right) STR_6729 :Cable lift hill must start immediately after station or block brake STR_6730 :Export emscripten data STR_6731 :Import emscripten data +STR_6732 :Show a button in the toolbar to rotate the view anti-clockwise diff --git a/distribution/changelog.txt b/distribution/changelog.txt index 8d7e9e706d..f1dcb495dc 100644 --- a/distribution/changelog.txt +++ b/distribution/changelog.txt @@ -7,6 +7,7 @@ - Improved: [#23540] The file browser now optionally shows a file size column. - Improved: [#23640] Building sprite repository with command line can use images array of JSON parkobj. - Improved: [#23660] The ‘special elements’ dropdown has been reorganised, now using multiple columns and separators. +- Improved: [#23730] Added optional button to toolbar to rotate view anti-clockwise. - Change: [#23328] All RCT2 entertainer costumes are now available in legacy parks. - Fix: [#1479] Incorrect values provided by the in game console “get location” command. - Fix: [#21794] Lay-down coaster cars reverse on first frames of downwards corkscrew. diff --git a/resources/g2/icons/rotate_view_anti-clockwise.png b/resources/g2/icons/rotate_view_anti-clockwise.png new file mode 100644 index 0000000000..ce13b23d85 Binary files /dev/null and b/resources/g2/icons/rotate_view_anti-clockwise.png differ diff --git a/resources/g2/sprites.json b/resources/g2/sprites.json index b9842c0b7d..201f0062aa 100644 --- a/resources/g2/sprites.json +++ b/resources/g2/sprites.json @@ -39920,5 +39920,8 @@ "x": -32, "y": 15, "palette": "keep" + }, + { + "path": "icons/rotate_view_anti-clockwise.png" } ] diff --git a/src/openrct2-ui/UiStringIds.h b/src/openrct2-ui/UiStringIds.h index 17b476d976..13bac563a2 100644 --- a/src/openrct2-ui/UiStringIds.h +++ b/src/openrct2-ui/UiStringIds.h @@ -1192,6 +1192,7 @@ namespace OpenRCT2 STR_RIDE_MUSIC = 1777, STR_RIDE_MUSIC_TIP = 5854, STR_ROLLERCOASTER_TYCOON_1_DROPDOWN = 2740, + STR_ROTATE_VIEW_ANTI_CLOCKWISE_IN_TOOLBAR_TIP = 6732, STR_SAVE_EVERY_15MINUTES = 2703, STR_SAVE_EVERY_30MINUTES = 2704, STR_SAVE_EVERY_5MINUTES = 2702, diff --git a/src/openrct2-ui/windows/Options.cpp b/src/openrct2-ui/windows/Options.cpp index b09b47c240..6ca6ca8284 100644 --- a/src/openrct2-ui/windows/Options.cpp +++ b/src/openrct2-ui/windows/Options.cpp @@ -188,6 +188,7 @@ namespace OpenRCT2::Ui::Windows WIDX_TOOLBAR_SHOW_MUTE, WIDX_TOOLBAR_SHOW_CHAT, WIDX_TOOLBAR_SHOW_ZOOM, + WIDX_TOOLBAR_SHOW_ROTATE_ANTI_CLOCKWISE, // Misc WIDX_TITLE_SEQUENCE_GROUP = WIDX_PAGE_START, @@ -353,16 +354,17 @@ namespace OpenRCT2::Ui::Windows MakeWidget({288, kThemesGroupStart + 15}, { 11, 10}, WindowWidgetType::Button, WindowColour::Secondary, STR_DROPDOWN_GLYPH, STR_CURRENT_THEME_TIP ), MakeWidget({155, kThemesGroupStart + 30}, {145, 13}, WindowWidgetType::Button, WindowColour::Secondary, STR_EDIT_THEMES_BUTTON, STR_EDIT_THEMES_BUTTON_TIP), // Themes button - MakeWidget({ 5, kToolbarGroupStart + 0}, {300,107}, WindowWidgetType::Groupbox, WindowColour::Secondary, STR_TOOLBAR_BUTTONS_GROUP ), // Toolbar buttons group - MakeWidget({ 10, kToolbarGroupStart + 14}, {280, 12}, WindowWidgetType::Checkbox, WindowColour::Tertiary, STR_OPTIONS_TOOLBAR_BUTTONS_CENTRED, STR_OPTIONS_TOOLBAR_BUTTONS_CENTRED_TIP), - MakeWidget({ 10, kToolbarGroupStart + 31}, {280, 12}, WindowWidgetType::Label, WindowColour::Secondary, STR_SHOW_TOOLBAR_BUTTONS_FOR ), - MakeWidget({ 24, kToolbarGroupStart + 46}, {122, 12}, WindowWidgetType::Checkbox, WindowColour::Tertiary , STR_FINANCES_BUTTON_ON_TOOLBAR, STR_FINANCES_BUTTON_ON_TOOLBAR_TIP ), // Finances - MakeWidget({ 24, kToolbarGroupStart + 61}, {122, 12}, WindowWidgetType::Checkbox, WindowColour::Tertiary , STR_RESEARCH_BUTTON_ON_TOOLBAR, STR_RESEARCH_BUTTON_ON_TOOLBAR_TIP ), // Research - MakeWidget({155, kToolbarGroupStart + 46}, {145, 12}, WindowWidgetType::Checkbox, WindowColour::Tertiary , STR_CHEATS_BUTTON_ON_TOOLBAR, STR_CHEATS_BUTTON_ON_TOOLBAR_TIP ), // Cheats - MakeWidget({155, kToolbarGroupStart + 61}, {145, 12}, WindowWidgetType::Checkbox, WindowColour::Tertiary , STR_SHOW_RECENT_MESSAGES_ON_TOOLBAR, STR_SHOW_RECENT_MESSAGES_ON_TOOLBAR_TIP), // Recent messages - MakeWidget({ 24, kToolbarGroupStart + 76}, {162, 12}, WindowWidgetType::Checkbox, WindowColour::Tertiary , STR_MUTE_BUTTON_ON_TOOLBAR, STR_MUTE_BUTTON_ON_TOOLBAR_TIP ), // Mute - MakeWidget({155, kToolbarGroupStart + 76}, {145, 12}, WindowWidgetType::Checkbox, WindowColour::Tertiary , STR_CHAT_BUTTON_ON_TOOLBAR, STR_CHAT_BUTTON_ON_TOOLBAR_TIP ), // Chat - MakeWidget({ 24, kToolbarGroupStart + 91}, {122, 12}, WindowWidgetType::Checkbox, WindowColour::Tertiary , STR_ZOOM_BUTTON_ON_TOOLBAR, STR_ZOOM_BUTTON_ON_TOOLBAR_TIP ), // Zoom + MakeWidget({ 5, kToolbarGroupStart + 0}, {300,107}, WindowWidgetType::Groupbox, WindowColour::Secondary, STR_TOOLBAR_BUTTONS_GROUP ), // Toolbar buttons group + MakeWidget({ 10, kToolbarGroupStart + 14}, {280, 12}, WindowWidgetType::Checkbox, WindowColour::Tertiary, STR_OPTIONS_TOOLBAR_BUTTONS_CENTRED, STR_OPTIONS_TOOLBAR_BUTTONS_CENTRED_TIP ), + MakeWidget({ 10, kToolbarGroupStart + 31}, {280, 12}, WindowWidgetType::Label, WindowColour::Secondary, STR_SHOW_TOOLBAR_BUTTONS_FOR ), + MakeWidget({ 24, kToolbarGroupStart + 46}, {122, 12}, WindowWidgetType::Checkbox, WindowColour::Tertiary , STR_FINANCES_BUTTON_ON_TOOLBAR, STR_FINANCES_BUTTON_ON_TOOLBAR_TIP ), // Finances + MakeWidget({ 24, kToolbarGroupStart + 61}, {122, 12}, WindowWidgetType::Checkbox, WindowColour::Tertiary , STR_RESEARCH_BUTTON_ON_TOOLBAR, STR_RESEARCH_BUTTON_ON_TOOLBAR_TIP ), // Research + MakeWidget({155, kToolbarGroupStart + 46}, {145, 12}, WindowWidgetType::Checkbox, WindowColour::Tertiary , STR_CHEATS_BUTTON_ON_TOOLBAR, STR_CHEATS_BUTTON_ON_TOOLBAR_TIP ), // Cheats + MakeWidget({155, kToolbarGroupStart + 61}, {145, 12}, WindowWidgetType::Checkbox, WindowColour::Tertiary , STR_SHOW_RECENT_MESSAGES_ON_TOOLBAR, STR_SHOW_RECENT_MESSAGES_ON_TOOLBAR_TIP ), // Recent messages + MakeWidget({ 24, kToolbarGroupStart + 76}, {162, 12}, WindowWidgetType::Checkbox, WindowColour::Tertiary , STR_MUTE_BUTTON_ON_TOOLBAR, STR_MUTE_BUTTON_ON_TOOLBAR_TIP ), // Mute + MakeWidget({155, kToolbarGroupStart + 76}, {145, 12}, WindowWidgetType::Checkbox, WindowColour::Tertiary , STR_CHAT_BUTTON_ON_TOOLBAR, STR_CHAT_BUTTON_ON_TOOLBAR_TIP ), // Chat + MakeWidget({ 24, kToolbarGroupStart + 91}, {122, 12}, WindowWidgetType::Checkbox, WindowColour::Tertiary , STR_ZOOM_BUTTON_ON_TOOLBAR, STR_ZOOM_BUTTON_ON_TOOLBAR_TIP ), // Zoom + MakeWidget({155, kToolbarGroupStart + 91}, {145, 12}, WindowWidgetType::Checkbox, WindowColour::Tertiary , STR_ROTATE_ANTI_CLOCKWISE, STR_ROTATE_VIEW_ANTI_CLOCKWISE_IN_TOOLBAR_TIP), // Rotate anti-clockwise }; constexpr int32_t kTitleSequenceStart = 53; @@ -1600,6 +1602,9 @@ namespace OpenRCT2::Ui::Windows 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(); @@ -1685,6 +1690,7 @@ namespace OpenRCT2::Ui::Windows SetCheckboxValue(WIDX_TOOLBAR_SHOW_MUTE, Config::Get().interface.ToolbarShowMute); 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); diff --git a/src/openrct2-ui/windows/TopToolbar.cpp b/src/openrct2-ui/windows/TopToolbar.cpp index e88ecf3560..bd1aee883b 100644 --- a/src/openrct2-ui/windows/TopToolbar.cpp +++ b/src/openrct2-ui/windows/TopToolbar.cpp @@ -60,7 +60,8 @@ namespace OpenRCT2::Ui::Windows WIDX_MUTE, WIDX_ZOOM_OUT, WIDX_ZOOM_IN, - WIDX_ROTATE, + WIDX_ROTATE_ANTI_CLOCKWISE, + WIDX_ROTATE_CLOCKWISE, WIDX_VIEW_MENU, WIDX_MAP, @@ -196,7 +197,8 @@ namespace OpenRCT2::Ui::Windows WIDX_ZOOM_OUT, WIDX_ZOOM_IN, - WIDX_ROTATE, + WIDX_ROTATE_ANTI_CLOCKWISE, + WIDX_ROTATE_CLOCKWISE, WIDX_VIEW_MENU, WIDX_MAP, }; @@ -241,17 +243,18 @@ namespace OpenRCT2::Ui::Windows MakeRemapWidget({250, 0}, {30, kTopToolbarHeight + 1}, WindowWidgetType::TrnBtn, WindowColour::Primary , SPR_G2_TOOLBAR_MUTE, STR_TOOLBAR_MUTE_TIP ), // Mute MakeRemapWidget({100, 0}, {30, kTopToolbarHeight + 1}, WindowWidgetType::TrnBtn, WindowColour::Secondary , SPR_TOOLBAR_ZOOM_OUT, STR_ZOOM_OUT_TIP ), // Zoom out MakeRemapWidget({130, 0}, {30, kTopToolbarHeight + 1}, WindowWidgetType::TrnBtn, WindowColour::Secondary , SPR_TOOLBAR_ZOOM_IN, STR_ZOOM_IN_TIP ), // Zoom in - MakeRemapWidget({160, 0}, {30, kTopToolbarHeight + 1}, WindowWidgetType::TrnBtn, WindowColour::Secondary , SPR_TOOLBAR_ROTATE, STR_ROTATE_TIP ), // Rotate camera - MakeRemapWidget({190, 0}, {30, kTopToolbarHeight + 1}, WindowWidgetType::TrnBtn, WindowColour::Secondary , SPR_TOOLBAR_VIEW, STR_VIEW_OPTIONS_TIP ), // Transparency menu - MakeRemapWidget({220, 0}, {30, kTopToolbarHeight + 1}, WindowWidgetType::TrnBtn, WindowColour::Secondary , SPR_TOOLBAR_MAP, STR_SHOW_MAP_TIP ), // Map - MakeRemapWidget({267, 0}, {30, kTopToolbarHeight + 1}, WindowWidgetType::TrnBtn, WindowColour::Tertiary , SPR_TOOLBAR_LAND, STR_ADJUST_LAND_TIP ), // Land - MakeRemapWidget({297, 0}, {30, kTopToolbarHeight + 1}, WindowWidgetType::TrnBtn, WindowColour::Tertiary , SPR_TOOLBAR_WATER, STR_ADJUST_WATER_TIP ), // Water - MakeRemapWidget({327, 0}, {30, kTopToolbarHeight + 1}, WindowWidgetType::TrnBtn, WindowColour::Tertiary , SPR_TOOLBAR_SCENERY, STR_PLACE_SCENERY_TIP ), // Scenery - MakeRemapWidget({357, 0}, {30, kTopToolbarHeight + 1}, WindowWidgetType::TrnBtn, WindowColour::Tertiary , SPR_TOOLBAR_FOOTPATH, STR_BUILD_FOOTPATH_TIP ), // Path - MakeRemapWidget({387, 0}, {30, kTopToolbarHeight + 1}, WindowWidgetType::TrnBtn, WindowColour::Tertiary , SPR_TOOLBAR_CONSTRUCT_RIDE, STR_BUILD_RIDE_TIP ), // Construct ride - MakeRemapWidget({490, 0}, {30, kTopToolbarHeight + 1}, WindowWidgetType::TrnBtn, WindowColour::Quaternary, SPR_TOOLBAR_RIDES, STR_RIDES_IN_PARK_TIP ), // Rides - MakeRemapWidget({520, 0}, {30, kTopToolbarHeight + 1}, WindowWidgetType::TrnBtn, WindowColour::Quaternary, SPR_TOOLBAR_PARK, STR_PARK_INFORMATION_TIP ), // Park - MakeRemapWidget({550, 0}, {30, kTopToolbarHeight + 1}, WindowWidgetType::TrnBtn, WindowColour::Quaternary, SPR_TAB_TOOLBAR, STR_STAFF_TIP ), // Staff + MakeRemapWidget({190, 0}, {30, kTopToolbarHeight + 1}, WindowWidgetType::TrnBtn, WindowColour::Secondary , SPR_TAB_TOOLBAR, STR_ROTATE_ANTI_CLOCKWISE ), // Rotate camera anti-clockwise + MakeRemapWidget({160, 0}, {30, kTopToolbarHeight + 1}, WindowWidgetType::TrnBtn, WindowColour::Secondary , SPR_TOOLBAR_ROTATE, STR_ROTATE_CLOCKWISE ), // Rotate camera clockwise + MakeRemapWidget({220, 0}, {30, kTopToolbarHeight + 1}, WindowWidgetType::TrnBtn, WindowColour::Secondary , SPR_TOOLBAR_VIEW, STR_VIEW_OPTIONS_TIP ), // Transparency menu + MakeRemapWidget({267, 0}, {30, kTopToolbarHeight + 1}, WindowWidgetType::TrnBtn, WindowColour::Secondary , SPR_TOOLBAR_MAP, STR_SHOW_MAP_TIP ), // Map + MakeRemapWidget({297, 0}, {30, kTopToolbarHeight + 1}, WindowWidgetType::TrnBtn, WindowColour::Tertiary , SPR_TOOLBAR_LAND, STR_ADJUST_LAND_TIP ), // Land + MakeRemapWidget({327, 0}, {30, kTopToolbarHeight + 1}, WindowWidgetType::TrnBtn, WindowColour::Tertiary , SPR_TOOLBAR_WATER, STR_ADJUST_WATER_TIP ), // Water + MakeRemapWidget({357, 0}, {30, kTopToolbarHeight + 1}, WindowWidgetType::TrnBtn, WindowColour::Tertiary , SPR_TOOLBAR_SCENERY, STR_PLACE_SCENERY_TIP ), // Scenery + MakeRemapWidget({387, 0}, {30, kTopToolbarHeight + 1}, WindowWidgetType::TrnBtn, WindowColour::Tertiary , SPR_TOOLBAR_FOOTPATH, STR_BUILD_FOOTPATH_TIP ), // Path + MakeRemapWidget({490, 0}, {30, kTopToolbarHeight + 1}, WindowWidgetType::TrnBtn, WindowColour::Tertiary , SPR_TOOLBAR_CONSTRUCT_RIDE, STR_BUILD_RIDE_TIP ), // Construct ride + MakeRemapWidget({520, 0}, {30, kTopToolbarHeight + 1}, WindowWidgetType::TrnBtn, WindowColour::Quaternary, SPR_TOOLBAR_RIDES, STR_RIDES_IN_PARK_TIP ), // Rides + MakeRemapWidget({550, 0}, {30, kTopToolbarHeight + 1}, WindowWidgetType::TrnBtn, WindowColour::Quaternary, SPR_TOOLBAR_PARK, STR_PARK_INFORMATION_TIP ), // Park + MakeRemapWidget({560, 0}, {30, kTopToolbarHeight + 1}, WindowWidgetType::TrnBtn, WindowColour::Quaternary, SPR_TAB_TOOLBAR, STR_STAFF_TIP ), // Staff MakeRemapWidget({560, 0}, {30, kTopToolbarHeight + 1}, WindowWidgetType::TrnBtn, WindowColour::Quaternary, SPR_TOOLBAR_GUESTS, STR_GUESTS_TIP ), // Guests MakeRemapWidget({560, 0}, {30, kTopToolbarHeight + 1}, WindowWidgetType::TrnBtn, WindowColour::Tertiary , SPR_TOOLBAR_CLEAR_SCENERY, STR_CLEAR_SCENERY_TIP ), // Clear scenery MakeRemapWidget({ 30, 0}, {30, kTopToolbarHeight + 1}, WindowWidgetType::TrnBtn, WindowColour::Primary , SPR_TAB_TOOLBAR, STR_GAME_SPEED_TIP ), // Fast forward @@ -283,10 +286,6 @@ namespace OpenRCT2::Ui::Windows void FastforwardMenuDropdown(int16_t dropdownIndex); - void InitRotateMenu(Widget& widget); - - void RotateMenuDropdown(int16_t dropdownIndex); - void InitFileMenu(Widget& widget); void InitCheatsMenu(Widget& widget); @@ -324,6 +323,12 @@ namespace OpenRCT2::Ui::Windows if ((mainWindow = WindowGetMain()) != nullptr) WindowZoomIn(*mainWindow, false); break; + case WIDX_ROTATE_CLOCKWISE: + ViewportRotateAll(1); + break; + case WIDX_ROTATE_ANTI_CLOCKWISE: + ViewportRotateAll(-1); + break; case WIDX_CLEAR_SCENERY: ToggleClearSceneryWindow(); break; @@ -400,9 +405,6 @@ namespace OpenRCT2::Ui::Windows case WIDX_FASTFORWARD: InitFastforwardMenu(widget); break; - case WIDX_ROTATE: - InitRotateMenu(widget); - break; case WIDX_DEBUG: InitDebugMenu(widget); break; @@ -525,9 +527,6 @@ namespace OpenRCT2::Ui::Windows case WIDX_FASTFORWARD: FastforwardMenuDropdown(selectedIndex); break; - case WIDX_ROTATE: - RotateMenuDropdown(selectedIndex); - break; case WIDX_DEBUG: DebugMenuDropdown(selectedIndex); break; @@ -594,7 +593,8 @@ namespace OpenRCT2::Ui::Windows widgets[WIDX_FILE_MENU].type = WindowWidgetType::TrnBtn; widgets[WIDX_ZOOM_OUT].type = WindowWidgetType::TrnBtn; widgets[WIDX_ZOOM_IN].type = WindowWidgetType::TrnBtn; - widgets[WIDX_ROTATE].type = WindowWidgetType::TrnBtn; + widgets[WIDX_ROTATE_CLOCKWISE].type = WindowWidgetType::TrnBtn; + widgets[WIDX_ROTATE_ANTI_CLOCKWISE].type = WindowWidgetType::TrnBtn; widgets[WIDX_VIEW_MENU].type = WindowWidgetType::TrnBtn; widgets[WIDX_MAP].type = WindowWidgetType::TrnBtn; widgets[WIDX_MUTE].type = WindowWidgetType::TrnBtn; @@ -642,6 +642,9 @@ namespace OpenRCT2::Ui::Windows widgets[WIDX_ZOOM_OUT].type = WindowWidgetType::Empty; } + if (!Config::Get().interface.ToolbarShowRotateAnticlockwise) + widgets[WIDX_ROTATE_ANTI_CLOCKWISE].type = WindowWidgetType::Empty; + if (gScreenFlags & SCREEN_FLAGS_SCENARIO_EDITOR || gScreenFlags & SCREEN_FLAGS_TRACK_MANAGER) { widgets[WIDX_PAUSE].type = WindowWidgetType::Empty; @@ -690,7 +693,8 @@ namespace OpenRCT2::Ui::Windows widgets[WIDX_ZOOM_OUT].type = WindowWidgetType::Empty; widgets[WIDX_ZOOM_IN].type = WindowWidgetType::Empty; - widgets[WIDX_ROTATE].type = WindowWidgetType::Empty; + widgets[WIDX_ROTATE_ANTI_CLOCKWISE].type = WindowWidgetType::Empty; + widgets[WIDX_ROTATE_CLOCKWISE].type = WindowWidgetType::Empty; widgets[WIDX_VIEW_MENU].type = WindowWidgetType::Empty; } } @@ -989,6 +993,16 @@ namespace OpenRCT2::Ui::Windows auto colour = ColourWithFlags{ COLOUR_WHITE }.withFlag(ColourFlag::withOutline, true); DrawTextBasic(dpi, screenPos + ScreenCoordsXY{ 23, 1 }, STR_COMMA16, ft, { colour, TextAlignment::RIGHT }); } + + if (widgets[WIDX_ROTATE_ANTI_CLOCKWISE].type != WindowWidgetType::Empty) + { + screenPos = windowPos + + ScreenCoordsXY{ widgets[WIDX_ROTATE_ANTI_CLOCKWISE].left + 2, + widgets[WIDX_ROTATE_ANTI_CLOCKWISE].top + 0 }; + if (IsWidgetPressed(WIDX_ROTATE_ANTI_CLOCKWISE)) + screenPos.y++; + GfxDrawSprite(dpi, ImageId(SPR_G2_ICON_ROTATE_ANTI_CLOCKWISE), screenPos); + } } }; @@ -1310,30 +1324,6 @@ namespace OpenRCT2::Ui::Windows } } - void TopToolbar::InitRotateMenu(Widget& widget) - { - gDropdownItems[0].Format = STR_ROTATE_CLOCKWISE; - gDropdownItems[1].Format = STR_ROTATE_ANTI_CLOCKWISE; - - WindowDropdownShowText( - { windowPos.x + widget.left, windowPos.y + widget.top }, widget.height() + 1, - colours[1].withFlag(ColourFlag::translucent, true), 0, 2); - - gDropdownDefaultIndex = DDIDX_ROTATE_CLOCKWISE; - } - - void TopToolbar::RotateMenuDropdown(int16_t dropdownIndex) - { - if (dropdownIndex == 0) - { - ViewportRotateAll(1); - } - else if (dropdownIndex == 1) - { - ViewportRotateAll(-1); - } - } - void TopToolbar::InitFileMenu(Widget& widget) { int32_t numItems = 0; diff --git a/src/openrct2/config/Config.cpp b/src/openrct2/config/Config.cpp index 3d20337eff..38d52cbe67 100644 --- a/src/openrct2/config/Config.cpp +++ b/src/openrct2/config/Config.cpp @@ -363,6 +363,7 @@ namespace OpenRCT2::Config model->ToolbarShowMute = reader->GetBoolean("toolbar_show_mute", false); model->ToolbarShowChat = reader->GetBoolean("toolbar_show_chat", false); model->ToolbarShowZoom = reader->GetBoolean("toolbar_show_zoom", true); + model->ToolbarShowRotateAnticlockwise = reader->GetBoolean("toolbar_show_rotate_anti_clockwise", false); model->ConsoleSmallFont = reader->GetBoolean("console_small_font", false); model->CurrentThemePreset = reader->GetString("current_theme", "*RCT2"); model->CurrentTitleSequencePreset = reader->GetString("current_title_sequence", "*OPENRCT2"); @@ -388,6 +389,7 @@ namespace OpenRCT2::Config writer->WriteBoolean("toolbar_show_mute", model->ToolbarShowMute); writer->WriteBoolean("toolbar_show_chat", model->ToolbarShowChat); writer->WriteBoolean("toolbar_show_zoom", model->ToolbarShowZoom); + writer->WriteBoolean("toolbar_show_rotate_anti_clockwise", model->ToolbarShowRotateAnticlockwise); writer->WriteBoolean("console_small_font", model->ConsoleSmallFont); writer->WriteString("current_theme", model->CurrentThemePreset); writer->WriteString("current_title_sequence", model->CurrentTitleSequencePreset); diff --git a/src/openrct2/config/Config.h b/src/openrct2/config/Config.h index ad9c1eda9f..399bb38702 100644 --- a/src/openrct2/config/Config.h +++ b/src/openrct2/config/Config.h @@ -133,6 +133,7 @@ namespace OpenRCT2::Config bool ToolbarShowMute; bool ToolbarShowChat; bool ToolbarShowZoom; + bool ToolbarShowRotateAnticlockwise; bool ConsoleSmallFont; bool RandomTitleSequence; u8string CurrentThemePreset; diff --git a/src/openrct2/sprites.h b/src/openrct2/sprites.h index cf2b2e6b37..9c1e7b5777 100644 --- a/src/openrct2/sprites.h +++ b/src/openrct2/sprites.h @@ -1698,8 +1698,9 @@ enum : ImageIndex SPR_G2_CORKSCREW_BOOSTER_NE_SW_2, SPR_G2_CORKSCREW_BOOSTER_NW_SE_2, SPR_G2_OPAQUE_WATER_OVERLAY, + SPR_G2_ICON_ROTATE_ANTI_CLOCKWISE = SPR_G2_OPAQUE_WATER_OVERLAY + 5, - SPR_G2_END = SPR_G2_OPAQUE_WATER_OVERLAY + 5, + SPR_G2_END, SPR_CSG_BEGIN = SPR_G2_END, SPR_CSG_END = SPR_CSG_BEGIN + OpenRCT2::RCT1::Limits::kNumLLCsgEntries,