UI: use async::event_loop instead of abstract async::executor

This commit is contained in:
Nikita Lisitsa 2021-03-03 13:03:32 +03:00
parent 336bdde8d2
commit 5dda61ab50
4 changed files with 17 additions and 10 deletions

View file

@ -10,9 +10,11 @@ namespace psemek::ui
struct controller struct controller
{ {
controller(async::executor * loop); controller(async::event_loop * loop);
~controller(); ~controller();
async::event_loop * loop() const;
std::shared_ptr<element> set_root(std::shared_ptr<element> r); std::shared_ptr<element> set_root(std::shared_ptr<element> r);
element * root(); element * root();

View file

@ -5,7 +5,7 @@
#include <psemek/ui/painter.hpp> #include <psemek/ui/painter.hpp>
#include <psemek/ui/style.hpp> #include <psemek/ui/style.hpp>
#include <psemek/async/executor.hpp> #include <psemek/async/event_loop.hpp>
#include <psemek/util/span.hpp> #include <psemek/util/span.hpp>
@ -26,8 +26,8 @@ namespace psemek::ui
virtual element * root(); virtual element * root();
virtual element const * root() const; virtual element const * root() const;
virtual async::executor * loop() const; virtual async::event_loop * loop() const;
virtual void set_loop(async::executor * loop) { loop_ = loop; } virtual void set_loop(async::event_loop * loop) { loop_ = loop; }
virtual bool on_event(mouse_move const &) { return false; } virtual bool on_event(mouse_move const &) { return false; }
virtual bool on_event(mouse_click const &) { return false; } virtual bool on_event(mouse_click const &) { return false; }
@ -58,7 +58,7 @@ namespace psemek::ui
private: private:
element * parent_ = nullptr; element * parent_ = nullptr;
async::executor * loop_ = nullptr; async::event_loop * loop_ = nullptr;
bool enabled_ = true; bool enabled_ = true;
std::shared_ptr<struct style const> style_; std::shared_ptr<struct style const> style_;
mutable std::shared_ptr<struct style const> merged_style_; mutable std::shared_ptr<struct style const> merged_style_;

View file

@ -53,18 +53,18 @@ namespace psemek::ui
struct controller::impl struct controller::impl
{ {
async::executor * loop; async::event_loop * loop;
painter_impl painter; painter_impl painter;
std::shared_ptr<root_proxy> root; std::shared_ptr<root_proxy> root;
std::optional<geom::point<int, 2>> mouse; std::optional<geom::point<int, 2>> mouse;
impl(async::executor * loop); impl(async::event_loop * loop);
template <typename E> template <typename E>
bool event(E const & e); bool event(E const & e);
}; };
controller::impl::impl(async::executor * loop) controller::impl::impl(async::event_loop * loop)
: loop(loop) : loop(loop)
, root{std::make_shared<root_proxy>()} , root{std::make_shared<root_proxy>()}
{ {
@ -91,10 +91,15 @@ namespace psemek::ui
return false; return false;
} }
controller::controller(async::executor * loop) controller::controller(async::event_loop * loop)
: pimpl_{make_impl(loop)} : pimpl_{make_impl(loop)}
{} {}
async::event_loop * controller::loop() const
{
return impl().loop;
}
controller::~controller() = default; controller::~controller() = default;
std::shared_ptr<element> controller::set_root(std::shared_ptr<element> r) std::shared_ptr<element> controller::set_root(std::shared_ptr<element> r)

View file

@ -21,7 +21,7 @@ namespace psemek::ui
return r; return r;
} }
async::executor * element::loop() const async::event_loop * element::loop() const
{ {
element const * e = this; element const * e = this;
while (!e->loop_ && e->parent()) e = e->parent(); while (!e->loop_ && e->parent()) e = e->parent();