From a1163ed56d96a5d2a3cdd59fb6abf2e3a3fedf12 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Sun, 20 Oct 2013 18:15:40 +0200 Subject: [PATCH] Platform: capture pressed buttons in Sdl2Application::MouseMoveEvent. It's implemented separately from keyboard modifiers (Qt has it similarly). --- src/Platform/Sdl2Application.cpp | 2 +- src/Platform/Sdl2Application.h | 27 ++++++++++++++++++++++++++- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/src/Platform/Sdl2Application.cpp b/src/Platform/Sdl2Application.cpp index b4991654f..cb2e71224 100644 --- a/src/Platform/Sdl2Application.cpp +++ b/src/Platform/Sdl2Application.cpp @@ -204,7 +204,7 @@ void Sdl2Application::mainLoop() { } break; case SDL_MOUSEMOTION: { - MouseMoveEvent e({event.motion.x, event.motion.y}, {event.motion.xrel, event.motion.yrel}); + MouseMoveEvent e({event.motion.x, event.motion.y}, {event.motion.xrel, event.motion.yrel}, static_cast(event.motion.state)); mouseMoveEvent(e); break; } diff --git a/src/Platform/Sdl2Application.h b/src/Platform/Sdl2Application.h index 8b1c58177..b3f077451 100644 --- a/src/Platform/Sdl2Application.h +++ b/src/Platform/Sdl2Application.h @@ -557,6 +557,26 @@ class Sdl2Application::MouseMoveEvent: public Sdl2Application::InputEvent { friend class Sdl2Application; public: + /** + * @brief Mouse button + * + * @see @ref Buttons, @ref buttons() + */ + enum class Button: Uint32 { + Left = SDL_BUTTON_LMASK, /**< Left button */ + Middle = SDL_BUTTON_MMASK, /**< Middle button */ + Right = SDL_BUTTON_RMASK, /**< Right button */ + WheelUp = SDL_BUTTON_X1MASK, /**< Wheel up */ + WheelDown = SDL_BUTTON_X2MASK /**< Wheel down */ + }; + + /** + * @brief Set of mouse buttons + * + * @see @ref buttons() + */ + typedef Containers::EnumSet Buttons; + /** @brief Position */ constexpr Vector2i position() const { return _position; } @@ -567,6 +587,9 @@ class Sdl2Application::MouseMoveEvent: public Sdl2Application::InputEvent { */ constexpr Vector2i relativePosition() const { return _relativePosition; } + /** @brief Mouse buttons */ + constexpr Buttons buttons() const { return _buttons; } + /** * @brief Modifiers * @@ -575,10 +598,11 @@ class Sdl2Application::MouseMoveEvent: public Sdl2Application::InputEvent { Modifiers modifiers(); private: - constexpr MouseMoveEvent(const Vector2i& position, const Vector2i& relativePosition): _position(position), _relativePosition(relativePosition), modifiersLoaded(false) {} + constexpr MouseMoveEvent(const Vector2i& position, const Vector2i& relativePosition, Buttons buttons): _position(position), _relativePosition(relativePosition), modifiersLoaded(false), _buttons(buttons) {} const Vector2i _position, _relativePosition; bool modifiersLoaded; + Buttons _buttons; Modifiers _modifiers; }; @@ -614,6 +638,7 @@ typedef Sdl2Application Application; #endif CORRADE_ENUMSET_OPERATORS(Sdl2Application::InputEvent::Modifiers) +CORRADE_ENUMSET_OPERATORS(Sdl2Application::MouseMoveEvent::Buttons) /* Implementations for inline functions with unused parameters */ inline void Sdl2Application::keyPressEvent(KeyEvent&) {}