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
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
|
/**
* This file has no copyright assigned and is placed in the Public Domain.
* This file is part of the mingw-w64 runtime package.
* No warranty is given; refer to the file DISCLAIMER.PD within this package.
*/
#ifndef INTERACTION_CONTEXT_H
#define INTERACTION_CONTEXT_H
#include <winapifamily.h>
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
#include <float.h>
#include <windows.h>
#if defined(__cplusplus)
extern "C" {
#endif
#if (NTDDI_VERSION >= NTDDI_WIN8)
typedef enum INTERACTION_ID {
INTERACTION_ID_NONE = 0x00000000,
INTERACTION_ID_MANIPULATION = 0x00000001,
INTERACTION_ID_TAP = 0x00000002,
INTERACTION_ID_SECONDARY_TAP = 0x00000003,
INTERACTION_ID_HOLD = 0x00000004,
INTERACTION_ID_DRAG = 0x00000005,
INTERACTION_ID_CROSS_SLIDE = 0x00000006,
INTERACTION_ID_MAX = 0xffffffff
} INTERACTION_ID;
typedef enum INTERACTION_FLAGS {
INTERACTION_FLAG_NONE = 0x00000000,
INTERACTION_FLAG_BEGIN = 0x00000001,
INTERACTION_FLAG_END = 0x00000002,
INTERACTION_FLAG_CANCEL = 0x00000004,
INTERACTION_FLAG_INERTIA = 0x00000008,
INTERACTION_FLAG_MAX = 0xffffffff
} INTERACTION_FLAGS;
DEFINE_ENUM_FLAG_OPERATORS(INTERACTION_FLAGS);
typedef enum INTERACTION_CONFIGURATION_FLAGS {
INTERACTION_CONFIGURATION_FLAG_NONE = 0x00000000,
INTERACTION_CONFIGURATION_FLAG_MANIPULATION = 0x00000001,
INTERACTION_CONFIGURATION_FLAG_MANIPULATION_TRANSLATION_X = 0x00000002,
INTERACTION_CONFIGURATION_FLAG_MANIPULATION_TRANSLATION_Y = 0x00000004,
INTERACTION_CONFIGURATION_FLAG_MANIPULATION_ROTATION = 0x00000008,
INTERACTION_CONFIGURATION_FLAG_MANIPULATION_SCALING = 0x00000010,
INTERACTION_CONFIGURATION_FLAG_MANIPULATION_TRANSLATION_INERTIA = 0x00000020,
INTERACTION_CONFIGURATION_FLAG_MANIPULATION_ROTATION_INERTIA = 0x00000040,
INTERACTION_CONFIGURATION_FLAG_MANIPULATION_SCALING_INERTIA = 0x00000080,
INTERACTION_CONFIGURATION_FLAG_MANIPULATION_RAILS_X = 0x00000100,
INTERACTION_CONFIGURATION_FLAG_MANIPULATION_RAILS_Y = 0x00000200,
INTERACTION_CONFIGURATION_FLAG_MANIPULATION_EXACT = 0x00000400,
INTERACTION_CONFIGURATION_FLAG_MANIPULATION_MULTIPLE_FINGER_PANNING = 0x00000800,
INTERACTION_CONFIGURATION_FLAG_CROSS_SLIDE = 0x00000001,
INTERACTION_CONFIGURATION_FLAG_CROSS_SLIDE_HORIZONTAL = 0x00000002,
INTERACTION_CONFIGURATION_FLAG_CROSS_SLIDE_SELECT = 0x00000004,
INTERACTION_CONFIGURATION_FLAG_CROSS_SLIDE_SPEED_BUMP = 0x00000008,
INTERACTION_CONFIGURATION_FLAG_CROSS_SLIDE_REARRANGE = 0x00000010,
INTERACTION_CONFIGURATION_FLAG_CROSS_SLIDE_EXACT = 0x00000020,
INTERACTION_CONFIGURATION_FLAG_TAP = 0x00000001,
INTERACTION_CONFIGURATION_FLAG_TAP_DOUBLE = 0x00000002
#if (NTDDI_VERSION >= NTDDI_WIN10_VB)
,INTERACTION_CONFIGURATION_FLAG_TAP_MULTIPLE_FINGER = 0x00000004
#endif
,INTERACTION_CONFIGURATION_FLAG_SECONDARY_TAP = 0x00000001
,INTERACTION_CONFIGURATION_FLAG_HOLD = 0x00000001
,INTERACTION_CONFIGURATION_FLAG_HOLD_MOUSE = 0x00000002
#if (NTDDI_VERSION >= NTDDI_WIN10_VB)
,INTERACTION_CONFIGURATION_FLAG_HOLD_MULTIPLE_FINGER = 0x00000004
#endif
,INTERACTION_CONFIGURATION_FLAG_DRAG = 0x00000001
,INTERACTION_CONFIGURATION_FLAG_MAX = 0xffffffff
} INTERACTION_CONFIGURATION_FLAGS;
DEFINE_ENUM_FLAG_OPERATORS(INTERACTION_CONFIGURATION_FLAGS);
typedef enum INERTIA_PARAMETER {
INERTIA_PARAMETER_TRANSLATION_DECELERATION = 0x00000001,
INERTIA_PARAMETER_TRANSLATION_DISPLACEMENT = 0x00000002,
INERTIA_PARAMETER_ROTATION_DECELERATION = 0x00000003,
INERTIA_PARAMETER_ROTATION_ANGLE = 0x00000004,
INERTIA_PARAMETER_EXPANSION_DECELERATION = 0x00000005,
INERTIA_PARAMETER_EXPANSION_EXPANSION = 0x00000006,
INERTIA_PARAMETER_MAX = 0xffffffff
} INERTIA_PARAMETER;
typedef enum INTERACTION_STATE {
INTERACTION_STATE_IDLE = 0x00000000,
INTERACTION_STATE_IN_INTERACTION = 0x00000001,
INTERACTION_STATE_POSSIBLE_DOUBLE_TAP = 0x00000002,
INTERACTION_STATE_MAX = 0xffffffff
} INTERACTION_STATE;
typedef enum INTERACTION_CONTEXT_PROPERTY {
INTERACTION_CONTEXT_PROPERTY_MEASUREMENT_UNITS = 0x00000001,
INTERACTION_CONTEXT_PROPERTY_INTERACTION_UI_FEEDBACK = 0x00000002,
INTERACTION_CONTEXT_PROPERTY_FILTER_POINTERS = 0x00000003,
INTERACTION_CONTEXT_PROPERTY_MAX = 0xffffffff
} INTERACTION_CONTEXT_PROPERTY;
typedef enum CROSS_SLIDE_THRESHOLD {
CROSS_SLIDE_THRESHOLD_SELECT_START = 0x00000000,
CROSS_SLIDE_THRESHOLD_SPEED_BUMP_START = 0x00000001,
CROSS_SLIDE_THRESHOLD_SPEED_BUMP_END = 0x00000002,
CROSS_SLIDE_THRESHOLD_REARRANGE_START = 0x00000003,
CROSS_SLIDE_THRESHOLD_COUNT = 0x00000004,
CROSS_SLIDE_THRESHOLD_MAX = 0xffffffff
} CROSS_SLIDE_THRESHOLD;
#define CROSS_SLIDE_THRESHOLD_INVALID_VALUE FLT_MAX
typedef enum CROSS_SLIDE_FLAGS {
CROSS_SLIDE_FLAGS_NONE = 0x00000000,
CROSS_SLIDE_FLAGS_SELECT = 0x00000001,
CROSS_SLIDE_FLAGS_SPEED_BUMP = 0x00000002,
CROSS_SLIDE_FLAGS_REARRANGE = 0x00000004,
CROSS_SLIDE_FLAGS_MAX = 0xffffffff
} CROSS_SLIDE_FLAGS;
DEFINE_ENUM_FLAG_OPERATORS(CROSS_SLIDE_FLAGS);
typedef enum MOUSE_WHEEL_PARAMETER {
MOUSE_WHEEL_PARAMETER_CHAR_TRANSLATION_X = 0x00000001,
MOUSE_WHEEL_PARAMETER_CHAR_TRANSLATION_Y = 0x00000002,
MOUSE_WHEEL_PARAMETER_DELTA_SCALE = 0x00000003,
MOUSE_WHEEL_PARAMETER_DELTA_ROTATION = 0x00000004,
MOUSE_WHEEL_PARAMETER_PAGE_TRANSLATION_X = 0x00000005,
MOUSE_WHEEL_PARAMETER_PAGE_TRANSLATION_Y = 0x00000006,
MOUSE_WHEEL_PARAMETER_MAX = 0xffffffff
} MOUSE_WHEEL_PARAMETER;
#if (NTDDI_VERSION >= NTDDI_WIN10_VB)
typedef enum TAP_PARAMETER {
TAP_PARAMETER_MIN_CONTACT_COUNT = 0x00000000,
TAP_PARAMETER_MAX_CONTACT_COUNT = 0x00000001,
TAP_PARAMETER_MAX = 0xffffffff
} TAP_PARAMETER;
typedef enum HOLD_PARAMETER {
HOLD_PARAMETER_MIN_CONTACT_COUNT = 0x00000000,
HOLD_PARAMETER_MAX_CONTACT_COUNT = 0x00000001,
HOLD_PARAMETER_THRESHOLD_RADIUS = 0x00000002,
HOLD_PARAMETER_THRESHOLD_START_DELAY = 0x00000003,
HOLD_PARAMETER_MAX = 0xffffffff
} HOLD_PARAMETER;
typedef enum TRANSLATION_PARAMETER {
TRANSLATION_PARAMETER_MIN_CONTACT_COUNT = 0x00000000,
TRANSLATION_PARAMETER_MAX_CONTACT_COUNT = 0x00000001,
TRANSLATION_PARAMETER_MAX = 0xffffffff
} TRANSLATION_PARAMETER;
#endif
typedef enum MANIPULATION_RAILS_STATE {
MANIPULATION_RAILS_STATE_UNDECIDED = 0x00000000,
MANIPULATION_RAILS_STATE_FREE = 0x00000001,
MANIPULATION_RAILS_STATE_RAILED = 0x00000002,
MANIPULATION_RAILS_STATE_MAX = 0xffffffff
} MANIPULATION_RAILS_STATE;
typedef struct MANIPULATION_TRANSFORM {
float translationX;
float translationY;
float scale;
float expansion;
float rotation;
} MANIPULATION_TRANSFORM;
typedef struct MANIPULATION_VELOCITY {
float velocityX;
float velocityY;
float velocityExpansion;
float velocityAngular;
} MANIPULATION_VELOCITY;
typedef struct INTERACTION_ARGUMENTS_MANIPULATION {
MANIPULATION_TRANSFORM delta;
MANIPULATION_TRANSFORM cumulative;
MANIPULATION_VELOCITY velocity;
MANIPULATION_RAILS_STATE railsState;
} INTERACTION_ARGUMENTS_MANIPULATION;
typedef struct INTERACTION_ARGUMENTS_TAP {
UINT32 count;
} INTERACTION_ARGUMENTS_TAP;
typedef struct INTERACTION_ARGUMENTS_CROSS_SLIDE {
CROSS_SLIDE_FLAGS flags;
} INTERACTION_ARGUMENTS_CROSS_SLIDE;
typedef struct INTERACTION_CONTEXT_OUTPUT {
INTERACTION_ID interactionId;
INTERACTION_FLAGS interactionFlags;
POINTER_INPUT_TYPE inputType;
float x;
float y;
union {
INTERACTION_ARGUMENTS_MANIPULATION manipulation;
INTERACTION_ARGUMENTS_TAP tap;
INTERACTION_ARGUMENTS_CROSS_SLIDE crossSlide;
} arguments;
} INTERACTION_CONTEXT_OUTPUT;
#if (NTDDI_VERSION >= NTDDI_WIN10_VB)
typedef struct INTERACTION_CONTEXT_OUTPUT2 {
INTERACTION_ID interactionId;
INTERACTION_FLAGS interactionFlags;
POINTER_INPUT_TYPE inputType;
UINT32 contactCount;
UINT32 currentContactCount;
float x;
float y;
union {
INTERACTION_ARGUMENTS_MANIPULATION manipulation;
INTERACTION_ARGUMENTS_TAP tap;
INTERACTION_ARGUMENTS_CROSS_SLIDE crossSlide;
} arguments;
} INTERACTION_CONTEXT_OUTPUT2;
#endif
typedef struct INTERACTION_CONTEXT_CONFIGURATION {
INTERACTION_ID interactionId;
INTERACTION_CONFIGURATION_FLAGS enable;
} INTERACTION_CONTEXT_CONFIGURATION;
typedef struct CROSS_SLIDE_PARAMETER {
CROSS_SLIDE_THRESHOLD threshold;
float distance;
} CROSS_SLIDE_PARAMETER;
typedef void(CALLBACK *INTERACTION_CONTEXT_OUTPUT_CALLBACK)(void *clientData, const INTERACTION_CONTEXT_OUTPUT *output);
#if (NTDDI_VERSION >= NTDDI_WIN10_VB)
typedef void(CALLBACK *INTERACTION_CONTEXT_OUTPUT_CALLBACK2)(void *clientData, const INTERACTION_CONTEXT_OUTPUT2 *output);
#endif
DECLARE_HANDLE(HINTERACTIONCONTEXT);
#define INTERACTION_CONTEXT_CONFIGURATION_DEFAULT \
{ \
{INTERACTION_ID_MANIPULATION, \
INTERACTION_CONFIGURATION_FLAG_MANIPULATION | \
INTERACTION_CONFIGURATION_FLAG_MANIPULATION_TRANSLATION_X | \
INTERACTION_CONFIGURATION_FLAG_MANIPULATION_TRANSLATION_Y | \
INTERACTION_CONFIGURATION_FLAG_MANIPULATION_ROTATION | \
INTERACTION_CONFIGURATION_FLAG_MANIPULATION_SCALING | \
INTERACTION_CONFIGURATION_FLAG_MANIPULATION_TRANSLATION_INERTIA | \
INTERACTION_CONFIGURATION_FLAG_MANIPULATION_ROTATION_INERTIA | \
INTERACTION_CONFIGURATION_FLAG_MANIPULATION_SCALING_INERTIA}, \
{INTERACTION_ID_TAP, \
INTERACTION_CONFIGURATION_FLAG_TAP}, \
{INTERACTION_ID_SECONDARY_TAP, \
INTERACTION_CONFIGURATION_FLAG_SECONDARY_TAP}, \
{INTERACTION_ID_HOLD, \
INTERACTION_CONFIGURATION_FLAG_HOLD}, \
{INTERACTION_ID_DRAG, \
INTERACTION_CONFIGURATION_FLAG_NONE}, \
{INTERACTION_ID_CROSS_SLIDE, \
INTERACTION_CONFIGURATION_FLAG_NONE} \
} \
#define INERTIA_PARAMETER_INVALID_VALUE FLT_MAX
HRESULT WINAPI CreateInteractionContext(HINTERACTIONCONTEXT *interactionContext);
HRESULT WINAPI DestroyInteractionContext(HINTERACTIONCONTEXT interactionContext);
HRESULT WINAPI RegisterOutputCallbackInteractionContext(HINTERACTIONCONTEXT interactionContext, INTERACTION_CONTEXT_OUTPUT_CALLBACK outputCallback, void *clientData);
#if (NTDDI_VERSION >= NTDDI_WIN10_VB)
HRESULT WINAPI RegisterOutputCallbackInteractionContext2(HINTERACTIONCONTEXT interactionContext, INTERACTION_CONTEXT_OUTPUT_CALLBACK2 outputCallback, void *clientData);
#endif
HRESULT WINAPI SetInteractionConfigurationInteractionContext(HINTERACTIONCONTEXT interactionContext, UINT32 configurationCount, const INTERACTION_CONTEXT_CONFIGURATION *configuration);
HRESULT WINAPI GetInteractionConfigurationInteractionContext(HINTERACTIONCONTEXT interactionContext, UINT32 configurationCount, INTERACTION_CONTEXT_CONFIGURATION *configuration);
HRESULT WINAPI SetPropertyInteractionContext(HINTERACTIONCONTEXT interactionContext, INTERACTION_CONTEXT_PROPERTY contextProperty, UINT32 value);
HRESULT WINAPI GetPropertyInteractionContext(HINTERACTIONCONTEXT interactionContext, INTERACTION_CONTEXT_PROPERTY contextProperty, UINT32 *value);
HRESULT WINAPI SetInertiaParameterInteractionContext(HINTERACTIONCONTEXT interactionContext, INERTIA_PARAMETER inertiaParameter, float value);
HRESULT WINAPI GetInertiaParameterInteractionContext(HINTERACTIONCONTEXT interactionContext, INERTIA_PARAMETER inertiaParameter, float *value);
HRESULT WINAPI SetCrossSlideParametersInteractionContext(HINTERACTIONCONTEXT interactionContext, UINT32 parameterCount, CROSS_SLIDE_PARAMETER *crossSlideParameters);
HRESULT WINAPI GetCrossSlideParameterInteractionContext(HINTERACTIONCONTEXT interactionContext, CROSS_SLIDE_THRESHOLD threshold, float *distance);
#if (NTDDI_VERSION >= NTDDI_WIN10_VB)
HRESULT WINAPI SetTapParameterInteractionContext(HINTERACTIONCONTEXT interactionContext, TAP_PARAMETER parameter, float value);
HRESULT WINAPI GetTapParameterInteractionContext(HINTERACTIONCONTEXT interactionContext, TAP_PARAMETER parameter, float *value);
HRESULT WINAPI SetHoldParameterInteractionContext(HINTERACTIONCONTEXT interactionContext, HOLD_PARAMETER parameter, float value);
HRESULT WINAPI GetHoldParameterInteractionContext(HINTERACTIONCONTEXT interactionContext, HOLD_PARAMETER parameter, float *value);
HRESULT WINAPI SetTranslationParameterInteractionContext(HINTERACTIONCONTEXT interactionContext, TRANSLATION_PARAMETER parameter, float value);
HRESULT WINAPI GetTranslationParameterInteractionContext(HINTERACTIONCONTEXT interactionContext, TRANSLATION_PARAMETER parameter, float *value);
#endif
HRESULT WINAPI SetMouseWheelParameterInteractionContext(HINTERACTIONCONTEXT interactionContext, MOUSE_WHEEL_PARAMETER parameter, float value);
HRESULT WINAPI GetMouseWheelParameterInteractionContext(HINTERACTIONCONTEXT interactionContext, MOUSE_WHEEL_PARAMETER parameter, float *value);
HRESULT WINAPI ResetInteractionContext(HINTERACTIONCONTEXT interactionContext);
HRESULT WINAPI GetStateInteractionContext(HINTERACTIONCONTEXT interactionContext, const POINTER_INFO *pointerInfo, INTERACTION_STATE *state);
HRESULT WINAPI AddPointerInteractionContext(HINTERACTIONCONTEXT interactionContext, UINT32 pointerId);
HRESULT WINAPI RemovePointerInteractionContext(HINTERACTIONCONTEXT interactionContext, UINT32 pointerId);
HRESULT WINAPI ProcessPointerFramesInteractionContext(HINTERACTIONCONTEXT interactionContext, UINT32 entriesCount, UINT32 pointerCount, const POINTER_INFO *pointerInfo);
HRESULT WINAPI BufferPointerPacketsInteractionContext(HINTERACTIONCONTEXT interactionContext, UINT32 entriesCount, const POINTER_INFO *pointerInfo);
HRESULT WINAPI ProcessBufferedPacketsInteractionContext(HINTERACTIONCONTEXT interactionContext);
HRESULT WINAPI ProcessInertiaInteractionContext(HINTERACTIONCONTEXT interactionContext);
HRESULT WINAPI StopInteractionContext(HINTERACTIONCONTEXT interactionContext);
HRESULT WINAPI SetPivotInteractionContext(HINTERACTIONCONTEXT interactionContext, float x, float y, float radius);
#endif /* (NTDDI_VERSION >= NTDDI_WIN8) */
#if defined(__cplusplus)
}
#endif
#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) */
#endif /* INTERACTION_CONTEXT_H */
|