From e3989cb178172c81d49240dfa40680d59ba32e7b Mon Sep 17 00:00:00 2001 From: MihailRis Date: Fri, 24 May 2024 13:18:20 +0300 Subject: [PATCH] added 'tooltip-delay' property --- src/graphics/ui/GUI.cpp | 4 ++-- src/graphics/ui/GUI.hpp | 1 - src/graphics/ui/elements/InventoryView.cpp | 1 + src/graphics/ui/elements/UINode.cpp | 9 +++++++++ src/graphics/ui/elements/UINode.hpp | 5 +++++ src/graphics/ui/gui_xml.cpp | 3 +++ src/logic/scripting/lua/libgui.cpp | 8 ++++++++ 7 files changed, 28 insertions(+), 3 deletions(-) diff --git a/src/graphics/ui/GUI.cpp b/src/graphics/ui/GUI.cpp index bb958450..eb83529d 100644 --- a/src/graphics/ui/GUI.cpp +++ b/src/graphics/ui/GUI.cpp @@ -62,8 +62,8 @@ void GUI::onAssetsLoad(Assets* assets) { void GUI::updateTooltip(float delta) { float mouseDelta = glm::length(Events::delta); if ((hover && mouseDelta < 1.0f) || - (hover && hover->isInside(Events::cursor) && tooltipTimer >= tooltipDelay)) { - if (tooltipTimer + delta >= tooltipDelay) { + (hover && hover->isInside(Events::cursor) && tooltipTimer >= hover->getTooltipDelay())) { + if (tooltipTimer + delta >= hover->getTooltipDelay()) { auto label = std::dynamic_pointer_cast(get("tooltip.label")); const auto& text = hover->getTooltip(); if (label && !text.empty()) { diff --git a/src/graphics/ui/GUI.hpp b/src/graphics/ui/GUI.hpp index cb1dc4ff..8975533b 100644 --- a/src/graphics/ui/GUI.hpp +++ b/src/graphics/ui/GUI.hpp @@ -65,7 +65,6 @@ namespace gui { std::queue postRunnables; float tooltipTimer = 0.0f; - float tooltipDelay = 0.5f; float doubleClickTimer = 0.0f; float doubleClickDelay = 0.5f; bool doubleClicked = false; diff --git a/src/graphics/ui/elements/InventoryView.cpp b/src/graphics/ui/elements/InventoryView.cpp index 181b8bd7..bcfea371 100644 --- a/src/graphics/ui/elements/InventoryView.cpp +++ b/src/graphics/ui/elements/InventoryView.cpp @@ -109,6 +109,7 @@ SlotView::SlotView( layout(layout) { setColor(glm::vec4(0, 0, 0, 0.2f)); + setTooltipDelay(0.05f); } void SlotView::draw(const DrawContext* pctx, Assets* assets) { diff --git a/src/graphics/ui/elements/UINode.cpp b/src/graphics/ui/elements/UINode.cpp index be2cf9f8..ddae4ea8 100644 --- a/src/graphics/ui/elements/UINode.cpp +++ b/src/graphics/ui/elements/UINode.cpp @@ -137,6 +137,15 @@ const std::wstring UINode::getTooltip() const { return tooltip; } +void UINode::setTooltipDelay(float delay) { + tooltipDelay = delay; +} + +float UINode::getTooltipDelay() const { + return tooltipDelay; +} + + glm::vec2 UINode::calcPos() const { if (parent) { return pos + parent->calcPos() + parent->contentOffset(); diff --git a/src/graphics/ui/elements/UINode.hpp b/src/graphics/ui/elements/UINode.hpp index 37a3b1b8..073bd43f 100644 --- a/src/graphics/ui/elements/UINode.hpp +++ b/src/graphics/ui/elements/UINode.hpp @@ -111,6 +111,8 @@ namespace gui { ActionsSet doubleClickCallbacks; /// @brief element tooltip text std::wstring tooltip; + /// @brief element tooltip delay + float tooltipDelay = 0.5f; UINode(glm::vec2 size); public: @@ -202,6 +204,9 @@ namespace gui { virtual void setTooltip(const std::wstring& text); virtual const std::wstring getTooltip() const; + virtual void setTooltipDelay(float delay); + virtual float getTooltipDelay() const; + virtual glm::vec4 calcColor() const; /// @brief Get inner content offset. Used for scroll diff --git a/src/graphics/ui/gui_xml.cpp b/src/graphics/ui/gui_xml.cpp index cd3a9de7..3ef8a09d 100644 --- a/src/graphics/ui/gui_xml.cpp +++ b/src/graphics/ui/gui_xml.cpp @@ -146,6 +146,9 @@ static void _readUINode(UiXmlReader& reader, xml::xmlelement element, UINode& no if (element->has("tooltip")) { node.setTooltip(util::str2wstr_utf8(element->attr("tooltip").getText())); } + if (element->has("tooltip-delay")) { + node.setTooltipDelay(element->attr("tooltip-delay").asFloat()); + } if (auto onclick = create_action(reader, element, "onclick")) { node.listenAction(onclick); diff --git a/src/logic/scripting/lua/libgui.cpp b/src/logic/scripting/lua/libgui.cpp index de823455..fa2cb93e 100644 --- a/src/logic/scripting/lua/libgui.cpp +++ b/src/logic/scripting/lua/libgui.cpp @@ -267,6 +267,9 @@ static int p_get_pressed_color(UINode* node) { static int p_get_tooltip(UINode* node) { return state->pushstring(util::wstr2str_utf8(node->getTooltip())); } +static int p_get_tooltip_delay(UINode* node) { + return state->pushnumber(node->getTooltipDelay()); +} static int p_get_pos(UINode* node) { return lua::pushvec2_arr(state->getLua(), node->getPos()); } @@ -304,6 +307,7 @@ static int l_gui_getattr(lua_State* L) { {"hoverColor", p_get_hover_color}, {"pressedColor", p_get_pressed_color}, {"tooltip", p_get_tooltip}, + {"tooltipDelay", p_get_tooltip_delay}, {"pos", p_get_pos}, {"wpos", p_get_wpos}, {"size", p_get_size}, @@ -352,6 +356,9 @@ static void p_set_pressed_color(UINode* node, int idx) { static void p_set_tooltip(UINode* node, int idx) { node->setTooltip(util::str2wstr_utf8(state->tostring(idx))); } +static void p_set_tooltip_delay(UINode* node, int idx) { + node->setTooltipDelay(state->tonumber(idx)); +} static void p_set_pos(UINode* node, int idx) { node->setPos(state->tovec2(idx)); } @@ -472,6 +479,7 @@ static int l_gui_setattr(lua_State* L) { {"hoverColor", p_set_hover_color}, {"pressedColor", p_set_pressed_color}, {"tooltip", p_set_tooltip}, + {"tooltipDelay", p_set_tooltip_delay}, {"pos", p_set_pos}, {"wpos", p_set_wpos}, {"size", p_set_size},