From b6f675a5408ad0e286dbdcbb60cd09b5e2adbc44 Mon Sep 17 00:00:00 2001 From: MihailRis Date: Tue, 13 Feb 2024 12:46:06 +0300 Subject: [PATCH] gui: added UINode.zindex --- src/frontend/gui/UINode.cpp | 8 ++++++++ src/frontend/gui/UINode.h | 4 ++++ src/frontend/gui/gui_xml.cpp | 3 +++ src/frontend/gui/panels.cpp | 7 +++++++ src/frontend/gui/panels.h | 1 + src/frontend/hud.cpp | 2 ++ 6 files changed, 25 insertions(+) diff --git a/src/frontend/gui/UINode.cpp b/src/frontend/gui/UINode.cpp index dd788398..95e8e4b7 100644 --- a/src/frontend/gui/UINode.cpp +++ b/src/frontend/gui/UINode.cpp @@ -143,6 +143,14 @@ glm::vec4 UINode::getMargin() const { return margin; } +void UINode::setZIndex(int zindex) { + this->zindex = zindex; +} + +int UINode::getZIndex() const { + return zindex; +} + void UINode::lock() { } diff --git a/src/frontend/gui/UINode.h b/src/frontend/gui/UINode.h index c7c2f7a1..1e195932 100644 --- a/src/frontend/gui/UINode.h +++ b/src/frontend/gui/UINode.h @@ -35,6 +35,7 @@ namespace gui { bool focused = false; bool interactive = true; bool resizing = true; + int zindex = 0; Align align = Align::left; UINode* parent = nullptr; UINode(glm::vec2 coord, glm::vec2 size); @@ -68,6 +69,9 @@ namespace gui { virtual void setMargin(glm::vec4 margin); glm::vec4 getMargin() const; + virtual void setZIndex(int idx); + int getZIndex() const; + virtual void focus(GUI*) {focused = true;} virtual void click(GUI*, int x, int y); virtual void clicked(GUI*, int button) {} diff --git a/src/frontend/gui/gui_xml.cpp b/src/frontend/gui/gui_xml.cpp index ee2753e8..f2d7a7e1 100644 --- a/src/frontend/gui/gui_xml.cpp +++ b/src/frontend/gui/gui_xml.cpp @@ -37,6 +37,9 @@ static void _readUINode(xml::xmlelement element, UINode& node) { if (element->has("margin")) { node.setMargin(element->attr("margin").asVec4()); } + if (element->has("z-index")) { + node.setZIndex(element->attr("z-index").asInt()); + } std::string alignName = element->attr("align", "").getText(); node.setAlign(align_from_string(alignName, node.getAlign())); } diff --git a/src/frontend/gui/panels.cpp b/src/frontend/gui/panels.cpp index 171b721c..cb71367f 100644 --- a/src/frontend/gui/panels.cpp +++ b/src/frontend/gui/panels.cpp @@ -144,6 +144,12 @@ void Container::setSize(glm::vec2 size) { refresh(); } +void Container::refresh() { + std::stable_sort(nodes.begin(), nodes.end(), [](const auto& a, const auto& b) { + return a->getZIndex() < b->getZIndex(); + }); +} + const std::vector>& Container::getNodes() const { return nodes; } @@ -190,6 +196,7 @@ void Panel::add(std::shared_ptr node) { } void Panel::refresh() { + UINode::refresh(); float x = padding.x; float y = padding.y; vec2 size = getSize(); diff --git a/src/frontend/gui/panels.h b/src/frontend/gui/panels.h index d60dc59c..72d0e8cb 100644 --- a/src/frontend/gui/panels.h +++ b/src/frontend/gui/panels.h @@ -47,6 +47,7 @@ namespace gui { void listenInterval(float interval, ontimeout callback, int repeat=-1); virtual glm::vec2 contentOffset() override {return glm::vec2(0.0f, scroll);}; virtual void setSize(glm::vec2 size) override; + virtual void refresh() override; const std::vector>& getNodes() const; }; diff --git a/src/frontend/hud.cpp b/src/frontend/hud.cpp index 3b94f2b4..b86a1faa 100644 --- a/src/frontend/hud.cpp +++ b/src/frontend/hud.cpp @@ -250,6 +250,8 @@ HudRenderer::HudRenderer(Engine* engine, LevelFrontend* frontend) debugPanel = createDebugPanel(engine); menu->reset(); + + debugPanel->setZIndex(1); gui->addBack(darkOverlay); gui->addBack(hotbarView);