34 #ifndef __CU_MOUSE_H__
35 #define __CU_MOUSE_H__
37 #include <cugl/input/CUInput.h>
38 #include <cugl/math/CURect.h>
39 #include <cugl/math/CUVec2.h>
42 #define SDL_BUTTON_ALLMASK ((1 << 6) - 1)
70 #pragma mark Constructors
89 bool hasLeft()
const {
return (_state & SDL_BUTTON_LMASK) != 0; }
96 bool hasMiddle()
const {
return (_state & SDL_BUTTON_MMASK) != 0; }
103 bool hasRight()
const {
return (_state & SDL_BUTTON_RMASK) != 0; }
113 bool hasX1()
const {
return (_state & SDL_BUTTON_X1MASK) != 0; }
123 bool hasX2()
const {
return (_state & SDL_BUTTON_X2MASK) != 0; }
130 void setLeft(
bool value) { toggle(SDL_BUTTON_LMASK,value); }
137 void setMiddle(
bool value) { toggle(SDL_BUTTON_MMASK,value); }
144 void setRight(
bool value) { toggle(SDL_BUTTON_RMASK,value); }
154 void setX1(
bool value) { toggle(SDL_BUTTON_X1MASK,value); }
164 void setX2(
bool value) { toggle(SDL_BUTTON_X2MASK,value); }
167 #pragma mark Bitwise Operations
180 _state &= mouse._state;
196 _state |= mouse._state;
213 _state ^= mouse._state;
229 _state &= ~mouse._state;
315 void toggle(Uint32 bmask,
bool value) {
316 _state = (value ? _state | bmask : _state & ~bmask);
320 friend class MouseEvent;
350 buttons._state = state; timestamp = stamp; position = point;
385 direction = offset; timestamp = stamp; flipped = flip;
436 #pragma mark Listeners
470 typedef std::function<void(const MouseEvent& event, Uint8 clicks, bool focus)>
ButtonListener;
502 typedef std::function<void(const MouseEvent& event, const Vec2& previous, bool focus)>
MotionListener;
529 typedef std::function<void(const MouseWheelEvent& event, bool focus)>
WheelListener;
559 #pragma mark Constructor
581 virtual void dispose()
override;
613 #pragma mark Data Polling
667 #pragma mark Listeners
920 #pragma mark Input Device
952 virtual void queryEvents(std::vector<Uint32>& eventset)
override;
bool removePressListener(Uint32 key)
bool flipped
Definition: CUMouse.h:370
virtual ~Mouse()
Definition: CUMouse.h:574
Vec2 _lastPoint
Definition: CUMouse.h:541
std::function< void(const MouseEvent &event, Uint8 clicks, bool focus)> ButtonListener
Definition: CUMouse.h:470
const WheelListener getWheelListener(Uint32 key) const
ButtonState buttonReleased() const
Definition: CUMouse.h:640
bool removeWheelListener(Uint32 key)
bool addMotionListener(Uint32 key, MotionListener listener)
Definition: CUTimestamp.h:61
std::function< void(const MouseWheelEvent &event, bool focus)> WheelListener
Definition: CUMouse.h:529
Definition: CUMouse.h:328
ButtonState buttonUp() const
Definition: CUMouse.h:626
std::unordered_map< Uint32, ButtonListener > _releaseListeners
Definition: CUMouse.h:551
const MotionListener getMotionListener(Uint32 key) const
Definition: CUMouse.h:417
bool addPressListener(Uint32 key, ButtonListener listener)
Timestamp timestamp
Definition: CUMouse.h:331
bool isListener(Uint32 key) const
Vec2 pointerOffset() const
Definition: CUMouse.h:656
std::unordered_map< Uint32, MotionListener > _dragListeners
Definition: CUMouse.h:555
std::unordered_map< Uint32, WheelListener > _wheelListeners
Definition: CUMouse.h:557
virtual void clearState() override
MouseWheelEvent()
Definition: CUMouse.h:375
Vec2 _wheelOffset
Definition: CUMouse.h:546
const ButtonListener getReleaseListener(Uint32 key) const
bool removeDragListener(Uint32 key)
bool removeReleaseListener(Uint32 key)
Mouse()
Definition: CUMouse.h:569
virtual bool updateState(const SDL_Event &event, const Timestamp &stamp) override
ButtonState _currState
Definition: CUMouse.h:538
PointerAwareness getPointerAwareness() const
Definition: CUMouse.h:594
virtual void dispose() override
ButtonState buttons
Definition: CUMouse.h:333
Vec2 _currPoint
Definition: CUMouse.h:543
MouseEvent()
Definition: CUMouse.h:340
std::unordered_map< Uint32, ButtonListener > _pressListeners
Definition: CUMouse.h:549
PointerAwareness
Definition: CUMouse.h:427
ButtonState buttonPressed() const
Definition: CUMouse.h:633
const MotionListener getDragListener(Uint32 key) const
Vec2 pointerPosition() const
Definition: CUMouse.h:647
Vec2 direction
Definition: CUMouse.h:368
Vec2 wheelDirection() const
Definition: CUMouse.h:665
bool addDragListener(Uint32 key, MotionListener listener)
Vec2 position
Definition: CUMouse.h:335
bool addReleaseListener(Uint32 key, ButtonListener listener)
void setPointerAwareness(PointerAwareness awareness)
Definition: CUMouse.h:610
PointerAwareness _awareness
Definition: CUMouse.h:533
virtual bool requestFocus(Uint32 key) override
ButtonState buttonDown() const
Definition: CUMouse.h:619
MouseWheelEvent(const Vec2 &offset, const Timestamp &stamp, bool flip=false)
Definition: CUMouse.h:384
bool addWheelListener(Uint32 key, WheelListener listener)
Definition: CUMouse.h:363
virtual void queryEvents(std::vector< Uint32 > &eventset) override
Definition: CUAction.h:51
MouseEvent(Uint32 state, const Vec2 &point, const Timestamp &stamp)
Definition: CUMouse.h:349
Timestamp timestamp
Definition: CUMouse.h:366
const ButtonListener getPressListener(Uint32 key) const
ButtonState _lastState
Definition: CUMouse.h:536
std::function< void(const MouseEvent &event, const Vec2 &previous, bool focus)> MotionListener
Definition: CUMouse.h:502
bool removeMotionListener(Uint32 key)
std::unordered_map< Uint32, MotionListener > _moveListeners
Definition: CUMouse.h:553