From 9c110b83d3a634a6a30bd41bbb35c52b7e651172 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Thu, 18 Jan 2024 20:11:47 +0300 Subject: [PATCH] Fixed world name label behaviour --- src/frontend/gui/UINode.cpp | 11 +++++++++++ src/frontend/gui/UINode.h | 6 +++++- src/frontend/gui/panels.cpp | 3 +++ src/frontend/menu.cpp | 5 ++++- 4 files changed, 23 insertions(+), 2 deletions(-) diff --git a/src/frontend/gui/UINode.cpp b/src/frontend/gui/UINode.cpp index 3a77b146..205347f3 100644 --- a/src/frontend/gui/UINode.cpp +++ b/src/frontend/gui/UINode.cpp @@ -78,9 +78,20 @@ bool UINode::isInside(glm::vec2 pos) { } shared_ptr UINode::getAt(vec2 pos, shared_ptr self) { + if (!interactive) { + return nullptr; + } return isInside(pos) ? self : nullptr; } +bool UINode::isInteractive() const { + return interactive; +} + +void UINode::setInteractive(bool flag) { + interactive = flag; +} + vec2 UINode::calcCoord() const { if (parent) { return coord + parent->calcCoord() + parent->contentOffset(); diff --git a/src/frontend/gui/UINode.h b/src/frontend/gui/UINode.h index 25ba270f..668e4d97 100644 --- a/src/frontend/gui/UINode.h +++ b/src/frontend/gui/UINode.h @@ -30,6 +30,7 @@ namespace gui { bool hover_ = false; bool pressed_ = false; bool focused_ = false; + bool interactive = true; Align align_ = Align::left; UINode* parent = nullptr; UINode(glm::vec2 coord, glm::vec2 size); @@ -74,9 +75,12 @@ namespace gui { virtual bool isInside(glm::vec2 pos); virtual std::shared_ptr getAt(glm::vec2 pos, std::shared_ptr self); + virtual bool isInteractive() const; + virtual void setInteractive(bool flag); + virtual glm::vec2 contentOffset() {return glm::vec2(0.0f);}; glm::vec2 calcCoord() const; - void setCoord(glm::vec2 coord); + virtual void setCoord(glm::vec2 coord); glm::vec2 size() const; virtual void size(glm::vec2 size); void _size(glm::vec2 size); diff --git a/src/frontend/gui/panels.cpp b/src/frontend/gui/panels.cpp index 0fb87277..ebde2f86 100644 --- a/src/frontend/gui/panels.cpp +++ b/src/frontend/gui/panels.cpp @@ -18,6 +18,9 @@ Container::Container(vec2 coord, vec2 size) : UINode(coord, size) { } shared_ptr Container::getAt(vec2 pos, shared_ptr self) { + if (!interactive) { + return nullptr; + } if (!isInside(pos)) return nullptr; for (auto node : nodes) { if (!node->visible()) diff --git a/src/frontend/menu.cpp b/src/frontend/menu.cpp index 2410b1ef..776b0244 100644 --- a/src/frontend/menu.cpp +++ b/src/frontend/menu.cpp @@ -201,7 +201,10 @@ Panel* create_worlds_panel(Engine* engine) { auto btn = std::make_shared(vec2(390, 46)); btn->color(vec4(1.0f, 1.0f, 1.0f, 0.1f)); btn->setHoverColor(vec4(1.0f, 1.0f, 1.0f, 0.17f)); - btn->add(std::make_shared