App: ui_scene updates controller ui root on scene enter/exit

This commit is contained in:
Nikita Lisitsa 2021-03-03 16:19:22 +03:00
parent 692da35066
commit 8aa6c8a3bb
2 changed files with 28 additions and 0 deletions

View file

@ -12,6 +12,9 @@ namespace psemek::app
{ {
ui_scene(ui::controller & controller); 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_resize(int width, int height) override;
void on_mouse_move(int x, int y, int dx, int dy) 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_; } ui::controller & controller() const { return controller_; }
protected:
std::shared_ptr<ui::element> get_ui() { return ui_; }
void set_ui(std::shared_ptr<ui::element> ui);
private: private:
ui::controller & controller_; ui::controller & controller_;
std::shared_ptr<ui::element> ui_;
}; };
} }

View file

@ -7,6 +7,18 @@ namespace psemek::app
: controller_(controller) : 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) void ui_scene::on_resize(int width, int height)
{ {
scene_base::on_resize(width, height); scene_base::on_resize(width, height);
@ -87,4 +99,11 @@ namespace psemek::app
controller_.render(rt); controller_.render(rt);
} }
void ui_scene::set_ui(std::shared_ptr<ui::element> ui)
{
ui_ = std::move(ui);
if (active())
controller_.set_root(ui_);
}
} }