From 7c95f594d3f72d2d113490ec783e072418b4f1ef Mon Sep 17 00:00:00 2001 From: Bryan DiLaura Date: Fri, 9 Oct 2020 16:12:14 -0600 Subject: [PATCH] Close #12413: Refactor VISIBILITY_CACHE to use strong enum (#13136) --- src/openrct2/interface/Viewport.cpp | 4 ++-- src/openrct2/interface/Window.cpp | 18 +++++++++--------- src/openrct2/interface/Window.h | 12 +++++++----- src/openrct2/interface/Window_internal.h | 2 +- 4 files changed, 19 insertions(+), 17 deletions(-) diff --git a/src/openrct2/interface/Viewport.cpp b/src/openrct2/interface/Viewport.cpp index 8d59a26a41..15a431c001 100644 --- a/src/openrct2/interface/Viewport.cpp +++ b/src/openrct2/interface/Viewport.cpp @@ -1691,7 +1691,7 @@ InteractionInfo get_map_coordinates_from_pos_window(rct_window* window, const Sc void viewport_invalidate(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 == VC_UNKNOWN) + if (viewport->visibility == VisibilityCache::Unknown) { auto windowManager = GetContext()->GetUiContext()->GetWindowManager(); auto owner = windowManager->GetOwner(viewport); @@ -1705,7 +1705,7 @@ void viewport_invalidate(rct_viewport* viewport, int32_t left, int32_t top, int3 } } - if (viewport->visibility == VC_COVERED) + if (viewport->visibility == VisibilityCache::Covered) return; int32_t viewportLeft = viewport->viewPos.x; diff --git a/src/openrct2/interface/Window.cpp b/src/openrct2/interface/Window.cpp index 00b15b052b..cef0ede1a4 100644 --- a/src/openrct2/interface/Window.cpp +++ b/src/openrct2/interface/Window.cpp @@ -1969,16 +1969,16 @@ bool window_is_visible(rct_window* w) if (w == nullptr) return false; - if (w->visibility == VC_VISIBLE) + if (w->visibility == VisibilityCache::Visible) return true; - if (w->visibility == VC_COVERED) + if (w->visibility == VisibilityCache::Covered) return false; // only consider viewports, consider the main window always visible if (w->viewport == nullptr || w->classification == WC_MAIN_WINDOW) { // default to previous behaviour - w->visibility = VC_VISIBLE; + w->visibility = VisibilityCache::Visible; return true; } @@ -1993,15 +1993,15 @@ bool window_is_visible(rct_window* w) && w_other.windowPos.x + w_other.width >= w->windowPos.x + w->width && w_other.windowPos.y + w_other.height >= w->windowPos.y + w->height) { - w->visibility = VC_COVERED; - w->viewport->visibility = VC_COVERED; + w->visibility = VisibilityCache::Covered; + w->viewport->visibility = VisibilityCache::Covered; return false; } } // default to previous behaviour - w->visibility = VC_VISIBLE; - w->viewport->visibility = VC_VISIBLE; + w->visibility = VisibilityCache::Visible; + w->viewport->visibility = VisibilityCache::Visible; return true; } @@ -2052,10 +2052,10 @@ void window_reset_visibilities() { // reset window visibility status to unknown window_visit_each([](rct_window* w) { - w->visibility = VC_UNKNOWN; + w->visibility = VisibilityCache::Unknown; if (w->viewport != nullptr) { - w->viewport->visibility = VC_UNKNOWN; + w->viewport->visibility = VisibilityCache::Unknown; } }); } diff --git a/src/openrct2/interface/Window.h b/src/openrct2/interface/Window.h index ed9b9f2152..b4e3738bd1 100644 --- a/src/openrct2/interface/Window.h +++ b/src/openrct2/interface/Window.h @@ -29,6 +29,8 @@ struct TitleSequence; struct TextInputSession; struct scenario_index_entry; +enum class VisibilityCache : uint8_t; + #define SCROLLABLE_ROW_HEIGHT 12 #define LIST_ROW_HEIGHT 12 #define TABLE_CELL_HEIGHT 12 @@ -142,7 +144,7 @@ struct rct_viewport uint32_t flags; ZoomLevel zoom; uint8_t var_11; - uint8_t visibility; // VISIBILITY_CACHE + VisibilityCache visibility; }; /** @@ -632,11 +634,11 @@ enum MODAL_RESULT_OK }; -enum VISIBILITY_CACHE +enum class VisibilityCache : uint8_t { - VC_UNKNOWN, - VC_VISIBLE, - VC_COVERED + Unknown, + Visible, + Covered }; enum class GuestListFilterType : int32_t diff --git a/src/openrct2/interface/Window_internal.h b/src/openrct2/interface/Window_internal.h index 039d078ed1..36d4db565e 100644 --- a/src/openrct2/interface/Window_internal.h +++ b/src/openrct2/interface/Window_internal.h @@ -88,7 +88,7 @@ struct rct_window ScreenCoordsXY savedViewPos; rct_windowclass classification; colour_t colours[6]; - uint8_t visibility; + VisibilityCache visibility; uint16_t viewport_smart_follow_sprite; // Handles setting viewport target sprite etc void SetLocation(const CoordsXYZ& coords);