MayaFlux 0.2.0
Digital-First Multimedia Processing Framework
Loading...
Searching...
No Matches
InputEvents.cpp
Go to the documentation of this file.
1#include "InputEvents.hpp"
2
7
8namespace MayaFlux::Kriya {
9
11 std::shared_ptr<Core::Window> window,
12 IO::Keys key,
13 std::function<void()> callback)
14{
15 auto& promise = co_await GetEventPromise {};
16 auto& source = window->get_event_source();
17
18 Vruta::EventFilter filter;
20 filter.key_code = key;
21
22 while (true) {
23 if (promise.should_terminate) {
24 break;
25 }
26
27 co_await EventAwaiter(source, filter);
28 callback();
29 }
30}
31
33 std::shared_ptr<Core::Window> window,
34 IO::Keys key,
35 std::function<void()> callback)
36{
37 auto& promise = co_await GetEventPromise {};
38 auto& source = window->get_event_source();
39
40 Vruta::EventFilter filter;
42 filter.key_code = key;
43
44 while (true) {
45 if (promise.should_terminate) {
46 break;
47 }
48
49 co_await EventAwaiter(source, filter);
50 callback();
51 }
52}
53
55 std::shared_ptr<Core::Window> window,
56 std::function<void(IO::Keys)> callback)
57{
58 auto& promise = co_await GetEventPromise {};
59 auto& source = window->get_event_source();
60
61 Vruta::EventFilter filter;
63
64 while (true) {
65 if (promise.should_terminate) {
66 break;
67 }
68
69 auto event = co_await EventAwaiter(source, filter);
70
71 if (auto* key_data = std::get_if<Core::WindowEvent::KeyData>(&event.data)) {
72 callback(static_cast<IO::Keys>(key_data->key));
73 }
74 }
75}
76
78 std::shared_ptr<Core::Window> window,
79 IO::MouseButtons button,
80 std::function<void(double, double)> callback)
81{
82 auto& promise = co_await GetEventPromise {};
83 auto& source = window->get_event_source();
84
85 Vruta::EventFilter filter;
87 filter.button = button;
88
89 while (true) {
90 if (promise.should_terminate) {
91 break;
92 }
93
94 co_await EventAwaiter(source, filter);
95
96 auto [x, y] = source.get_mouse_position();
97 callback(x, y);
98 }
99}
100
102 std::shared_ptr<Core::Window> window,
103 IO::MouseButtons button,
104 std::function<void(double, double)> callback)
105{
106 auto& promise = co_await GetEventPromise {};
107 auto& source = window->get_event_source();
108
109 Vruta::EventFilter filter;
111 filter.button = button;
112
113 while (true) {
114 if (promise.should_terminate) {
115 break;
116 }
117
118 co_await EventAwaiter(source, filter);
119
120 auto [x, y] = source.get_mouse_position();
121 callback(x, y);
122 }
123}
124
126 std::shared_ptr<Core::Window> window,
127 std::function<void(double, double)> callback)
128{
129 auto& promise = co_await GetEventPromise {};
130 auto& source = window->get_event_source();
131
132 Vruta::EventFilter filter;
134
135 while (true) {
136 if (promise.should_terminate) {
137 break;
138 }
139
140 auto event = co_await EventAwaiter(source, filter);
141
142 if (auto* pos_data = std::get_if<Core::WindowEvent::MousePosData>(&event.data)) {
143 callback(pos_data->x, pos_data->y);
144 }
145 }
146}
147
149 std::shared_ptr<Core::Window> window,
150 std::function<void(double, double)> callback)
151{
152 auto& promise = co_await GetEventPromise {};
153 auto& source = window->get_event_source();
154
155 Vruta::EventFilter filter;
157
158 while (true) {
159 if (promise.should_terminate) {
160 break;
161 }
162
163 auto event = co_await EventAwaiter(source, filter);
164
165 if (auto* scroll_data = std::get_if<Core::WindowEvent::ScrollData>(&event.data)) {
166 callback(scroll_data->x_offset, scroll_data->y_offset);
167 }
168 }
169}
170
171} // namespace MayaFlux::Kriya
Awaiter for suspending on window events with optional filtering.
Coroutine type for event-driven suspension.
Definition Event.hpp:26
MouseButtons
Enumeration for mouse buttons.
Definition Keys.hpp:147
Vruta::Event key_released(std::shared_ptr< Core::Window > window, IO::Keys key, std::function< void()> callback)
Creates an Event coroutine that triggers on specific key release.
Vruta::Event any_key(std::shared_ptr< Core::Window > window, std::function< void(IO::Keys)> callback)
Creates an Event coroutine that triggers on any key press.
Vruta::Event key_pressed(std::shared_ptr< Core::Window > window, IO::Keys key, std::function< void()> callback)
Creates an Event coroutine that triggers on specific key press.
Vruta::Event mouse_moved(std::shared_ptr< Core::Window > window, std::function< void(double, double)> callback)
Creates an Event coroutine that triggers on mouse movement.
Vruta::Event mouse_scrolled(std::shared_ptr< Core::Window > window, std::function< void(double, double)> callback)
Creates an Event coroutine that triggers on mouse scroll.
Vruta::Event mouse_released(std::shared_ptr< Core::Window > window, IO::MouseButtons button, std::function< void(double, double)> callback)
Creates an Event coroutine that triggers on specific mouse button release.
Vruta::Event mouse_pressed(std::shared_ptr< Core::Window > window, IO::MouseButtons button, std::function< void(double, double)> callback)
Creates an Event coroutine that triggers on specific mouse button press.
Templated awaitable for accessing a coroutine's promise object.
std::optional< IO::Keys > key_code
std::optional< IO::MouseButtons > button
std::optional< Core::WindowEventType > event_type
Filter criteria for window events.