diff --git a/src/Platform/NaClApplication.cpp b/src/Platform/NaClApplication.cpp index 4e8385543..9272fc581 100644 --- a/src/Platform/NaClApplication.cpp +++ b/src/Platform/NaClApplication.cpp @@ -34,6 +34,13 @@ namespace Magnum { namespace Platform { +static_assert(NaClApplication::MouseEvent::Button::WheelUp != NaClApplication::MouseEvent::Button::Left && + NaClApplication::MouseEvent::Button::WheelUp != NaClApplication::MouseEvent::Button::Middle && + NaClApplication::MouseEvent::Button::WheelUp != NaClApplication::MouseEvent::Button::Right && + NaClApplication::MouseEvent::Button::WheelDown != NaClApplication::MouseEvent::Button::Left && + NaClApplication::MouseEvent::Button::WheelDown != NaClApplication::MouseEvent::Button::Middle && + NaClApplication::MouseEvent::Button::WheelDown != NaClApplication::MouseEvent::Button::Right, ""); + struct NaClApplication::ConsoleDebugOutput { explicit ConsoleDebugOutput(pp::Instance* instance); @@ -195,6 +202,15 @@ bool NaClApplication::HandleInputEvent(const pp::InputEvent& event) { break; } + case PP_INPUTEVENT_TYPE_WHEEL: { + pp::WheelInputEvent wheelEvent(event); + if(Math::TypeTraits::equals(wheelEvent.GetDelta().y(), 0.0f)) return false; + MouseEvent e(wheelEvent.GetDelta().y() > 0 ? MouseEvent::Button::WheelUp : MouseEvent::Button::WheelDown, {}, static_cast(wheelEvent.GetModifiers())); + mousePressEvent(e); + if(!e.isAccepted()) return false; + break; + } + case PP_INPUTEVENT_TYPE_MOUSEMOVE: { pp::MouseInputEvent mouseEvent(event); MouseMoveEvent e({mouseEvent.GetPosition().x(), mouseEvent.GetPosition().y()}, {mouseEvent.GetMovement().x(), mouseEvent.GetMovement().y()}, static_cast(mouseEvent.GetModifiers())); diff --git a/src/Platform/NaClApplication.h b/src/Platform/NaClApplication.h index 0377f76b8..d09e62605 100644 --- a/src/Platform/NaClApplication.h +++ b/src/Platform/NaClApplication.h @@ -612,13 +612,21 @@ class NaClApplication::MouseEvent: public NaClApplication::InputEvent { enum class Button: unsigned int { Left = PP_INPUTEVENT_MOUSEBUTTON_LEFT, /**< Left button */ Middle = PP_INPUTEVENT_MOUSEBUTTON_MIDDLE, /**< Middle button */ - Right = PP_INPUTEVENT_MOUSEBUTTON_RIGHT /**< Right button */ + Right = PP_INPUTEVENT_MOUSEBUTTON_RIGHT, /**< Right button */ + WheelUp = 0xFFFF01, /**< Wheel up */ + WheelDown = 0xFFFF02 /**< Wheel down */ }; /** @brief Button */ constexpr Button button() const { return _button; } - /** @brief Position */ + /** + * @brief Position + * + * @attention Note that due to the way the @ref Button::WheelUp and + * @ref Button::WheelDown events are handled by Native Client, the + * position information is not available, i.e. it is set to zero. + */ constexpr Vector2i position() const { return _position; } private: