UI elements should explicitly reset parent for their children
This commit is contained in:
parent
ef34071748
commit
ea46e820ab
10 changed files with 37 additions and 0 deletions
|
|
@ -30,6 +30,8 @@ namespace psemek::ui
|
|||
callback_ = std::move(callback);
|
||||
}
|
||||
|
||||
~button() override;
|
||||
|
||||
protected:
|
||||
enum class state_t
|
||||
{
|
||||
|
|
|
|||
|
|
@ -56,6 +56,9 @@ namespace psemek::ui
|
|||
virtual void post(std::function<void()> f);
|
||||
virtual void post_reshape();
|
||||
|
||||
protected:
|
||||
virtual void release_children();
|
||||
|
||||
private:
|
||||
element * parent_ = nullptr;
|
||||
async::event_loop * loop_ = nullptr;
|
||||
|
|
|
|||
|
|
@ -19,6 +19,8 @@ namespace psemek::ui
|
|||
virtual std::optional<geom::vector<float, 2>> min_size() const { return min_size_; }
|
||||
virtual std::optional<geom::vector<float, 2>> max_size() const { return max_size_; }
|
||||
|
||||
~frame() override;
|
||||
|
||||
private:
|
||||
std::optional<geom::vector<float, 2>> min_size_;
|
||||
std::optional<geom::vector<float, 2>> max_size_;
|
||||
|
|
|
|||
|
|
@ -42,6 +42,8 @@ namespace psemek::ui
|
|||
|
||||
void draw(painter &) const override {}
|
||||
|
||||
~grid_layout() override;
|
||||
|
||||
private:
|
||||
util::array<std::shared_ptr<element>, 2> children_;
|
||||
std::vector<element *> children_range_;
|
||||
|
|
|
|||
|
|
@ -44,6 +44,8 @@ namespace psemek::ui
|
|||
|
||||
void draw(painter &) const override {}
|
||||
|
||||
~screen() override;
|
||||
|
||||
private:
|
||||
container_impl container_;
|
||||
box_shape shape_;
|
||||
|
|
|
|||
|
|
@ -64,6 +64,11 @@ namespace psemek::ui
|
|||
return false;
|
||||
}
|
||||
|
||||
button::~button()
|
||||
{
|
||||
release_children();
|
||||
}
|
||||
|
||||
void button::on_state_changed(state_t old)
|
||||
{
|
||||
auto s = merged_style();
|
||||
|
|
|
|||
|
|
@ -95,4 +95,10 @@ namespace psemek::ui
|
|||
});
|
||||
}
|
||||
|
||||
void element::release_children()
|
||||
{
|
||||
for (auto c : children())
|
||||
if (c) c->set_parent(nullptr);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -34,4 +34,9 @@ namespace psemek::ui
|
|||
post_reshape();
|
||||
}
|
||||
|
||||
frame::~frame()
|
||||
{
|
||||
release_children();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -281,4 +281,9 @@ namespace psemek::ui
|
|||
}
|
||||
}
|
||||
|
||||
grid_layout::~grid_layout()
|
||||
{
|
||||
release_children();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -113,4 +113,9 @@ namespace psemek::ui
|
|||
return result;
|
||||
}
|
||||
|
||||
screen::~screen()
|
||||
{
|
||||
release_children();
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue