Support animating UI components

This commit is contained in:
Nikita Lisitsa 2024-07-29 19:04:04 +03:00
parent ddaf2407a9
commit 9234a28344
3 changed files with 23 additions and 0 deletions

View file

@ -28,6 +28,8 @@ namespace psemek::ui::impl
virtual bool on_event(mouse_button_event const &) { return false; }
virtual bool on_event(key_event const &) { return false; }
virtual void animate(float) {}
virtual void draw(renderer &) {}
virtual void post_draw(renderer &) {}

View file

@ -25,6 +25,7 @@ namespace psemek::ui::impl
bool on_event(mouse_button_event const & event);
bool on_event(key_event const & event);
void animate(float dt);
void draw(renderer & renderer);
private:

View file

@ -72,6 +72,21 @@ namespace psemek::ui::impl
return element->on_event(event);
}
void animate(float dt)
{
animate_impl(dt, root.get());
}
void animate_impl(float dt, component * element)
{
if (!element)
return;
element->animate(dt);
for (auto const & child : element->children())
animate_impl(dt, child.get());
}
void draw(renderer & renderer)
{
draw_impl(renderer, root.get());
@ -132,6 +147,11 @@ namespace psemek::ui::impl
return impl().on_event(event);
}
void controller::animate(float dt)
{
impl().animate(dt);
}
void controller::draw(renderer & renderer)
{
impl().draw(renderer);