From 27013d147ad8cbf7d5250b16253215ad0d0dabc3 Mon Sep 17 00:00:00 2001 From: Ted John Date: Tue, 9 Feb 2021 23:54:59 +0000 Subject: [PATCH] Invalidate viewport when moving without scrolling --- src/openrct2-ui/scripting/ScViewport.hpp | 1 + src/openrct2/interface/Viewport.cpp | 7 ++++++- src/openrct2/interface/Viewport.h | 2 +- src/openrct2/interface/Window.h | 2 ++ 4 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/openrct2-ui/scripting/ScViewport.hpp b/src/openrct2-ui/scripting/ScViewport.hpp index af6e03842d..88d0251bd6 100644 --- a/src/openrct2-ui/scripting/ScViewport.hpp +++ b/src/openrct2-ui/scripting/ScViewport.hpp @@ -272,6 +272,7 @@ namespace OpenRCT2::Scripting viewport->flags &= ~WF_SCROLLING_TO_LOCATION; w->savedViewPos.x = viewport->viewPos.x; w->savedViewPos.y = viewport->viewPos.y; + viewport->Invalidate(); } } } diff --git a/src/openrct2/interface/Viewport.cpp b/src/openrct2/interface/Viewport.cpp index 5c42fd2fb4..6ba230aa08 100644 --- a/src/openrct2/interface/Viewport.cpp +++ b/src/openrct2/interface/Viewport.cpp @@ -1101,6 +1101,11 @@ std::optional screen_pos_to_map_pos(const ScreenCoordsXY& screenCoords return ret; } +void rct_viewport::Invalidate() const +{ + viewport_invalidate(this, viewPos.x, viewPos.y, viewPos.x + view_width, viewPos.y + view_height); +} + CoordsXY viewport_coord_to_map_coord(const ScreenCoordsXY& coords, int32_t z) { constexpr uint8_t inverseRotationMapping[NumOrthogonalDirections] = { 0, 3, 2, 1 }; @@ -1701,7 +1706,7 @@ InteractionInfo get_map_coordinates_from_pos_window(rct_window* window, const Sc /** * Left, top, right and bottom represent 2D map coordinates at zoom 0. */ -void viewport_invalidate(rct_viewport* viewport, int32_t left, int32_t top, int32_t right, int32_t bottom) +void viewport_invalidate(const rct_viewport* viewport, int32_t left, int32_t top, int32_t right, int32_t bottom) { // if unknown viewport visibility, use the containing window to discover the status if (viewport->visibility == VisibilityCache::Unknown) diff --git a/src/openrct2/interface/Viewport.h b/src/openrct2/interface/Viewport.h index d6385e147c..dcc24950a1 100644 --- a/src/openrct2/interface/Viewport.h +++ b/src/openrct2/interface/Viewport.h @@ -161,7 +161,7 @@ bool ViewportInteractionRightClick(const ScreenCoordsXY& screenCoords); CoordsXY ViewportInteractionGetTileStartAtCursor(const ScreenCoordsXY& screenCoords); void sub_68B2B7(paint_session* session, const CoordsXY& mapCoords); -void viewport_invalidate(rct_viewport* viewport, int32_t left, int32_t top, int32_t right, int32_t bottom); +void viewport_invalidate(const rct_viewport* viewport, int32_t left, int32_t top, int32_t right, int32_t bottom); std::optional screen_get_map_xy(const ScreenCoordsXY& screenCoords, rct_viewport** viewport); std::optional screen_get_map_xy_with_z(const ScreenCoordsXY& screenCoords, int16_t z); diff --git a/src/openrct2/interface/Window.h b/src/openrct2/interface/Window.h index a73881f434..0aa1795afa 100644 --- a/src/openrct2/interface/Window.h +++ b/src/openrct2/interface/Window.h @@ -171,6 +171,8 @@ struct rct_viewport } [[nodiscard]] ScreenCoordsXY ScreenToViewportCoord(const ScreenCoordsXY& screenCoord) const; + + void Invalidate() const; }; /**