MayaFlux 0.4.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches

◆ signal()

void MayaFlux::Vruta::EventSource::signal ( Core::WindowEvent  event)

Signals that an event occurred.

Parameters
eventThe event data

Called by GLFW callbacks. Queues event and resumes waiting coroutines.

Definition at line 7 of file EventSource.cpp.

8{
9 if (auto* key_data = std::get_if<Core::WindowEvent::KeyData>(&event.data)) {
10 if (event.type == Core::WindowEventType::KEY_PRESSED) {
11 m_key_states[key_data->key] = true;
12 } else if (event.type == Core::WindowEventType::KEY_RELEASED) {
13 m_key_states[key_data->key] = false;
14 }
15 }
16
17 if (auto* button_data = std::get_if<Core::WindowEvent::MouseButtonData>(&event.data)) {
19 m_button_states[button_data->button] = true;
20 } else if (event.type == Core::WindowEventType::MOUSE_BUTTON_RELEASED) {
21 m_button_states[button_data->button] = false;
22 }
23 }
24
25 if (auto* pos_data = std::get_if<Core::WindowEvent::MousePosData>(&event.data)) {
26 m_mouse_x = pos_data->x;
27 m_mouse_y = pos_data->y;
28 }
29
30 if (m_waiters.empty()) {
31 return;
32 }
33
34 bool any_waiter_matches = std::ranges::any_of(m_waiters, [&](const Kriya::EventAwaiter* w) {
35 return w->filter_matches(event);
36 });
37
38 if (!any_waiter_matches)
39 return;
40
41 m_pending_events.push(event);
42
43 auto waiters = m_waiters;
44 for (auto* awaiter : waiters) {
45 awaiter->try_resume();
46 }
47}
std::unordered_map< int, bool > m_button_states
std::vector< Kriya::EventAwaiter * > m_waiters
std::queue< Core::WindowEvent > m_pending_events
std::unordered_map< int16_t, bool > m_key_states

References MayaFlux::Core::WindowEvent::data, MayaFlux::Kriya::EventAwaiter::filter_matches(), MayaFlux::Core::KEY_PRESSED, MayaFlux::Core::KEY_RELEASED, m_button_states, m_key_states, m_mouse_x, m_mouse_y, m_pending_events, m_waiters, MayaFlux::Core::MOUSE_BUTTON_PRESSED, MayaFlux::Core::MOUSE_BUTTON_RELEASED, and MayaFlux::Core::WindowEvent::type.

+ Here is the call graph for this function: