diff --git a/src/openrct2-ui/WindowManager.cpp b/src/openrct2-ui/WindowManager.cpp index 65c022eb8f..d869edffbd 100644 --- a/src/openrct2-ui/WindowManager.cpp +++ b/src/openrct2-ui/WindowManager.cpp @@ -18,7 +18,9 @@ #include #include #include +#include #include +#include #include "input/Input.h" #include "input/KeyboardShortcuts.h" #include "WindowManager.h" @@ -439,6 +441,33 @@ public: keyboard_shortcuts_format_string(buffer, sizeof(buffer), shortcut); return std::string(buffer); } + + void SetMainView(sint32 x, sint32 y, sint32 zoom, sint32 rotation) override + { + auto mainWindow = window_get_main(); + if (mainWindow != nullptr) + { + auto viewport = window_get_viewport(mainWindow); + mainWindow->viewport_target_sprite = SPRITE_INDEX_NULL; + mainWindow->saved_view_x = x; + mainWindow->saved_view_y = y; + viewport->zoom = zoom; + gCurrentRotation = rotation; + auto zoomDifference = zoom - viewport->zoom; + if (zoomDifference != 0) + { + viewport->view_width <<= zoomDifference; + viewport->view_height <<= zoomDifference; + } + mainWindow->saved_view_x -= viewport->view_width >> 1; + mainWindow->saved_view_y -= viewport->view_height >> 1; + + // Make sure the viewport has correct coordinates set. + viewport_update_position(mainWindow); + + window_invalidate(mainWindow); + } + } }; IWindowManager * OpenRCT2::Ui::CreateWindowManager() diff --git a/src/openrct2/Editor.cpp b/src/openrct2/Editor.cpp index d7a174e810..cff4d79c92 100644 --- a/src/openrct2/Editor.cpp +++ b/src/openrct2/Editor.cpp @@ -40,7 +40,10 @@ #include "world/Footpath.h" #include "world/Scenery.h" #include "world/Park.h" -#include "interface/Window_internal.h" +#include "ui/UiContext.h" +#include "ui/WindowManager.h" + +using namespace OpenRCT2; namespace Editor { @@ -415,45 +418,18 @@ namespace Editor static void FinaliseMainView() { - rct_window * w = window_get_main(); - rct_viewport * viewport = window_get_viewport(w); + auto windowManager = GetContext()->GetUiContext()->GetWindowManager(); + windowManager->SetMainView(gSavedViewX, gSavedViewY, gSavedViewZoom, gSavedViewRotation); - w->viewport_target_sprite = SPRITE_INDEX_NULL; - w->saved_view_x = gSavedViewX; - w->saved_view_y = gSavedViewY; - gCurrentRotation = gSavedViewRotation; - - sint32 zoom_difference = gSavedViewZoom - viewport->zoom; - viewport->zoom = gSavedViewZoom; - if (zoom_difference != 0) - { - if (zoom_difference >= 0) - { - viewport->view_width <<= zoom_difference; - viewport->view_height <<= zoom_difference; - } - else - { - zoom_difference = -zoom_difference; - viewport->view_width >>= zoom_difference; - viewport->view_height >>= zoom_difference; - } - } - w->saved_view_x -= viewport->view_width >> 1; - w->saved_view_y -= viewport->view_height >> 1; - - window_invalidate(w); reset_all_sprite_quadrant_placements(); scenery_set_default_placement_configuration(); - auto intent = Intent(INTENT_ACTION_REFRESH_NEW_RIDES); - context_broadcast_intent(&intent); + windowManager->BroadcastIntent(Intent(INTENT_ACTION_REFRESH_NEW_RIDES)); gWindowUpdateTicks = 0; load_palette(); - intent = Intent(INTENT_ACTION_CLEAR_TILE_INSPECTOR_CLIPBOARD); - context_broadcast_intent(&intent); + windowManager->BroadcastIntent(Intent(INTENT_ACTION_CLEAR_TILE_INSPECTOR_CLIPBOARD)); } /** diff --git a/src/openrct2/Game.cpp b/src/openrct2/Game.cpp index 6b947ac39d..fe226f23d7 100644 --- a/src/openrct2/Game.cpp +++ b/src/openrct2/Game.cpp @@ -52,6 +52,8 @@ #include "scenario/Scenario.h" #include "title/TitleScreen.h" #include "title/TitleSequencePlayer.h" +#include "ui/UiContext.h" +#include "ui/WindowManager.h" #include "util/SawyerCoding.h" #include "util/Util.h" #include "windows/Intent.h" @@ -67,7 +69,6 @@ #include "world/Surface.h" #include "world/Water.h" #include "object/ObjectList.h" -#include "interface/Window_internal.h" #define NUMBER_OF_AUTOSAVES_TO_KEEP 9 @@ -1136,28 +1137,8 @@ void game_load_init() window_unfollow_sprite(mainWindow); } - if (mainWindow != nullptr) - { - rct_viewport * viewport = window_get_viewport(mainWindow); - mainWindow->viewport_target_sprite = SPRITE_INDEX_NULL; - mainWindow->saved_view_x = gSavedViewX; - mainWindow->saved_view_y = gSavedViewY; - uint8 zoomDifference = gSavedViewZoom - viewport->zoom; - viewport->zoom = gSavedViewZoom; - gCurrentRotation = gSavedViewRotation; - if (zoomDifference != 0) - { - viewport->view_width <<= zoomDifference; - viewport->view_height <<= zoomDifference; - } - mainWindow->saved_view_x -= viewport->view_width >> 1; - mainWindow->saved_view_y -= viewport->view_height >> 1; - - // Make sure the viewport has correct coordinates set. - viewport_update_position(mainWindow); - - window_invalidate(mainWindow); - } + auto windowManager = GetContext()->GetUiContext()->GetWindowManager(); + windowManager->SetMainView(gSavedViewX, gSavedViewY, gSavedViewZoom, gSavedViewRotation); if (network_get_mode() != NETWORK_MODE_CLIENT) { diff --git a/src/openrct2/ui/DummyWindowManager.cpp b/src/openrct2/ui/DummyWindowManager.cpp index 96606f6793..a8107db144 100644 --- a/src/openrct2/ui/DummyWindowManager.cpp +++ b/src/openrct2/ui/DummyWindowManager.cpp @@ -32,6 +32,7 @@ namespace OpenRCT2::Ui void HandleInput() override { } void HandleKeyboard(bool /*isTitle*/) override { } std::string GetKeyboardShortcutString(sint32 /*shortcut*/) override { return std::string(); } + void SetMainView(sint32 x, sint32 y, sint32 zoom, sint32 rotation) override { } }; IWindowManager * CreateDummyWindowManager() diff --git a/src/openrct2/ui/WindowManager.h b/src/openrct2/ui/WindowManager.h index 89f3035963..e9cc682d20 100644 --- a/src/openrct2/ui/WindowManager.h +++ b/src/openrct2/ui/WindowManager.h @@ -42,6 +42,7 @@ namespace OpenRCT2::Ui virtual void HandleInput() abstract; virtual void HandleKeyboard(bool isTitle) abstract; virtual std::string GetKeyboardShortcutString(sint32 shortcut) abstract; + virtual void SetMainView(sint32 x, sint32 y, sint32 zoom, sint32 rotation) abstract; }; IWindowManager * CreateDummyWindowManager();