UI element::loop & style return first non-null result when going up element tree
This commit is contained in:
parent
87d5edc386
commit
539799814e
2 changed files with 16 additions and 2 deletions
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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_);
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue