mirror of
https://github.com/MihailRis/voxelcore.git
synced 2026-10-09 13:01:49 +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;
|
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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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;
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue