Browse Source

Platform: add at least some support for wheel events to NaClApplication.

In NaCl the wheel event is something completely different than mouse
event and in my opinion overly complicated (the scrolled distance is
measured in pixel precision!).

To preserve at least some compatibility with other toolkits, the events
are shoved into normal MouseEvent. Sadly the event doesn't contain any
position information.
pull/38/head
Vladimír Vondruš 13 years ago
parent
commit
0204669735
  1. 16
      src/Platform/NaClApplication.cpp
  2. 12
      src/Platform/NaClApplication.h

16
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<Float>::equals(wheelEvent.GetDelta().y(), 0.0f)) return false;
MouseEvent e(wheelEvent.GetDelta().y() > 0 ? MouseEvent::Button::WheelUp : MouseEvent::Button::WheelDown, {}, static_cast<InputEvent::Modifier>(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<InputEvent::Modifier>(mouseEvent.GetModifiers()));

12
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:

Loading…
Cancel
Save