Browse Source

AbstractXContext: added support for mouse motion event.

vectorfields
Vladimír Vondruš 14 years ago
parent
commit
dd5635a3ab
  1. 7
      src/Contexts/AbstractXContext.cpp
  2. 18
      src/Contexts/AbstractXContext.h

7
src/Contexts/AbstractXContext.cpp

@ -20,7 +20,7 @@
#define None 0L // redef Xlib nonsense #define None 0L // redef Xlib nonsense
/* Mask for X events */ /* Mask for X events */
#define INPUT_MASK KeyPressMask|KeyReleaseMask|ButtonPressMask|ButtonReleaseMask|StructureNotifyMask #define INPUT_MASK KeyPressMask|KeyReleaseMask|ButtonPressMask|ButtonReleaseMask|PointerMotionMask|StructureNotifyMask
using namespace std; using namespace std;
@ -122,6 +122,11 @@ int AbstractXContext::exec() {
case ButtonRelease: case ButtonRelease:
mouseReleaseEvent(static_cast<MouseButton>(event.xbutton.button), static_cast<Modifier>(event.xkey.state), {event.xbutton.x, event.xbutton.y}); mouseReleaseEvent(static_cast<MouseButton>(event.xbutton.button), static_cast<Modifier>(event.xkey.state), {event.xbutton.x, event.xbutton.y});
break; break;
/* Mouse move events */
case MotionNotify:
mouseMotionEvent(static_cast<Modifier>(event.xmotion.state), {event.xmotion.x, event.xmotion.y});
break;
} }
} }

18
src/Contexts/AbstractXContext.h

@ -91,7 +91,7 @@ class AbstractXContext: public AbstractContext {
* @brief %Modifier * @brief %Modifier
* *
* @see Modifiers, keyPressEvent(), keyReleaseEvent(), * @see Modifiers, keyPressEvent(), keyReleaseEvent(),
* mousePressEvent(), mouseReleaseEvent() * mousePressEvent(), mouseReleaseEvent(), mouseMotionEvent()
*/ */
enum class Modifier: unsigned int { enum class Modifier: unsigned int {
Shift = ShiftMask, /**< Shift */ Shift = ShiftMask, /**< Shift */
@ -99,7 +99,11 @@ class AbstractXContext: public AbstractContext {
Ctrl = ControlMask, /**< Ctrl */ Ctrl = ControlMask, /**< Ctrl */
Alt = Mod1Mask, /**< Alt */ Alt = Mod1Mask, /**< Alt */
NumLock = Mod2Mask, /**< Num lock */ NumLock = Mod2Mask, /**< Num lock */
AltGr = Mod5Mask /**< AltGr */ AltGr = Mod5Mask, /**< AltGr */
LeftButton = Button1Mask, /**< Left mouse button */
MiddleButton = Button2Mask, /**< Middle mouse button */
RightButton = Button3Mask /**< Right mouse button */
}; };
/** /**
@ -248,6 +252,15 @@ class AbstractXContext: public AbstractContext {
*/ */
virtual void mouseReleaseEvent(MouseButton button, Modifiers modifiers, const Math::Vector2<int>& position); virtual void mouseReleaseEvent(MouseButton button, Modifiers modifiers, const Math::Vector2<int>& position);
/**
* @brief Mouse motion event
* @param modifiers Active modifiers
* @param position Cursor position
*
* Called when mouse is moved.
*/
virtual void mouseMotionEvent(Modifiers modifiers, const Math::Vector2<int>& position);
/*@}*/ /*@}*/
private: private:
@ -279,6 +292,7 @@ inline void AbstractXContext::keyPressEvent(Key, Modifiers, const Math::Vector2<
inline void AbstractXContext::keyReleaseEvent(Key, Modifiers, const Math::Vector2<int>&) {} inline void AbstractXContext::keyReleaseEvent(Key, Modifiers, const Math::Vector2<int>&) {}
inline void AbstractXContext::mousePressEvent(MouseButton, Modifiers, const Math::Vector2<int>&) {} inline void AbstractXContext::mousePressEvent(MouseButton, Modifiers, const Math::Vector2<int>&) {}
inline void AbstractXContext::mouseReleaseEvent(MouseButton, Modifiers, const Math::Vector2<int>&) {} inline void AbstractXContext::mouseReleaseEvent(MouseButton, Modifiers, const Math::Vector2<int>&) {}
inline void AbstractXContext::mouseMotionEvent(Modifiers, const Math::Vector2<int>&) {}
}} }}

Loading…
Cancel
Save