From bdbb9023da39c2bff7acd00821bd934b1048ab8d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=CE=B6eh=20Matt?= <5415177+ZehMatt@users.noreply.github.com> Date: Thu, 18 May 2023 18:07:57 +0300 Subject: [PATCH] Fix tool tips disappearing too quickly --- src/openrct2-ui/input/MouseInput.cpp | 25 +++++++++++-------- src/openrct2-ui/windows/GameBottomToolbar.cpp | 2 +- src/openrct2-ui/windows/TitleMenu.cpp | 2 +- src/openrct2-ui/windows/Tooltip.cpp | 5 ++-- src/openrct2/Input.cpp | 5 ++-- src/openrct2/Input.h | 4 +-- 6 files changed, 24 insertions(+), 19 deletions(-) diff --git a/src/openrct2-ui/input/MouseInput.cpp b/src/openrct2-ui/input/MouseInput.cpp index bd97d9569e..334451e577 100644 --- a/src/openrct2-ui/input/MouseInput.cpp +++ b/src/openrct2-ui/input/MouseInput.cpp @@ -56,7 +56,7 @@ static uint8_t _currentScrollArea; ScreenCoordsXY gInputDragLast; -uint16_t gTooltipTimeout; +uint32_t gTooltipCloseTimeout; WidgetRef gTooltipWidget; ScreenCoordsXY gTooltipCursor; @@ -482,7 +482,7 @@ static void InputWindowPositionContinue( static void InputWindowPositionEnd(WindowBase& w, const ScreenCoordsXY& screenCoords) { _inputState = InputState::Normal; - gTooltipTimeout = 0; + gTooltipCloseTimeout = 0; gTooltipWidget = _dragWidget; WindowEventMovedCall(&w, screenCoords); } @@ -513,7 +513,7 @@ static void InputWindowResizeContinue(WindowBase& w, const ScreenCoordsXY& scree static void InputWindowResizeEnd() { _inputState = InputState::Normal; - gTooltipTimeout = 0; + gTooltipCloseTimeout = 0; gTooltipWidget = _dragWidget; } @@ -1403,7 +1403,7 @@ void InputStateWidgetPressed( } _inputState = InputState::Normal; - gTooltipTimeout = 0; + gTooltipCloseTimeout = 0; gTooltipWidget.widget_index = cursor_widgetIndex; gTooltipWidget.window_classification = cursor_w_class; gTooltipWidget.window_number = cursor_w_number; @@ -1427,7 +1427,7 @@ void InputStateWidgetPressed( return; } - gTooltipTimeout = 0; + gTooltipCloseTimeout = 0; gTooltipWidget.widget_index = cursor_widgetIndex; if (w == nullptr) @@ -1515,19 +1515,23 @@ static void InputUpdateTooltip(WindowBase* w, WidgetIndex widgetIndex, const Scr { if (gTooltipCursor == screenCoords) { - _tooltipNotShownTicks++; - if (_tooltipNotShownTicks > 50 && w != nullptr && WidgetIsVisible(*w, widgetIndex)) + if (gCurrentRealTimeTicks >= _tooltipNotShownTimeout && w != nullptr && WidgetIsVisible(*w, widgetIndex)) { - gTooltipTimeout = 0; + gTooltipCloseTimeout = gCurrentRealTimeTicks + 8000; WindowTooltipOpen(w, widgetIndex, screenCoords); } } + else + { + ResetTooltipNotShown(); + } - gTooltipTimeout = 0; + gTooltipCloseTimeout = gCurrentRealTimeTicks + 8000; gTooltipCursor = screenCoords; } else { + gTooltipCursor = screenCoords; ResetTooltipNotShown(); if (w == nullptr || gTooltipWidget.window_classification != w->classification @@ -1537,8 +1541,7 @@ static void InputUpdateTooltip(WindowBase* w, WidgetIndex widgetIndex, const Scr WindowTooltipClose(); } - gTooltipTimeout += gCurrentDeltaTime; - if (gTooltipTimeout >= 8000) + if (gCurrentRealTimeTicks >= gTooltipCloseTimeout) { WindowCloseByClass(WindowClass::Tooltip); } diff --git a/src/openrct2-ui/windows/GameBottomToolbar.cpp b/src/openrct2-ui/windows/GameBottomToolbar.cpp index 91e8fc5367..ed04ecd356 100644 --- a/src/openrct2-ui/windows/GameBottomToolbar.cpp +++ b/src/openrct2-ui/windows/GameBottomToolbar.cpp @@ -648,7 +648,7 @@ public: case WIDX_GUESTS: case WIDX_PARK_RATING: case WIDX_DATE: - gTooltipTimeout = 2000; + gTooltipCloseTimeout = gCurrentRealTimeTicks + 2000; break; } return cursorId; diff --git a/src/openrct2-ui/windows/TitleMenu.cpp b/src/openrct2-ui/windows/TitleMenu.cpp index 1ad2166da1..77fa3dfe5d 100644 --- a/src/openrct2-ui/windows/TitleMenu.cpp +++ b/src/openrct2-ui/windows/TitleMenu.cpp @@ -252,7 +252,7 @@ public: CursorID OnCursor(WidgetIndex, const ScreenCoordsXY&, CursorID cursorId) override { - gTooltipTimeout = 2000; + gTooltipCloseTimeout = gCurrentRealTimeTicks + 2000; return cursorId; } diff --git a/src/openrct2-ui/windows/Tooltip.cpp b/src/openrct2-ui/windows/Tooltip.cpp index bd7ca113a4..f14f81fd3f 100644 --- a/src/openrct2-ui/windows/Tooltip.cpp +++ b/src/openrct2-ui/windows/Tooltip.cpp @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -126,7 +127,7 @@ private: void WindowTooltipReset(const ScreenCoordsXY& screenCoords) { gTooltipCursor = screenCoords; - gTooltipTimeout = 0; + gTooltipCloseTimeout = 0; gTooltipWidget.window_classification = WindowClass::Null; InputSetState(InputState::Normal); InputSetFlag(INPUT_FLAG_4, false); @@ -188,6 +189,6 @@ void WindowTooltipOpen(WindowBase* widgetWindow, WidgetIndex widgetIndex, const void WindowTooltipClose() { WindowCloseByClass(WindowClass::Tooltip); - gTooltipTimeout = 0; + gTooltipCloseTimeout = 0; gTooltipWidget.window_classification = WindowClass::Null; } diff --git a/src/openrct2/Input.cpp b/src/openrct2/Input.cpp index 9dce973aa2..5de5422b4c 100644 --- a/src/openrct2/Input.cpp +++ b/src/openrct2/Input.cpp @@ -10,6 +10,7 @@ #include "Input.h" #include "Context.h" +#include "Game.h" InputState _inputState; uint8_t _inputFlags; @@ -18,7 +19,7 @@ uint8_t gInputPlaceObjectModifier; WidgetRef gHoverWidget; WidgetRef gPressedWidget; -uint16_t _tooltipNotShownTicks; +uint32_t _tooltipNotShownTimeout; Tool gCurrentToolId; WidgetRef gCurrentToolWidget; @@ -75,7 +76,7 @@ InputState InputGetState() void ResetTooltipNotShown() { - _tooltipNotShownTicks = 0; + _tooltipNotShownTimeout = gCurrentRealTimeTicks + 50; } void InputResetPlaceObjModifier() diff --git a/src/openrct2/Input.h b/src/openrct2/Input.h index ccd5134bb4..248c9f1f49 100644 --- a/src/openrct2/Input.h +++ b/src/openrct2/Input.h @@ -80,7 +80,7 @@ extern ScreenCoordsXY gInputDragLast; extern WidgetRef gHoverWidget; extern WidgetRef gPressedWidget; -extern uint16_t gTooltipTimeout; +extern uint32_t gTooltipCloseTimeout; extern WidgetRef gTooltipWidget; extern ScreenCoordsXY gTooltipCursor; @@ -90,7 +90,7 @@ extern WidgetRef gCurrentToolWidget; // TODO: Move to openrct2-ui and make static again extern InputState _inputState; extern uint8_t _inputFlags; -extern uint16_t _tooltipNotShownTicks; +extern uint32_t _tooltipNotShownTimeout; void InputWindowPositionBegin(WindowBase& w, WidgetIndex widgetIndex, const ScreenCoordsXY& screenCoords);