From a1cd02c61cb1bca643f632528a20f6e8927c933c Mon Sep 17 00:00:00 2001 From: Ted John Date: Sat, 22 Aug 2020 15:39:58 +0100 Subject: [PATCH] Disable closer zoom levels for software rendering --- src/openrct2/Context.cpp | 2 ++ src/openrct2/interface/Viewport.cpp | 13 +++++++++++++ src/openrct2/interface/Window.cpp | 13 +++++++++++++ src/openrct2/interface/Window.h | 1 + src/openrct2/interface/ZoomLevel.hpp | 5 +---- 5 files changed, 30 insertions(+), 4 deletions(-) diff --git a/src/openrct2/Context.cpp b/src/openrct2/Context.cpp index edcb7f89d0..f49d4712c6 100644 --- a/src/openrct2/Context.cpp +++ b/src/openrct2/Context.cpp @@ -535,6 +535,8 @@ namespace OpenRCT2 } } } + + window_check_all_valid_zoom(); } void DisposeDrawingEngine() final override diff --git a/src/openrct2/interface/Viewport.cpp b/src/openrct2/interface/Viewport.cpp index 24b44553ff..e60912e653 100644 --- a/src/openrct2/interface/Viewport.cpp +++ b/src/openrct2/interface/Viewport.cpp @@ -17,6 +17,7 @@ #include "../core/Guard.hpp" #include "../core/JobPool.hpp" #include "../drawing/Drawing.h" +#include "../drawing/IDrawingEngine.h" #include "../paint/Paint.h" #include "../peep/Staff.h" #include "../ride/Ride.h" @@ -1926,3 +1927,15 @@ void viewport_set_saved_view() gSavedViewRotation = get_current_rotation(); } } + +ZoomLevel ZoomLevel::min() +{ + if (drawing_engine_get_type() == DRAWING_ENGINE_OPENGL) + { + return -2; + } + else + { + return 0; + } +} diff --git a/src/openrct2/interface/Window.cpp b/src/openrct2/interface/Window.cpp index 5044c31ac1..7db1cd7f29 100644 --- a/src/openrct2/interface/Window.cpp +++ b/src/openrct2/interface/Window.cpp @@ -1001,6 +1001,19 @@ void window_viewport_centre_tile_around_cursor(rct_window* w, int16_t map_x, int centreLoc->y + rebased_y + (offset_y / w->viewport->zoom) }; } +/** + * For all windows with viewports, ensure they do not have a zoom level less than the minimum. + */ +void window_check_all_valid_zoom() +{ + window_visit_each([](rct_window* w) { + if (w->viewport != nullptr && w->viewport->zoom < ZoomLevel::min()) + { + window_zoom_set(w, ZoomLevel::min(), false); + } + }); +} + void window_zoom_set(rct_window* w, ZoomLevel zoomLevel, bool atCursor) { rct_viewport* v = w->viewport; diff --git a/src/openrct2/interface/Window.h b/src/openrct2/interface/Window.h index 993870aabb..3adaa4c06b 100644 --- a/src/openrct2/interface/Window.h +++ b/src/openrct2/interface/Window.h @@ -724,6 +724,7 @@ void window_rotate_camera(rct_window* w, int32_t direction); void window_viewport_get_map_coords_by_cursor( rct_window* w, int16_t* map_x, int16_t* map_y, int16_t* offset_x, int16_t* offset_y); void window_viewport_centre_tile_around_cursor(rct_window* w, int16_t map_x, int16_t map_y, int16_t offset_x, int16_t offset_y); +void window_check_all_valid_zoom(); void window_zoom_set(rct_window* w, ZoomLevel zoomLevel, bool atCursor); void window_zoom_in(rct_window* w, bool atCursor); void window_zoom_out(rct_window* w, bool atCursor); diff --git a/src/openrct2/interface/ZoomLevel.hpp b/src/openrct2/interface/ZoomLevel.hpp index 97a8ee1a05..6b12bb23e2 100644 --- a/src/openrct2/interface/ZoomLevel.hpp +++ b/src/openrct2/interface/ZoomLevel.hpp @@ -136,10 +136,7 @@ public: return lhs >> rhs._level; } - static constexpr ZoomLevel min() - { - return -2; - } + static ZoomLevel min(); static constexpr ZoomLevel max() {