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);
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<ui::element> get_ui() { return ui_; }
void set_ui(std::shared_ptr<ui::element> ui);
private:
ui::controller & controller_;
std::shared_ptr<ui::element> ui_;
};
}

View file

@ -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::element> ui)
{
ui_ = std::move(ui);
if (active())
controller_.set_root(ui_);
}
}