1
0
mirror of https://github.com/OpenRCT2/OpenRCT2 synced 2026-01-15 11:03:00 +01:00

Add SetMainView to WindowManager

This commit is contained in:
Ted John
2018-06-02 00:07:14 +01:00
parent 05a671a319
commit 85dc161c5a
5 changed files with 43 additions and 55 deletions

View File

@@ -18,7 +18,9 @@
#include <openrct2-ui/windows/Window.h>
#include <openrct2/core/Console.hpp>
#include <openrct2/config/Config.h>
#include <openrct2/interface/Viewport.h>
#include <openrct2/Input.h>
#include <openrct2/world/Sprite.h>
#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()

View File

@@ -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));
}
/**

View File

@@ -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)
{

View File

@@ -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()

View File

@@ -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();