mirror of
https://github.com/MihailRis/voxelcore.git
synced 2026-10-04 18:41:51 +00:00
fix hover elements lifetime
This commit is contained in:
parent
ea8e1301ea
commit
55e4e6de02
2 changed files with 18 additions and 9 deletions
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue