Active scenes can access parent app
This commit is contained in:
parent
fe60386ad7
commit
908b6cc5c9
4 changed files with 13 additions and 10 deletions
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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_);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue