diff --git a/libs/ui/include/psemek/ui/impl/component.hpp b/libs/ui/include/psemek/ui/impl/component.hpp index 7c8fd3d9..c4e6f30b 100644 --- a/libs/ui/include/psemek/ui/impl/component.hpp +++ b/libs/ui/include/psemek/ui/impl/component.hpp @@ -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 &) {} diff --git a/libs/ui/include/psemek/ui/impl/controller.hpp b/libs/ui/include/psemek/ui/impl/controller.hpp index 78b089c2..864325a6 100644 --- a/libs/ui/include/psemek/ui/impl/controller.hpp +++ b/libs/ui/include/psemek/ui/impl/controller.hpp @@ -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: diff --git a/libs/ui/source/impl/controller.cpp b/libs/ui/source/impl/controller.cpp index 04f2375c..128bdc34 100644 --- a/libs/ui/source/impl/controller.cpp +++ b/libs/ui/source/impl/controller.cpp @@ -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);