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
{
controller(async::executor * loop);
controller(async::event_loop * loop);
~controller();
async::event_loop * loop() const;
std::shared_ptr<element> set_root(std::shared_ptr<element> r);
element * root();

View file

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

View file

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

View file

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