diff options
Diffstat (limited to 'main/events.cpp')
| -rw-r--r-- | main/events.cpp | 100 |
1 files changed, 59 insertions, 41 deletions
diff --git a/main/events.cpp b/main/events.cpp index 1f1c81a2..59dfe28e 100644 --- a/main/events.cpp +++ b/main/events.cpp @@ -1,84 +1,102 @@ #include "main-impl.hpp" #include "floormat/app.hpp" #include "floormat/events.hpp" +#include "sdl-fwd.inl" #include <cstring> #include <SDL_events.h> #include <SDL_keyboard.h> namespace floormat { -void main_impl::viewportEvent(Platform::Sdl2Application::ViewportEvent& event) +namespace { + +using Buttons = Platform::Sdl2Application::Pointers; + +mouse_button pointer_to_button_mask(Buttons b) { return mouse_button((uint8_t)b); } + +any_event make_any_event(const SDL_Event& e) +{ + static_assert(sizeof(SDL_Event) <= sizeof(any_event::buf)); + any_event ret; + std::memcpy(&ret.buf, &e, sizeof(SDL_Event)); + return ret; +} + +} // namespace + +void main_impl::viewportEvent(ViewportEvent& event) { _framebuffer_size = event.framebufferSize(); recalc_viewport(event.framebufferSize(), event.windowSize()); app.on_viewport_event(event.framebufferSize()); } -void main_impl::mousePressEvent(Platform::Sdl2Application::MouseEvent& event) +void main_impl::pointerPressEvent(PointerEvent& ev) { - app.on_mouse_up_down({event.position() * _virtual_scale, - (SDL_Keymod)(uint16_t)event.modifiers(), - mouse_button(SDL_BUTTON((uint8_t)event.button())), - uint8_t(std::min(255, event.clickCount()))}, - true); + app.on_mouse_up_down({ + ev.position() * _virtual_scale, + (SDL_Keymod)(uint16_t)ev.modifiers(), + pointer_to_button_mask(ev.pointer()), + uint8_t(std::min(255, ev.clickCount())), + }, true, {ev}); } -void main_impl::mouseReleaseEvent(Platform::Sdl2Application::MouseEvent& event) +void main_impl::pointerReleaseEvent(PointerEvent& ev) { - app.on_mouse_up_down({event.position() * _virtual_scale, - (SDL_Keymod)(uint16_t)event.modifiers(), - mouse_button(SDL_BUTTON((uint8_t)event.button())), - uint8_t(std::min(255, event.clickCount()))}, - false); + app.on_mouse_up_down({ + ev.position() * _virtual_scale, + (SDL_Keymod)(uint16_t)ev.modifiers(), + pointer_to_button_mask(ev.pointer()), + uint8_t(std::min(255, ev.clickCount())), + }, false, {ev}); } -void main_impl::mouseMoveEvent(Platform::Sdl2Application::MouseMoveEvent& event) +void main_impl::pointerMoveEvent(PointerMoveEvent& ev) { - app.on_mouse_move({event.position() * _virtual_scale, - (mouse_button)(uint8_t)uint32_t{event.buttons()}, - (SDL_Keymod)(uint16_t)event.modifiers()}); + app.on_mouse_move({ + ev.position() * _virtual_scale, + (SDL_Keymod)(uint16_t)ev.modifiers(), + pointer_to_button_mask(ev.pointers()), + ev.isPrimary(), + }, {ev}); } -void main_impl::mouseScrollEvent(Platform::Sdl2Application::MouseScrollEvent& event) +void main_impl::scrollEvent(ScrollEvent& ev) { - app.on_mouse_scroll({event.offset(), event.position() * _virtual_scale, - (SDL_Keymod)(uint16_t)event.modifiers()}); + app.on_mouse_scroll({ + ev.offset(), ev.position() * _virtual_scale, + (SDL_Keymod)(uint16_t)ev.modifiers(), + }, {ev}); } -void main_impl::textInputEvent(Platform::Sdl2Application::TextInputEvent& event) +void main_impl::textInputEvent(TextInputEvent& event) { app.on_text_input_event({event.text()}); } #if 0 -void main_impl::textEditingEvent(Platform::Sdl2Application::TextEditingEvent& event) +void main_impl::textEditingEvent(TextEditingEvent& event) { app.on_text_editing_event({event.text(), event.start(), event.length()}) } #endif -void main_impl::keyPressEvent(Platform::Sdl2Application::KeyEvent& event) -{ - app.on_key_up_down({(SDL_Keycode)(uint32_t)event.key(), - (SDL_Keymod)(uint16_t)event.modifiers(), - event.isRepeated()}, - true); -} - -void main_impl::keyReleaseEvent(Platform::Sdl2Application::KeyEvent& event) +void main_impl::keyPressEvent(KeyEvent& event) { - app.on_key_up_down({(SDL_Keycode)(uint32_t)event.key(), - (SDL_Keymod)(uint16_t)event.modifiers(), - event.isRepeated()}, - false); + app.on_key_up_down({ + (SDL_Keycode)(uint32_t)event.key(), + (SDL_Keymod)(uint16_t)event.modifiers(), + event.isRepeated() + }, true, {event}); } -static any_event make_any_event(const SDL_Event& e) +void main_impl::keyReleaseEvent(KeyEvent& event) { - static_assert(sizeof(SDL_Event) <= sizeof(any_event::buf)); - any_event ret; - std::memcpy(&ret.buf, &e, sizeof(SDL_Event)); - return ret; + app.on_key_up_down({ + (SDL_Keycode)(uint32_t)event.key(), + (SDL_Keymod)(uint16_t)event.modifiers(), + event.isRepeated() + }, false, {event}); } void main_impl::anyEvent(SDL_Event& event) @@ -108,7 +126,7 @@ void main_impl::anyEvent(SDL_Event& event) int floormat_main::get_mods() noexcept { - return (int)SDL_GetModState(); + return SDL_GetModState(); } } // namespace floormat |
