diff --git a/libs/app/include/psemek/app/scene.hpp b/libs/app/include/psemek/app/scene.hpp index 1cd2d513..4aa5d21f 100644 --- a/libs/app/include/psemek/app/scene.hpp +++ b/libs/app/include/psemek/app/scene.hpp @@ -10,11 +10,13 @@ namespace psemek::app { + struct app; + struct scene { virtual ~scene() = 0; - virtual void on_scene_enter() {} + virtual void on_scene_enter(app * /* parent */) {} virtual void on_scene_exit() {} virtual void on_resize(int /* width */, int /* height */) {} @@ -42,8 +44,8 @@ namespace psemek::app struct scene_base : scene { - void on_scene_enter() override { active_ = true; } - void on_scene_exit() override { active_ = false; } + void on_scene_enter(app * parent) override { parent_ = parent; } + void on_scene_exit() override { parent_ = nullptr; } void on_resize(int width, int height) override { width_ = width; height_ = height; } @@ -57,7 +59,8 @@ namespace psemek::app void on_key_down(SDL_Keycode key) override { keys_.insert(key); } void on_key_up(SDL_Keycode key) override { keys_.erase(key); } - bool active() const { return active_; } + bool active() const { return parent_ != nullptr; } + app * parent() const { return parent_; } bool is_left_button_down() const { return left_button_down_; } bool is_middle_button_down() const { return middle_button_down_; } @@ -71,7 +74,7 @@ namespace psemek::app int height() const { return height_; } private: - bool active_ = false; + app * parent_ = nullptr; int width_ = 0; int height_ = 0; diff --git a/libs/app/include/psemek/app/ui_scene.hpp b/libs/app/include/psemek/app/ui_scene.hpp index a6ef866f..2470efa0 100644 --- a/libs/app/include/psemek/app/ui_scene.hpp +++ b/libs/app/include/psemek/app/ui_scene.hpp @@ -12,7 +12,7 @@ namespace psemek::app { ui_scene(ui::controller & controller); - void on_scene_enter() override; + void on_scene_enter(app * parent) override; void on_scene_exit() override; void on_resize(int width, int height) override; diff --git a/libs/app/source/app.cpp b/libs/app/source/app.cpp index f1cc61b5..4eafd637 100644 --- a/libs/app/source/app.cpp +++ b/libs/app/source/app.cpp @@ -200,7 +200,7 @@ namespace psemek::app SDL_ShowWindow(impl().window); impl().running = true; if (impl().current_scene == nullptr) - on_scene_enter(); + on_scene_enter(this); while (running()) { poll_events(); @@ -230,7 +230,7 @@ namespace psemek::app impl().had_initial_resize = false; std::swap(s, impl().current_scene); - impl().get_scene()->on_scene_enter(); + impl().get_scene()->on_scene_enter(this); return s; } diff --git a/libs/app/source/ui_scene.cpp b/libs/app/source/ui_scene.cpp index c6034c07..c650f6f7 100644 --- a/libs/app/source/ui_scene.cpp +++ b/libs/app/source/ui_scene.cpp @@ -7,9 +7,9 @@ namespace psemek::app : controller_(controller) {} - void ui_scene::on_scene_enter() + void ui_scene::on_scene_enter(app * parent) { - scene_base::on_scene_enter(); + scene_base::on_scene_enter(parent); controller_.set_root(ui_); }