summaryrefslogtreecommitdiffhomepage
path: root/main/events.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'main/events.cpp')
-rw-r--r--main/events.cpp100
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