132 auto bus = [&](std::size_t id,
auto&& ev) {
133 if (busses->contains(
id)) {
134 busses->at(
id)->emit(ev);
137 LOG::print{INFO}(
"Received event for window {}, but it does not exit", id);
140 switch (event.type) {
141 case SDL_EVENT_WINDOW_RESIZED:
144 case SDL_EVENT_WINDOW_CLOSE_REQUESTED:
145 LOG::print{INFO}(
"Closing...");
146 bus(event.windowID, WindowClosed{});
148 case SDL_EVENT_WINDOW_EXPOSED:
151 case SDL_EVENT_WINDOW_MOUSE_ENTER:
153 case SDL_EVENT_WINDOW_MOUSE_LEAVE:
186 auto bus = [&](std::size_t id,
auto&& ev) {
187 if (busses->contains(
id)) {
188 busses->at(
id)->emit(ev);
191 LOG::print{INFO}(
"Received event for window {}, but it does not exits", id);
194 if (event.type >= SDL_EVENT_WINDOW_FIRST and event.type <= SDL_EVENT_WINDOW_LAST) {
196 }
else if (event.type >= SDL_EVENT_DISPLAY_FIRST and event.type <= SDL_EVENT_DISPLAY_LAST) {
199 switch (event.type) {
201 app_bus->emit<StopApplicationEvent>();
203 case SDL_EVENT_RENDER_TARGETS_RESET:
204 case SDL_EVENT_RENDER_DEVICE_RESET:
206 case SDL_EVENT_MOUSE_BUTTON_DOWN:
207 case SDL_EVENT_MOUSE_BUTTON_UP:
209 event.button.windowID,
211 .button = event.button.button,
214 .pressed = event.button.down,
215 .released = not event.button.down,
219 case SDL_EVENT_MOUSE_WHEEL:
221 event.wheel.windowID,
223 .dy = event.wheel.y * (event.wheel.direction == SDL_MOUSEWHEEL_FLIPPED ? -1 : 1),
224 .dx = event.wheel.x * (event.wheel.direction == SDL_MOUSEWHEEL_FLIPPED ? -1 : 1),
225 .x = event.wheel.mouse_x,
226 .y = event.wheel.mouse_y
230 case SDL_EVENT_MOUSE_MOTION:
233 case SDL_EVENT_FINGER_DOWN:
234 case SDL_EVENT_FINGER_UP:
235 case SDL_EVENT_FINGER_MOTION:
237 case SDL_EVENT_KEY_DOWN:
238 case SDL_EVENT_KEY_UP:
243 {.scancode = event.key.scancode, .code = event.key.key, .mod = event.key.mod},
244 .pressed = event.key.down,
245 .released = not event.key.down,
249 case SDL_EVENT_TEXT_INPUT:
253 .text = event.text.text,
257 case SDL_EVENT_TEXT_EDITING:
261 .text = std::string{event.edit.text, static_cast<std::size_t>(event.edit.length)},
262 .compositing_event =
true,
265 .cursor = event.edit.start,
266 .selection = event.edit.length,
271 case SDL_EVENT_TEXT_EDITING_CANDIDATES:
287 case SDL_EVENT_KEYMAP_CHANGED:
289 case SDL_EVENT_DROP_FILE:
290 case SDL_EVENT_DROP_TEXT:
291 case SDL_EVENT_DROP_BEGIN:
292 case SDL_EVENT_DROP_COMPLETE: