From d94e37d9d1cb14b8d8c49ea64e3bbe263a1d85d4 Mon Sep 17 00:00:00 2001 From: Jonathan G Rennison Date: Wed, 26 Apr 2017 20:25:50 +0100 Subject: [PATCH] Fix viewport tooltips not being cleared when scrolling using the keyboard. Fix documentation typo. --- src/misc_gui.cpp | 22 +++++++++++++++++++++- src/viewport_gui.cpp | 4 ++-- src/viewport_type.h | 2 +- src/window_gui.h | 1 + 4 files changed, 25 insertions(+), 4 deletions(-) diff --git a/src/misc_gui.cpp b/src/misc_gui.cpp index a25ef12168..7a6464d507 100644 --- a/src/misc_gui.cpp +++ b/src/misc_gui.cpp @@ -26,6 +26,7 @@ #include "core/geometry_func.hpp" #include "newgrf_debug.h" #include "zoom_func.h" +#include "viewport_type.h" #include "widgets/misc_widget.h" @@ -652,6 +653,9 @@ struct TooltipsWindow : public Window uint64 params[5]; ///< The string parameters. TooltipCloseCondition close_cond; ///< Condition for closing the window. char buffer[DRAW_STRING_BUFFER]; ///< Text to draw + int viewport_virtual_left; ///< Owner viewport state: left + int viewport_virtual_top; ///< Owner viewport state: top + bool delete_next_mouse_loop; ///< Delete window on the next mouse loop TooltipsWindow(Window *parent, StringID str, uint paramcount, const uint64 params[], TooltipCloseCondition close_tooltip) : Window(&_tool_tips_desc) { @@ -662,7 +666,12 @@ struct TooltipsWindow : public Window memcpy(this->params, params, sizeof(this->params[0]) * paramcount); this->paramcount = paramcount; this->close_cond = close_tooltip; + this->delete_next_mouse_loop = false; if (this->paramcount == 0) GetString(this->buffer, str, lastof(this->buffer)); // Get the text while params are available + if (close_tooltip == TCC_HOVER_VIEWPORT) { + this->viewport_virtual_left = parent->viewport->virtual_left; + this->viewport_virtual_top = parent->viewport->virtual_top; + } this->InitNested(); @@ -721,7 +730,7 @@ struct TooltipsWindow : public Window virtual void OnMouseLoop() { /* Always close tooltips when the cursor is not in our window. */ - if (!_cursor.in_window) { + if (!_cursor.in_window || this->delete_next_mouse_loop) { delete this; return; } @@ -732,6 +741,17 @@ struct TooltipsWindow : public Window case TCC_RIGHT_CLICK: if (!_right_button_down) delete this; break; case TCC_LEFT_CLICK: if (!_left_button_down) delete this; break; case TCC_HOVER: if (!_mouse_hovering) delete this; break; + + case TCC_HOVER_VIEWPORT: + if (!_mouse_hovering) { + delete this; + break; + } + if (this->viewport_virtual_left != this->parent->viewport->virtual_left || + this->viewport_virtual_top != this->parent->viewport->virtual_top) { + this->delete_next_mouse_loop = true; + } + break; } } }; diff --git a/src/viewport_gui.cpp b/src/viewport_gui.cpp index b3a3f8b0d5..e50737a113 100644 --- a/src/viewport_gui.cpp +++ b/src/viewport_gui.cpp @@ -217,7 +217,7 @@ void ShowTooltipForTile(Window *w, const TileIndex tile) case MP_HOUSE: { if (HasBit(_display_opt, DO_SHOW_TOWN_NAMES)) return; // No need for a town name tooltip when it is already displayed SetDParam(0, GetTownIndex(tile)); - GuiShowTooltips(w, STR_TOWN_NAME_TOOLTIP, 0, NULL, TCC_HOVER); + GuiShowTooltips(w, STR_TOWN_NAME_TOOLTIP, 0, NULL, TCC_HOVER_VIEWPORT); break; } case MP_INDUSTRY: { @@ -235,7 +235,7 @@ void ShowTooltipForTile(Window *w, const TileIndex tile) str++; } } - GuiShowTooltips(w, str, 0, NULL, TCC_HOVER); + GuiShowTooltips(w, str, 0, NULL, TCC_HOVER_VIEWPORT); break; } default: diff --git a/src/viewport_type.h b/src/viewport_type.h index 8b0d004f11..5878529755 100644 --- a/src/viewport_type.h +++ b/src/viewport_type.h @@ -33,7 +33,7 @@ enum ViewportMapType { * Data structure for viewport, display of a part of the world */ struct ViewPort { - int left; ///< Screen coordinate left egde of the viewport + int left; ///< Screen coordinate left edge of the viewport int top; ///< Screen coordinate top edge of the viewport int width; ///< Screen width of the viewport int height; ///< Screen height of the viewport diff --git a/src/window_gui.h b/src/window_gui.h index 44cecfc48d..a3225bc609 100644 --- a/src/window_gui.h +++ b/src/window_gui.h @@ -871,6 +871,7 @@ enum TooltipCloseCondition { TCC_RIGHT_CLICK, TCC_LEFT_CLICK, TCC_HOVER, + TCC_HOVER_VIEWPORT, }; void GuiShowTooltips(Window *parent, StringID str, uint paramcount = 0, const uint64 params[] = NULL, TooltipCloseCondition close_tooltip = TCC_HOVER);