00001
00002
00003 #ifndef __EVENT_H_
00004 #define __EVENT_H_
00005
00006 #include <NvFoundation.h>
00007
00013
00014 #define NV_GESTURE_UID_INVALID 0xFFFFFFFF
00015 #define NV_GESTURE_UID_MAX 0xFFFFEEEE
00016 typedef uint32_t NvGestureUID;
00017
00018
00019
00024 struct NvInputEventClass {
00025 enum Enum {
00026 NONE = 0,
00027 MOUSE,
00028 TOUCH,
00029 STYLUS,
00030 };
00031 };
00032
00034 struct NvInputEventType {
00035 enum Enum {
00036 HOVER = 0,
00037 DOWN,
00038 MOVE,
00039 UP,
00040 };
00041 };
00042
00043
00044
00045 #define HANDLE_MAYBE_GESTURES
00046
00047
00048
00049
00050
00052 struct NvGestureKind {
00053 enum Enum
00054 {
00057 MASK_BASE = 0x00FF,
00058 MASK_HELD = 0x0100,
00059 MASK_RELEASED = 0x0200,
00060 MASK_MOVED = 0x0400,
00061 MASK_MULTI = 0x0800,
00062 #ifdef HANDLE_MAYBE_GESTURES
00063 MASK_MAYBE = 0x1000,
00064 #endif
00065 MASK_REPEAT_DOUBLE = 0x2000,
00066 MASK_REPEAT_TRIPLE = 0x4000,
00072 INVALID = -1,
00073
00075 NONE = 0,
00077 HOVER = 1,
00079 PRESS = 3,
00081 HOLD = 4 | MASK_HELD,
00082
00083
00084
00086 RELEASE = 6 | MASK_RELEASED,
00087
00088 #ifdef HANDLE_MAYBE_GESTURES
00089
00090 MAYBE_TAP = 8 | MASK_RELEASED | MASK_MAYBE,
00091 #endif
00092
00093 TAP = 9 | MASK_RELEASED,
00095 DRAG = 10 | MASK_MOVED,
00097 FLICK = 11 | MASK_MOVED | MASK_RELEASED,
00098
00099 #ifdef HANDLE_PLUS_GESTURES
00100
00101 TAP_PLUS_PRESS = 12,
00102 #endif
00103
00105
00106
00107
00108
00110 DOUBLETAP = TAP | MASK_REPEAT_DOUBLE,
00111
00113
00114
00115 #if HANDLE_MULTI_GESTURES
00116
00117 MULTI_TAP = TAP | MASK_MULTI,
00118
00119
00120
00121 MULTI_ZOOM = DRAG | MASK_MULTI,
00122 #endif
00123
00124 };
00125 };
00126
00127
00128
00130 class NvGestureEvent
00131 {
00132 public:
00133 NvGestureUID uid;
00134 NvGestureKind::Enum kind;
00135 NvInputEventClass::Enum type;
00137
00138 uint8_t index;
00139
00140
00141 float x;
00142 float y;
00144
00145
00146
00147
00148
00149 float dx;
00150 float dy;
00152
00153
00154
00161 NvGestureEvent(NvInputEventClass::Enum intype, NvGestureKind::Enum inkind, float inx, float iny)
00162 {
00163 if (inkind == NvGestureKind::PRESS)
00164 uid = InternalGetNextUID();
00165 else
00166 uid = lastID;
00167 kind = inkind;
00168 type = intype;
00169 index = 0;
00170
00171 x = inx;
00172 y = iny;
00173 dx = 0;
00174 dy = 0;
00175 };
00176
00177 private:
00178 static NvGestureUID lastID;
00179
00180 static NvGestureUID InternalGetNextUID()
00181 {
00182 lastID++;
00183 if (lastID > NV_GESTURE_UID_MAX)
00184 lastID = 1;
00185 return lastID;
00186 };
00187 };
00188
00189 #endif
00190