diff --git a/src/graphics/ui/elements/Container.cpp b/src/graphics/ui/elements/Container.cpp index 8d45c2a1..5d5375c1 100644 --- a/src/graphics/ui/elements/Container.cpp +++ b/src/graphics/ui/elements/Container.cpp @@ -177,6 +177,7 @@ void Container::add(const std::shared_ptr& node) { parent->setMustRefresh(); parent = parent->getParent(); } + gui.getWindow().setShouldRefresh(); } void Container::add(const std::shared_ptr& node, glm::vec2 pos) { diff --git a/src/graphics/ui/elements/UINode.cpp b/src/graphics/ui/elements/UINode.cpp index 1e8f48d6..8c3c0765 100644 --- a/src/graphics/ui/elements/UINode.cpp +++ b/src/graphics/ui/elements/UINode.cpp @@ -69,6 +69,11 @@ UINode* UINode::listenAction(const onaction& action) { return this; } +UINode* UINode::listenRightClick(const onaction& action) { + rightClickCallbacks.listen(action); + return this; +} + UINode* UINode::listenDoubleClick(const onaction& action) { doubleClickCallbacks.listen(action); return this; @@ -88,6 +93,12 @@ void UINode::click(int, int) { pressed = true; } +void UINode::clicked(Mousecode button) { + if (button == Mousecode::BUTTON_2) { + rightClickCallbacks.notify(gui); + } +} + void UINode::doubleClick(int x, int y) { pressed = true; if (isInside(glm::vec2(x, y))) { diff --git a/src/graphics/ui/elements/UINode.hpp b/src/graphics/ui/elements/UINode.hpp index fc64527f..6024f841 100644 --- a/src/graphics/ui/elements/UINode.hpp +++ b/src/graphics/ui/elements/UINode.hpp @@ -121,6 +121,8 @@ namespace gui { vec2supplier sizefunc = nullptr; /// @brief 'onclick' callbacks ActionsSet actions; + /// @brief 'onrightclick' callbacks + ActionsSet rightClickCallbacks; /// @brief 'ondoubleclick' callbacks ActionsSet doubleClickCallbacks; /// @brief 'onfocus' callbacks @@ -188,6 +190,7 @@ namespace gui { int getZIndex() const; virtual UINode* listenAction(const onaction& action); + virtual UINode* listenRightClick(const onaction& action); virtual UINode* listenDoubleClick(const onaction& action); virtual UINode* listenFocus(const onaction& action); virtual UINode* listenDefocus(const onaction& action); @@ -195,7 +198,7 @@ namespace gui { virtual void onFocus(); virtual void doubleClick(int x, int y); virtual void click(int x, int y); - virtual void clicked(Mousecode button) {} + virtual void clicked(Mousecode button); virtual void mouseMove(int x, int y) {}; virtual void mouseRelease(int x, int y); virtual void scrolled(int value); diff --git a/src/graphics/ui/gui_xml.cpp b/src/graphics/ui/gui_xml.cpp index 18d0fa4b..32e59b73 100644 --- a/src/graphics/ui/gui_xml.cpp +++ b/src/graphics/ui/gui_xml.cpp @@ -181,6 +181,10 @@ static void read_uinode( node.listenAction(onclick); } + if (auto onclick = create_action(reader, element, "onrightclick")) { + node.listenRightClick(onclick); + } + if (auto onfocus = create_action(reader, element, "onfocus")) { node.listenFocus(onfocus); }