From 1af6f26e80c2e130f7146f47052f3f9fa97cd608 Mon Sep 17 00:00:00 2001 From: lisyarus Date: Mon, 23 May 2022 20:07:40 +0300 Subject: [PATCH] Simplify reshaping logic --- libs/ui/source/element.cpp | 28 ++++++++++++++++------------ 1 file changed, 16 insertions(+), 12 deletions(-) diff --git a/libs/ui/source/element.cpp b/libs/ui/source/element.cpp index 6e723e40..8db8782b 100644 --- a/libs/ui/source/element.cpp +++ b/libs/ui/source/element.cpp @@ -13,9 +13,6 @@ namespace psemek::ui { assert(!parent_ || !parent); - if (parent && reshape_posted_) - parent->post_reshape(); - parent_ = parent; if (loop()) post_delayed_callbacks(); @@ -189,19 +186,26 @@ namespace psemek::ui void element::post_reshape() { - auto r = root(); + if (auto p = parent()) + { + p->post_reshape(); + return; + } - if (r->reshape_posted_) + if (reshape_posted_) return; - r->reshape_posted_ = true; - auto weak_root = r->weak_from_this(); - post([weak_root]{ - if (auto root = weak_root.lock()) + if (!loop_) + return; + + auto weak_self = weak_from_this(); + + post([weak_self]{ + if (auto self = weak_self.lock()) { - root->reshape_posted_ = false; - if (!root->parent()) - root->reshape(); + self->reshape_posted_ = false; + if (!self->parent()) + self->reshape(); } }); }