Add shown/hidden and minimized/maximized/restored window events
All checks were successful
Run tests / Run tests (push) Successful in 7m6s

This commit is contained in:
Nikita Lisitsa 2026-08-19 23:18:11 +03:00
parent c22c257c96
commit 28126518d5
8 changed files with 65 additions and 0 deletions

View file

@ -11,6 +11,8 @@ namespace psemek::app
{
void on_event(resize_event const &) override;
void on_event(focus_event const &) override;
void on_event(show_event const &) override;
void on_event(minimize_event const &) override;
void on_event(mouse_move_event const &) override;
void on_event(mouse_wheel_event const &) override;
void on_event(mouse_button_event const &) override;

View file

@ -9,6 +9,8 @@ namespace psemek::app
{
virtual void on_event(resize_event const &) {}
virtual void on_event(focus_event const &) {}
virtual void on_event(show_event const &) {}
virtual void on_event(minimize_event const &) {}
virtual void on_event(mouse_move_event const &) {}
virtual void on_event(mouse_wheel_event const &) {}
virtual void on_event(mouse_button_event const &) {}

View file

@ -10,6 +10,8 @@ namespace psemek::app
{
math::vector<int, 2> size = {0, 0};
bool focus = true;
bool shown = false;
minimize_event minimized = minimize_event::restored;
math::point<int, 2> mouse = {0, 0};
int wheel = 0;
util::hash_set<mouse_button> mouse_button_down;
@ -26,6 +28,16 @@ namespace psemek::app
state.focus = event.gained;
}
inline void apply(event_state & state, show_event const & event)
{
state.shown = event.shown;
}
inline void apply(event_state & state, minimize_event const & event)
{
state.minimized = event;
}
inline void apply(event_state & state, mouse_move_event const & event)
{
state.mouse = event.position;

View file

@ -17,6 +17,18 @@ namespace psemek::app
bool gained;
};
struct show_event
{
bool shown;
};
enum class minimize_event
{
minimized,
maximized,
restored,
};
struct mouse_move_event
{
math::point<int, 2> position;

View file

@ -11,6 +11,8 @@ namespace psemek::app
{
void on_event(resize_event const &) override;
void on_event(focus_event const &) override;
void on_event(show_event const &) override;
void on_event(minimize_event const &) override;
void on_event(mouse_move_event const &) override;
void on_event(mouse_wheel_event const &) override;
void on_event(mouse_button_event const &) override;

View file

@ -13,6 +13,16 @@ namespace psemek::app
apply(state_, event);
}
void application_base::on_event(show_event const & event)
{
apply(state_, event);
}
void application_base::on_event(minimize_event const & event)
{
apply(state_, event);
}
void application_base::on_event(mouse_move_event const & event)
{
apply(state_, event);

View file

@ -13,6 +13,16 @@ namespace psemek::app
on_event_impl(event);
}
void scene_application::on_event(show_event const & event)
{
on_event_impl(event);
}
void scene_application::on_event(minimize_event const & event)
{
on_event_impl(event);
}
void scene_application::on_event(mouse_move_event const & event)
{
on_event_impl(event);

View file

@ -168,6 +168,21 @@ namespace psemek::sdl2
case SDL_WINDOWEVENT_FOCUS_LOST:
handler.on_event(app::focus_event{false});
break;
case SDL_WINDOWEVENT_SHOWN:
handler.on_event(app::show_event{true});
break;
case SDL_WINDOWEVENT_HIDDEN:
handler.on_event(app::show_event{false});
break;
case SDL_WINDOWEVENT_MINIMIZED:
handler.on_event(app::minimize_event::minimized);
break;
case SDL_WINDOWEVENT_MAXIMIZED:
handler.on_event(app::minimize_event::maximized);
break;
case SDL_WINDOWEVENT_RESTORED:
handler.on_event(app::minimize_event::restored);
break;
}
break;
case SDL_MOUSEMOTION: