add 'onrightclick' uinode event

This commit is contained in:
MihailRis 2025-11-14 00:33:57 +03:00
parent 645f150ff2
commit 1fd81da82e
4 changed files with 20 additions and 1 deletions

View File

@ -177,6 +177,7 @@ void Container::add(const std::shared_ptr<UINode>& node) {
parent->setMustRefresh();
parent = parent->getParent();
}
gui.getWindow().setShouldRefresh();
}
void Container::add(const std::shared_ptr<UINode>& node, glm::vec2 pos) {

View File

@ -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))) {

View File

@ -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);

View File

@ -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);
}