1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120 | /********************************************************************
*
* Created: 8/4/2014 11:15
*
* File: fsIGestureHandlingComponent.h
*
* Author: Mick Waites
*
* Purpose: Base class for components which accept translated
* input.
*
*********************************************************************/
#ifndef fsIGestureHandlingComponenthdr
#define fsIGestureHandlingComponenthdr
#include <vector>
#include "fsIMessageListenerComponent.h"
#include "../../fsIInputManager.h"
struct fsPoint;
class fsCEntity;
class fsIGestureHandlingComponent : public fsIMessageListenerComponent
{
public:
fsBool hitTest(const fsPoint& pPos) const;
protected:
struct sGesturePoint
{
sGesturePoint() : mInGesture(false)
{
}
fsPoint mPrevPos;
fsBool mInGesture;
};
enum
{
eSTATE_NOT_IN_GESTURE = 0,
eSTATE_MOUSE_OVER,
eSTATE_EVALUATING_GESTURE_TYPE,
eSTATE_IN_TAP_GESTURE,
eSTATE_IN_DRAG_GESTURE,
eSTATE_IN_PINCH_GESTURE,
eSTATE_WAITING_FOR_ALL_POINTS_TO_RELEASE
};
virtual void stolenInputDo();
void gestureTypesSet(fsBool pHandleTaps, fsBool pHandleDragEvent, fsBool pHandlePinchEvents);
fsBool messageProcessDo(const fsCUniqueId& pMessageType,
const fsIMessageDispatcher::sMessageParameters& pParam) override;
void listenersRegisterDo() override;
void listenersDeregisterDo() override;
void gestureReset();
fsIGestureHandlingComponent(fsCEntity* pParent, fsBool pHandleTaps, fsBool pHandleDragEvent,
fsBool pHandlePinchEvents);
virtual ~fsIGestureHandlingComponent();<--- Destructor in derived class
std::vector<sGesturePoint> mGesturePoints;
fsS32 mGestureState;
fsS32 mNumPointsDown;
fsBool mHighlighted;
private:
virtual fsBool hitTestDo(const fsPoint& pPos) const;
virtual fsBool acceptingInputGet() const = 0;
virtual fsBool highlightSetDo() { return false; }
virtual void onTap(const fsPoint& pStartPos) {}
virtual void onDragStart(const fsPoint& pStartPos) {}
virtual void onDragMove(const fsPoint& pCurrPos) {}
virtual void onDragEnd(const fsPoint& pEndPos) {}
virtual void onPinchStart(const fsPoint& pStartPosPointA, const fsPoint& pStartPosPointB) {}
virtual void onPinchMove(const fsPoint& pCurrPos, const fsPoint& pDelta, fsS32 pPointID) {}
virtual void onPinchEnd(const fsPoint& pCurrPos, const fsPoint& pDelta, fsS32 pPointID) {}
fsBool dragMessageStolen(const fsCUniqueId& pMessageType, const fsIMessageDispatcher::sMessageParameters& pParam);
fsBool downStealProcess(const fsIInputManager::sPointerMsgParam& pParam);
fsBool pointerDownProcess(const fsIInputManager::sPointerMsgParam& pParam);
fsBool pointerMoveProcess(const fsPoint& pPos, fsS32 pPtrIndex, fsBool pPtrDown);
fsBool pointerUpProcess(const fsPoint& pPos, fsS32 pPtrIndex);
fsBool gestureStartProcess(const fsIInputManager::sPointerMsgParam& pParam);
fsBool mouseMoveProcess(const fsPoint& pPos);
void tapEndProcess(const fsPoint& pPos);
void tapStartProcess(const fsPoint& pPos, fsS32 pPtrIndex);
void dragStartProcess(const fsPoint& pPos, fsS32 pPtrIndex);
void dragEndProcess(const fsPoint& pPos, fsS32 pPtrIndex);
void pinchEndProcess(const fsPoint& pPos, fsS32 pPtrIndex);
void pinchStartProcess(const fsPoint& pPos, fsS32 pPtrIndex);
fsBool highlightSet(fsBool pHighlight);
static const fsS32 mDragDistanceThreshold = 16;
const fsBool mMousePointerType;
fsBool mHandleTaps;
fsBool mHandleDragEvents;
fsBool mHandlePinchEvents;
};
#endif
|