diff --git a/libs/app/include/psemek/app/ui_scene.hpp b/libs/app/include/psemek/app/ui_scene.hpp index 1d93821a..a6ef866f 100644 --- a/libs/app/include/psemek/app/ui_scene.hpp +++ b/libs/app/include/psemek/app/ui_scene.hpp @@ -12,6 +12,9 @@ namespace psemek::app { ui_scene(ui::controller & controller); + void on_scene_enter() override; + void on_scene_exit() override; + void on_resize(int width, int height) override; void on_mouse_move(int x, int y, int dx, int dy) override; @@ -31,8 +34,14 @@ namespace psemek::app ui::controller & controller() const { return controller_; } + protected: + + std::shared_ptr get_ui() { return ui_; } + void set_ui(std::shared_ptr ui); + private: ui::controller & controller_; + std::shared_ptr ui_; }; } diff --git a/libs/app/source/ui_scene.cpp b/libs/app/source/ui_scene.cpp index 7a9d020b..c6034c07 100644 --- a/libs/app/source/ui_scene.cpp +++ b/libs/app/source/ui_scene.cpp @@ -7,6 +7,18 @@ namespace psemek::app : controller_(controller) {} + void ui_scene::on_scene_enter() + { + scene_base::on_scene_enter(); + controller_.set_root(ui_); + } + + void ui_scene::on_scene_exit() + { + scene_base::on_scene_exit(); + controller_.set_root(nullptr); + } + void ui_scene::on_resize(int width, int height) { scene_base::on_resize(width, height); @@ -87,4 +99,11 @@ namespace psemek::app controller_.render(rt); } + void ui_scene::set_ui(std::shared_ptr ui) + { + ui_ = std::move(ui); + if (active()) + controller_.set_root(ui_); + } + }