5#include "fifechan/backends/sdl2/input.hpp"
10#include "fifechan/exception.hpp"
11#include "fifechan/util/utf8/utf8.hpp"
27 throwException(
"The queue is empty.");
46 throwException(
"The queue is empty.");
65 keyInput.
setType(KeyInput::Type::Pressed);
68 keyInput.
setAltPressed((event.key.keysym.mod & KMOD_ALT) != 0);
70 keyInput.
setNumericPad((event.key.keysym.mod & KMOD_NUM) != 0);
79 value =
static_cast<int>(
event.key.keysym.sym);
83 keyInput.
setType(KeyInput::Type::Released);
86 keyInput.
setAltPressed((event.key.keysym.mod & KMOD_ALT) != 0);
88 keyInput.
setNumericPad((event.key.keysym.mod & KMOD_NUM) != 0);
93 case SDL_MOUSEBUTTONDOWN: {
95 mouseInput.
setX(event.button.x);
96 mouseInput.
setY(event.button.y);
98 mouseInput.
setType(MouseInput::Type::Pressed);
104 case SDL_MOUSEBUTTONUP: {
106 mouseInput.
setX(event.button.x);
107 mouseInput.
setY(event.button.y);
109 mouseInput.
setType(MouseInput::Type::Released);
115 case SDL_MOUSEMOTION: {
116 mouseInput.
setX(event.motion.x);
117 mouseInput.
setY(event.motion.y);
118 mouseInput.
setButton(MouseInput::Button::Empty);
119 mouseInput.
setType(MouseInput::Type::Moved);
125 case SDL_MOUSEWHEEL: {
136 if (event.wheel.y > 0) {
137 mouseInput.
setType(MouseInput::Type::WheelMovedUp);
138 }
else if (event.wheel.y < 0) {
139 mouseInput.
setType(MouseInput::Type::WheelMovedDown);
141 if (event.wheel.x > 0) {
142 mouseInput.
setType(MouseInput::Type::WheelMovedRight);
143 }
else if (event.wheel.x < 0) {
144 mouseInput.
setType(MouseInput::Type::WheelMovedLeft);
148 SDL_GetMouseState(&x, &y);
158 case SDL_TEXTINPUT: {
159 std::string text(
static_cast<char const *
>(event.text.text));
162 std::vector<char16_t> result;
163 utf8::utf8to16(text.begin(), text.end(), std::back_inserter(result));
164 int const value = result[0];
167 keyInput.
setType(KeyInput::Type::Pressed);
170 keyInput.
setAltPressed((event.key.keysym.mod & KMOD_ALT) != 0);
172 keyInput.
setNumericPad((event.key.keysym.mod & KMOD_NUM) != 0);
178 case SDL_WINDOWEVENT: {
183 if (event.window.event == SDL_WINDOWEVENT_ENTER) {
185 }
else if (event.window.event == SDL_WINDOWEVENT_LEAVE) {
208 case SDL_BUTTON_LEFT:
209 return MouseInput::Button::Left;
211 case SDL_BUTTON_RIGHT:
212 return MouseInput::Button::Right;
214 case SDL_BUTTON_MIDDLE:
215 return MouseInput::Button::Middle;
218 return MouseInput::Button::X1;
221 return MouseInput::Button::X2;
224 return MouseInput::Button::Empty;
232 switch (event.key.keysym.sym) {
237 value = Key::LeftAlt;
240 value = Key::RightAlt;
243 value = Key::LeftShift;
246 value = Key::RightShift;
249 value = Key::LeftControl;
252 value = Key::RightControl;
255 value = Key::Backspace;
266 if (event.type == SDL_KEYUP) {
288 case SDLK_PRINTSCREEN:
289 value = Key::PrintScreen;
292 value = Key::PageDown;
339 case SDLK_NUMLOCKCLEAR:
340 value = Key::NumLock;
343 value = Key::CapsLock;
345 case SDLK_SCROLLLOCK:
346 value = Key::ScrollLock;
349 value = Key::LeftSuper;
352 value = Key::RightSuper;
378 if ((event.key.keysym.mod & KMOD_NUM) == 0) {
379 switch (event.key.keysym.sym) {
390 value = Key::PageDown;
Represents a keyboard key or character code.
Unified header for the SDL backend.