From 84b53213afa159f052d080f38616a64db7f8cf36 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Fri, 26 May 2023 12:45:18 +0100 Subject: [PATCH] Codechange: Refactor viewport catchment overlay change handling --- src/viewport.cpp | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/src/viewport.cpp b/src/viewport.cpp index 8e5e7ead81..d76ad65475 100644 --- a/src/viewport.cpp +++ b/src/viewport.cpp @@ -3513,6 +3513,19 @@ void MarkCatchmentTilesDirty() } } +static void SetWindowDirtyForViewportCatchment() +{ + if (_viewport_highlight_station != nullptr) SetWindowDirty(WC_STATION_VIEW, _viewport_highlight_station->index); + if (_viewport_highlight_town != nullptr) SetWindowDirty(WC_TOWN_VIEW, _viewport_highlight_town->index); +} + +static void ClearViewportCatchment() +{ + MarkCatchmentTilesDirty(); + _viewport_highlight_station = nullptr; + _viewport_highlight_town = nullptr; +} + /** * Select or deselect station for coverage area highlight. * Selecting a station will deselect a town. @@ -3521,12 +3534,10 @@ void MarkCatchmentTilesDirty() */ void SetViewportCatchmentStation(const Station *st, bool sel) { - if (_viewport_highlight_station != nullptr) SetWindowDirty(WC_STATION_VIEW, _viewport_highlight_station->index); - if (_viewport_highlight_town != nullptr) SetWindowDirty(WC_TOWN_VIEW, _viewport_highlight_town->index); + SetWindowDirtyForViewportCatchment(); if (sel && _viewport_highlight_station != st) { - MarkCatchmentTilesDirty(); + ClearViewportCatchment(); _viewport_highlight_station = st; - _viewport_highlight_town = nullptr; MarkCatchmentTilesDirty(); } else if (!sel && _viewport_highlight_station == st) { MarkCatchmentTilesDirty(); @@ -3543,10 +3554,9 @@ void SetViewportCatchmentStation(const Station *st, bool sel) */ void SetViewportCatchmentTown(const Town *t, bool sel) { - if (_viewport_highlight_town != nullptr) SetWindowDirty(WC_TOWN_VIEW, _viewport_highlight_town->index); - if (_viewport_highlight_station != nullptr) SetWindowDirty(WC_STATION_VIEW, _viewport_highlight_station->index); + SetWindowDirtyForViewportCatchment(); if (sel && _viewport_highlight_town != t) { - _viewport_highlight_station = nullptr; + ClearViewportCatchment(); _viewport_highlight_town = t; MarkWholeScreenDirty(); } else if (!sel && _viewport_highlight_town == t) {