9 if (
auto* key_data = std::get_if<Core::WindowEvent::KeyData>(&event.
data)) {
17 if (
auto* button_data = std::get_if<Core::WindowEvent::MouseButtonData>(&event.
data)) {
25 if (
auto* pos_data = std::get_if<Core::WindowEvent::MousePosData>(&event.
data)) {
33 for (
auto* awaiter : waiters) {
34 awaiter->try_resume();
60 std::queue<Core::WindowEvent> temp_queue;
61 std::optional<Core::WindowEvent> result;
74 auto key_code =
static_cast<int16_t
>(*filter.
key_code);
75 if (
auto key_data = std::get_if<Core::WindowEvent::KeyData>(&event.data)) {
76 if (key_data->key != key_code) {
84 if (matches && filter.
button) {
85 auto button_code =
static_cast<int>(*filter.
button);
86 if (
auto* button_data = std::get_if<Core::WindowEvent::MouseButtonData>(&event.data)) {
87 if (button_data->button != button_code) {
95 if (matches && !result) {
98 temp_queue.push(event);
113 auto it = std::ranges::find(
m_waiters, awaiter);
121 auto key_int =
static_cast<int16_t
>(key);
Awaiter for suspending on window events with optional filtering.
bool is_mouse_pressed(int button) const
Query if a specific mouse button is currently pressed.
std::unordered_map< int, bool > m_button_states
std::optional< Core::WindowEvent > pop_event(const EventFilter &filter)
Pop event matching filter from queue.
Kriya::EventAwaiter next_event()
Creates awaiter for next event (any type)
std::vector< Kriya::EventAwaiter * > m_waiters
void register_waiter(Kriya::EventAwaiter *awaiter)
bool is_key_pressed(IO::Keys key) const
Query if a specific key is currently pressed.
std::queue< Core::WindowEvent > m_pending_events
Kriya::EventAwaiter await_event(Core::WindowEventType type)
Creates awaiter for specific event type.
std::unordered_map< int16_t, bool > m_key_states
void unregister_waiter(Kriya::EventAwaiter *awaiter)
void signal(Core::WindowEvent event)
Signals that an event occurred.
std::pair< double, double > get_mouse_position() const
Get current mouse position.
WindowEventType
Types of window and input events.
Event data for window and input events.
std::optional< IO::Keys > key_code
std::optional< IO::MouseButtons > button
std::optional< Core::WindowEventType > event_type
Filter criteria for window events.