UI element::loop & style return first non-null result when going up element tree

This commit is contained in:
Nikita Lisitsa 2021-02-27 10:54:34 +03:00
parent 87d5edc386
commit 539799814e
2 changed files with 16 additions and 2 deletions

View file

@ -26,7 +26,7 @@ namespace psemek::ui
virtual element * root();
virtual element const * root() const;
virtual async::executor * loop() const { return loop_; }
virtual async::executor * loop() const;
virtual void set_loop(async::executor * loop) { loop_ = loop; }
virtual bool on_event(mouse_move const &) { return false; }
@ -44,7 +44,7 @@ namespace psemek::ui
virtual void enable() { set_enabled(true); }
virtual void disable() { set_enabled(false); }
virtual std::shared_ptr<struct style const> style() const { return style_; }
virtual std::shared_ptr<struct style const> style() const;
virtual std::shared_ptr<struct style const> set_style(std::shared_ptr<struct style const> st);
virtual void draw(painter & p) const = 0;

View file

@ -19,6 +19,13 @@ namespace psemek::ui
return r;
}
async::executor * element::loop() const
{
element const * e = this;
while (!e->loop_ && e->parent()) e = e->parent();
return e->loop_;
}
void element::reshape()
{
reshape(shape().bbox());
@ -30,6 +37,13 @@ namespace psemek::ui
return {{{0.f, inf}, {0.f, inf}}};
}
std::shared_ptr<struct style const> element::style() const
{
element const * e = this;
while (!e->style_ && e->parent()) e = e->parent();
return e->style_;
}
std::shared_ptr<style const> element::set_style(std::shared_ptr<struct style const> st)
{
std::swap(st, style_);