From 539799814ec3535636ef9ba4147d09a74a453df6 Mon Sep 17 00:00:00 2001 From: lisyarus Date: Sat, 27 Feb 2021 10:54:34 +0300 Subject: [PATCH] UI element::loop & style return first non-null result when going up element tree --- libs/ui/include/psemek/ui/element.hpp | 4 ++-- libs/ui/source/element.cpp | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/libs/ui/include/psemek/ui/element.hpp b/libs/ui/include/psemek/ui/element.hpp index eb03e600..0c55311c 100644 --- a/libs/ui/include/psemek/ui/element.hpp +++ b/libs/ui/include/psemek/ui/element.hpp @@ -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 style() const { return style_; } + virtual std::shared_ptr style() const; virtual std::shared_ptr set_style(std::shared_ptr st); virtual void draw(painter & p) const = 0; diff --git a/libs/ui/source/element.cpp b/libs/ui/source/element.cpp index fa5c0933..770bf9ae 100644 --- a/libs/ui/source/element.cpp +++ b/libs/ui/source/element.cpp @@ -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 element::style() const + { + element const * e = this; + while (!e->style_ && e->parent()) e = e->parent(); + return e->style_; + } + std::shared_ptr