summaryrefslogtreecommitdiffhomepage
path: root/main
diff options
context:
space:
mode:
Diffstat (limited to 'main')
-rw-r--r--main/events.cpp100
-rw-r--r--main/main-impl.hpp9
-rw-r--r--main/sdl-fwd.hpp11
-rw-r--r--main/sdl-fwd.inl15
4 files changed, 90 insertions, 45 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
diff --git a/main/main-impl.hpp b/main/main-impl.hpp
index 3fb8bac5..17aecc72 100644
--- a/main/main-impl.hpp
+++ b/main/main-impl.hpp
@@ -9,6 +9,7 @@
#include "shaders/texture-unit-cache.hpp"
#include "shaders/shader.hpp"
#include "shaders/lightmap.hpp"
+#include "main/sdl-fwd.hpp"
#include "main/clickable.hpp"
#include <Corrade/Containers/Array.h>
#include <Corrade/Containers/String.h>
@@ -76,10 +77,10 @@ struct main_impl final : private Platform::Sdl2Application, public floormat_main
const Platform::Sdl2Application& application() const noexcept override;
[[maybe_unused]] void viewportEvent(ViewportEvent& event) override;
- [[maybe_unused]] void mousePressEvent(MouseEvent& event) override;
- [[maybe_unused]] void mouseReleaseEvent(MouseEvent& event) override;
- [[maybe_unused]] void mouseMoveEvent(MouseMoveEvent& event) override;
- [[maybe_unused]] void mouseScrollEvent(MouseScrollEvent& event) override;
+ [[maybe_unused]] void pointerPressEvent(PointerEvent& ev) override;
+ [[maybe_unused]] void pointerReleaseEvent(PointerEvent& ev) override;
+ [[maybe_unused]] void pointerMoveEvent(PointerMoveEvent& ev) override;
+ [[maybe_unused]] void scrollEvent(ScrollEvent& ev) override;
[[maybe_unused]] void textInputEvent(TextInputEvent& event) override;
//[[maybe_unused]] void textEditingEvent(TextEditingEvent& event) override;
[[maybe_unused]] void keyPressEvent(KeyEvent& event) override;
diff --git a/main/sdl-fwd.hpp b/main/sdl-fwd.hpp
new file mode 100644
index 00000000..776ec0a8
--- /dev/null
+++ b/main/sdl-fwd.hpp
@@ -0,0 +1,11 @@
+#pragma once
+
+namespace floormat::sdl2 {
+
+struct EvButtons;
+struct EvClick;
+struct EvMove;
+struct EvScroll;
+struct EvKey;
+
+} // namespace floormat::sdl2
diff --git a/main/sdl-fwd.inl b/main/sdl-fwd.inl
new file mode 100644
index 00000000..25bc45ee
--- /dev/null
+++ b/main/sdl-fwd.inl
@@ -0,0 +1,15 @@
+#pragma once
+#include "sdl-fwd.hpp"
+#include <Magnum/Platform/Sdl2Application.h>
+
+namespace floormat::sdl2 {
+
+using App = Platform::Sdl2Application;
+
+struct EvButtons { App::Pointer& val; };
+struct EvClick { App::PointerEvent& val; };
+struct EvMove { App::PointerMoveEvent& val; };
+struct EvScroll { App::ScrollEvent& val; };
+struct EvKey { App::KeyEvent& val; };
+
+} // namespace floormat::sdl2