Browse Source

AbstractXContext: added modifiers to key and mouse events.

pull/279/head
Vladimír Vondruš 14 years ago
parent
commit
8f3abe9dad
  1. 8
      src/Contexts/AbstractXContext.cpp
  2. 43
      src/Contexts/AbstractXContext.h

8
src/Contexts/AbstractXContext.cpp

@ -111,16 +111,16 @@ int AbstractXContext::exec() {
/* Key/mouse events */ /* Key/mouse events */
case KeyPress: case KeyPress:
keyPressEvent(static_cast<Key>(XLookupKeysym(&event.xkey, 0)), {event.xkey.x, event.xkey.y}); keyPressEvent(static_cast<Key>(XLookupKeysym(&event.xkey, 0)), static_cast<Modifier>(event.xkey.state), {event.xkey.x, event.xkey.y});
break; break;
case KeyRelease: case KeyRelease:
keyReleaseEvent(static_cast<Key>(XLookupKeysym(&event.xkey, 0)), {event.xkey.x, event.xkey.y}); keyReleaseEvent(static_cast<Key>(XLookupKeysym(&event.xkey, 0)), static_cast<Modifier>(event.xkey.state), {event.xkey.x, event.xkey.y});
break; break;
case ButtonPress: case ButtonPress:
mousePressEvent(static_cast<MouseButton>(event.xbutton.button), {event.xbutton.x, event.xbutton.y}); mousePressEvent(static_cast<MouseButton>(event.xbutton.button), static_cast<Modifier>(event.xkey.state), {event.xbutton.x, event.xbutton.y});
break; break;
case ButtonRelease: case ButtonRelease:
mouseReleaseEvent(static_cast<MouseButton>(event.xbutton.button), {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;
} }
} }

43
src/Contexts/AbstractXContext.h

@ -27,6 +27,8 @@
#undef None #undef None
#undef Always #undef Always
#include <Containers/EnumSet.h>
#include "AbstractContext.h" #include "AbstractContext.h"
#include "AbstractGlInterface.h" #include "AbstractGlInterface.h"
@ -82,6 +84,27 @@ class AbstractXContext: public AbstractContext {
/** @{ @name Keyboard handling */ /** @{ @name Keyboard handling */
public: public:
/**
* @brief %Modifier
*
* @see Modifiers, keyPressEvent(), keyReleaseEvent()
*/
enum class Modifier: unsigned int {
Shift = ShiftMask, /**< Shift */
CapsLock = LockMask, /**< Caps lock */
Ctrl = ControlMask, /**< Ctrl */
Alt = Mod1Mask, /**< Alt */
NumLock = Mod2Mask, /**< Num lock */
AltGr = Mod5Mask /**< AltGr */
};
/**
* @brief Set of modifiers
*
* @see keyPressEvent(), keyReleaseEvent()
*/
typedef Corrade::Containers::EnumSet<Modifier, unsigned int> Modifiers;
/** /**
* @brief Key * @brief Key
* *
@ -161,20 +184,22 @@ class AbstractXContext: public AbstractContext {
/** /**
* @brief Key press event * @brief Key press event
* @param key Key pressed * @param key Key pressed
* @param modifiers Active modifiers
* @param position Cursor position * @param position Cursor position
* *
* Called when an key is pressed. Default implementation does nothing. * Called when an key is pressed. Default implementation does nothing.
*/ */
virtual void keyPressEvent(Key key, const Math::Vector2<int>& position); virtual void keyPressEvent(Key key, Modifiers modifiers, const Math::Vector2<int>& position);
/** /**
* @brief Key press event * @brief Key press event
* @param key Key released * @param key Key released
* @param modifiers Active modifiers
* @param position Cursor position * @param position Cursor position
* *
* Called when an key is released. Default implementation does nothing. * Called when an key is released. Default implementation does nothing.
*/ */
virtual void keyReleaseEvent(Key key, const Math::Vector2<int>& position); virtual void keyReleaseEvent(Key key, Modifiers modifiers, const Math::Vector2<int>& position);
/*@}*/ /*@}*/
@ -198,22 +223,24 @@ class AbstractXContext: public AbstractContext {
/** /**
* @brief Mouse press event * @brief Mouse press event
* @param button Button pressed * @param button Button pressed
* @param modifiers Active modifiers
* @param position Cursor position * @param position Cursor position
* *
* Called when mouse button is pressed. Default implementation does * Called when mouse button is pressed. Default implementation does
* nothing. * nothing.
*/ */
virtual void mousePressEvent(MouseButton button, const Math::Vector2<int>& position); virtual void mousePressEvent(MouseButton button, Modifiers modifiers, const Math::Vector2<int>& position);
/** /**
* @brief Mouse release event * @brief Mouse release event
* @param button Button released * @param button Button released
* @param modifiers Active modifiers
* @param position Cursor position * @param position Cursor position
* *
* Called when mouse button is released. Default implementation does * Called when mouse button is released. Default implementation does
* nothing. * nothing.
*/ */
virtual void mouseReleaseEvent(MouseButton button, const Math::Vector2<int>& position); virtual void mouseReleaseEvent(MouseButton button, Modifiers modifiers, const Math::Vector2<int>& position);
/*@}*/ /*@}*/
@ -230,10 +257,10 @@ class AbstractXContext: public AbstractContext {
bool _redraw; bool _redraw;
}; };
inline void AbstractXContext::keyPressEvent(Key, const Math::Vector2<int>&) {} inline void AbstractXContext::keyPressEvent(Key, Modifiers, const Math::Vector2<int>&) {}
inline void AbstractXContext::keyReleaseEvent(Key, const Math::Vector2<int>&) {} inline void AbstractXContext::keyReleaseEvent(Key, Modifiers, const Math::Vector2<int>&) {}
inline void AbstractXContext::mousePressEvent(MouseButton, const Math::Vector2<int>&) {} inline void AbstractXContext::mousePressEvent(MouseButton, Modifiers, const Math::Vector2<int>&) {}
inline void AbstractXContext::mouseReleaseEvent(MouseButton, const Math::Vector2<int>&) {} inline void AbstractXContext::mouseReleaseEvent(MouseButton, Modifiers, const Math::Vector2<int>&) {}
}} }}

Loading…
Cancel
Save