fix hover elements lifetime

This commit is contained in:
MihailRis 2025-12-15 21:43:04 +03:00
parent ea8e1301ea
commit 55e4e6de02
2 changed files with 18 additions and 9 deletions

View file

@ -146,11 +146,18 @@ void GUI::actMouse(float delta, const CursorState& cursor) {
} }
this->hover = hover; this->hover = hover;
auto node = hover; auto node = hover;
while (node) { while (node) {
if (mouseOver.find(hover) != mouseOver.end()) { if (std::find_if(
break; mouseOver.begin(),
mouseOver.end(),
[&hover](const std::weak_ptr<UINode>& weak) {
auto locked = weak.lock();
return locked && locked == hover;
}) != mouseOver.end()) {
break;
} }
mouseOver.insert(node); mouseOver.push_back(node);
node->setMouseOver(true); node->setMouseOver(true);
auto parent = node->getParent(); auto parent = node->getParent();
if (parent) { if (parent) {
@ -159,12 +166,14 @@ void GUI::actMouse(float delta, const CursorState& cursor) {
} }
for (auto it = mouseOver.begin(); it != mouseOver.end(); ) { for (auto it = mouseOver.begin(); it != mouseOver.end(); ) {
auto node = *it; auto node = it->lock();
if (node->isInside(cursor.pos)) { if (node) {
++it; if (node->isInside(cursor.pos)) {
continue; ++it;
continue;
}
node->setMouseOver(false);
} }
node->setMouseOver(false);
it = mouseOver.erase(it); it = mouseOver.erase(it);
} }

View file

@ -81,7 +81,7 @@ namespace gui {
std::unique_ptr<Camera> uicamera; std::unique_ptr<Camera> uicamera;
std::shared_ptr<Menu> menu; std::shared_ptr<Menu> menu;
std::queue<runnable> postRunnables; std::queue<runnable> postRunnables;
std::set<std::shared_ptr<UINode>> mouseOver; std::vector<std::weak_ptr<UINode>> mouseOver;
PageLoaderFunc pagesLoader; PageLoaderFunc pagesLoader;