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);
|
callback_ = std::move(callback);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
~button() override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
enum class state_t
|
enum class state_t
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -56,6 +56,9 @@ namespace psemek::ui
|
||||||
virtual void post(std::function<void()> f);
|
virtual void post(std::function<void()> f);
|
||||||
virtual void post_reshape();
|
virtual void post_reshape();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual void release_children();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
element * parent_ = nullptr;
|
element * parent_ = nullptr;
|
||||||
async::event_loop * loop_ = 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>> min_size() const { return min_size_; }
|
||||||
virtual std::optional<geom::vector<float, 2>> max_size() const { return max_size_; }
|
virtual std::optional<geom::vector<float, 2>> max_size() const { return max_size_; }
|
||||||
|
|
||||||
|
~frame() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
std::optional<geom::vector<float, 2>> min_size_;
|
std::optional<geom::vector<float, 2>> min_size_;
|
||||||
std::optional<geom::vector<float, 2>> max_size_;
|
std::optional<geom::vector<float, 2>> max_size_;
|
||||||
|
|
|
||||||
|
|
@ -42,6 +42,8 @@ namespace psemek::ui
|
||||||
|
|
||||||
void draw(painter &) const override {}
|
void draw(painter &) const override {}
|
||||||
|
|
||||||
|
~grid_layout() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
util::array<std::shared_ptr<element>, 2> children_;
|
util::array<std::shared_ptr<element>, 2> children_;
|
||||||
std::vector<element *> children_range_;
|
std::vector<element *> children_range_;
|
||||||
|
|
|
||||||
|
|
@ -44,6 +44,8 @@ namespace psemek::ui
|
||||||
|
|
||||||
void draw(painter &) const override {}
|
void draw(painter &) const override {}
|
||||||
|
|
||||||
|
~screen() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
container_impl container_;
|
container_impl container_;
|
||||||
box_shape shape_;
|
box_shape shape_;
|
||||||
|
|
|
||||||
|
|
@ -64,6 +64,11 @@ namespace psemek::ui
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
button::~button()
|
||||||
|
{
|
||||||
|
release_children();
|
||||||
|
}
|
||||||
|
|
||||||
void button::on_state_changed(state_t old)
|
void button::on_state_changed(state_t old)
|
||||||
{
|
{
|
||||||
auto s = merged_style();
|
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();
|
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;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
screen::~screen()
|
||||||
|
{
|
||||||
|
release_children();
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue