From 0d3412d064ef9593236aa8be16893745f17b71fd Mon Sep 17 00:00:00 2001 From: pelya Date: Sun, 16 Nov 2014 01:44:32 +0200 Subject: [PATCH] Hide all windows when selecting vehicle destination station --- src/order_gui.cpp | 3 +++ src/viewport.cpp | 1 + src/window.cpp | 59 +++++++++++++++++++++++++++++++++++++++++++++++ src/window_gui.h | 2 ++ 4 files changed, 65 insertions(+) diff --git a/src/order_gui.cpp b/src/order_gui.cpp index d4feae35ca..a814986427 100644 --- a/src/order_gui.cpp +++ b/src/order_gui.cpp @@ -562,6 +562,9 @@ private: SetObjectToPlaceWnd(ANIMCURSOR_PICKSTATION, PAL_NONE, goto_place_style[type - 1], this); this->goto_type = type; this->SetWidgetDirty(WID_O_GOTO); + if (type == OPOS_GOTO) { + MoveAllWindowsOffScreen(); + } } /** diff --git a/src/viewport.cpp b/src/viewport.cpp index d4af6ff456..7f2aa022d9 100644 --- a/src/viewport.cpp +++ b/src/viewport.cpp @@ -2997,6 +2997,7 @@ void ResetObjectToPlace() _last_selected_window_number = _thd.window_number; } SetObjectToPlace(SPR_CURSOR_MOUSE, PAL_NONE, HT_NONE, WC_MAIN_WINDOW, 0); + MoveAllHiddenWindowsBackToScreen(); } void ToolbarSelectLastTool() diff --git a/src/window.cpp b/src/window.cpp index c288a000fb..ffd620b282 100644 --- a/src/window.cpp +++ b/src/window.cpp @@ -2924,6 +2924,7 @@ static void MouseLoop(MouseClick click, int mousewheel) case MC_LEFT_UP: if (!_left_button_dragged && mouse_down_on_viewport) { HandleViewportMouseUp(vp, x, y); + MoveAllHiddenWindowsBackToScreen(); } _left_button_dragged = false; mouse_down_on_viewport = false; @@ -3602,6 +3603,64 @@ void RelocateAllWindows(int neww, int newh) } } +static void MoveAllWindowsOffScreen(bool moveOffScreen) +{ + Window *w; + bool updateScreen = false; + + FOR_ALL_WINDOWS_FROM_BACK(w) { + switch (w->window_class) { + case WC_MAIN_WINDOW: + case WC_BOOTSTRAP: + case WC_MAIN_TOOLBAR: + case WC_MAIN_TOOLBAR_RIGHT: + case WC_NEWS_WINDOW: + case WC_STATUS_BAR: + case WC_SEND_NETWORK_MSG: + case WC_CONSOLE: + continue; + + default: + if (moveOffScreen) { + if (w->left < _screen.width) { + w->left += _screen.width; + if (w->viewport != NULL) { + w->viewport->left += _screen.width; + } + //w->SetDirty(); + updateScreen = true; + } + } else { + if (w->left >= _screen.width) { + w->left -= _screen.width; + if (w->viewport != NULL) { + w->viewport->left -= _screen.width; + } + w->SetDirty(); + //updateScreen = true; + } + } + break; + } + } + if (updateScreen) { + w = FindWindowById(WC_MAIN_WINDOW, 0); + if (w) { + w->SetDirty(); + } + } +} + +void MoveAllWindowsOffScreen() +{ + MoveAllWindowsOffScreen(true); +} + +void MoveAllHiddenWindowsBackToScreen() +{ + MoveAllWindowsOffScreen(false); +} + /** * Destructor of the base class PickerWindowBase * Main utility is to stop the base Window destructor from triggering diff --git a/src/window_gui.h b/src/window_gui.h index a92b0be869..e2b5e6c451 100644 --- a/src/window_gui.h +++ b/src/window_gui.h @@ -865,6 +865,8 @@ Wcls *AllocateWindowDescFront(WindowDesc *desc, int window_number) } void RelocateAllWindows(int neww, int newh); +void MoveAllWindowsOffScreen(); +void MoveAllHiddenWindowsBackToScreen(); /* misc_gui.cpp */ enum TooltipCloseCondition {