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;
auto node = hover;
while (node) {
if (mouseOver.find(hover) != mouseOver.end()) {
break;
if (std::find_if(
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);
auto parent = node->getParent();
if (parent) {
@ -159,12 +166,14 @@ void GUI::actMouse(float delta, const CursorState& cursor) {
}
for (auto it = mouseOver.begin(); it != mouseOver.end(); ) {
auto node = *it;
if (node->isInside(cursor.pos)) {
++it;
continue;
auto node = it->lock();
if (node) {
if (node->isInside(cursor.pos)) {
++it;
continue;
}
node->setMouseOver(false);
}
node->setMouseOver(false);
it = mouseOver.erase(it);
}