Add loop posting utilities in ui::element
This commit is contained in:
parent
e6b731f5d7
commit
8c04087a44
3 changed files with 24 additions and 1 deletions
|
|
@ -51,6 +51,9 @@ namespace psemek::ui
|
|||
|
||||
virtual ~element() {}
|
||||
|
||||
virtual void post(std::function<void()> f);
|
||||
virtual void post_reshape();
|
||||
|
||||
private:
|
||||
element * parent_ = nullptr;
|
||||
async::executor * loop_ = nullptr;
|
||||
|
|
|
|||
|
|
@ -47,7 +47,7 @@ namespace psemek::ui
|
|||
{
|
||||
state_ = state_t::mousedown;
|
||||
if (callback_)
|
||||
root()->loop()->post(callback_);
|
||||
post(callback_);
|
||||
on_state_changed();
|
||||
return true;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,7 @@
|
|||
#include <psemek/ui/element.hpp>
|
||||
|
||||
#include <psemek/log/log.hpp>
|
||||
|
||||
namespace psemek::ui
|
||||
{
|
||||
|
||||
|
|
@ -34,4 +36,22 @@ namespace psemek::ui
|
|||
return st;
|
||||
}
|
||||
|
||||
void element::post(std::function<void()> f)
|
||||
{
|
||||
auto l = root()->loop();
|
||||
if (l)
|
||||
l->post(std::move(f));
|
||||
else
|
||||
log::warning() << "posting ui event while not attached to event loop";
|
||||
}
|
||||
|
||||
void element::post_reshape()
|
||||
{
|
||||
auto weak_self = weak_from_this();
|
||||
post([weak_self]{
|
||||
if (auto self = weak_self.lock())
|
||||
self->root()->reshape();
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue