master
1/**
2 * This file has no copyright assigned and is placed in the Public Domain.
3 * This file is part of the mingw-w64 runtime package.
4 * No warranty is given; refer to the file DISCLAIMER.PD within this package.
5 */
6
7#ifndef INTERACTION_CONTEXT_H
8#define INTERACTION_CONTEXT_H
9
10#include <winapifamily.h>
11
12#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
13
14#include <float.h>
15#include <windows.h>
16
17#if defined(__cplusplus)
18extern "C" {
19#endif
20
21#if (NTDDI_VERSION >= NTDDI_WIN8)
22
23typedef enum INTERACTION_ID {
24 INTERACTION_ID_NONE = 0x00000000,
25 INTERACTION_ID_MANIPULATION = 0x00000001,
26 INTERACTION_ID_TAP = 0x00000002,
27 INTERACTION_ID_SECONDARY_TAP = 0x00000003,
28 INTERACTION_ID_HOLD = 0x00000004,
29 INTERACTION_ID_DRAG = 0x00000005,
30 INTERACTION_ID_CROSS_SLIDE = 0x00000006,
31 INTERACTION_ID_MAX = 0xffffffff
32} INTERACTION_ID;
33
34typedef enum INTERACTION_FLAGS {
35 INTERACTION_FLAG_NONE = 0x00000000,
36 INTERACTION_FLAG_BEGIN = 0x00000001,
37 INTERACTION_FLAG_END = 0x00000002,
38 INTERACTION_FLAG_CANCEL = 0x00000004,
39 INTERACTION_FLAG_INERTIA = 0x00000008,
40 INTERACTION_FLAG_MAX = 0xffffffff
41} INTERACTION_FLAGS;
42
43DEFINE_ENUM_FLAG_OPERATORS(INTERACTION_FLAGS);
44
45typedef enum INTERACTION_CONFIGURATION_FLAGS {
46 INTERACTION_CONFIGURATION_FLAG_NONE = 0x00000000,
47 INTERACTION_CONFIGURATION_FLAG_MANIPULATION = 0x00000001,
48 INTERACTION_CONFIGURATION_FLAG_MANIPULATION_TRANSLATION_X = 0x00000002,
49 INTERACTION_CONFIGURATION_FLAG_MANIPULATION_TRANSLATION_Y = 0x00000004,
50 INTERACTION_CONFIGURATION_FLAG_MANIPULATION_ROTATION = 0x00000008,
51 INTERACTION_CONFIGURATION_FLAG_MANIPULATION_SCALING = 0x00000010,
52 INTERACTION_CONFIGURATION_FLAG_MANIPULATION_TRANSLATION_INERTIA = 0x00000020,
53 INTERACTION_CONFIGURATION_FLAG_MANIPULATION_ROTATION_INERTIA = 0x00000040,
54 INTERACTION_CONFIGURATION_FLAG_MANIPULATION_SCALING_INERTIA = 0x00000080,
55 INTERACTION_CONFIGURATION_FLAG_MANIPULATION_RAILS_X = 0x00000100,
56 INTERACTION_CONFIGURATION_FLAG_MANIPULATION_RAILS_Y = 0x00000200,
57 INTERACTION_CONFIGURATION_FLAG_MANIPULATION_EXACT = 0x00000400,
58 INTERACTION_CONFIGURATION_FLAG_MANIPULATION_MULTIPLE_FINGER_PANNING = 0x00000800,
59 INTERACTION_CONFIGURATION_FLAG_CROSS_SLIDE = 0x00000001,
60 INTERACTION_CONFIGURATION_FLAG_CROSS_SLIDE_HORIZONTAL = 0x00000002,
61 INTERACTION_CONFIGURATION_FLAG_CROSS_SLIDE_SELECT = 0x00000004,
62 INTERACTION_CONFIGURATION_FLAG_CROSS_SLIDE_SPEED_BUMP = 0x00000008,
63 INTERACTION_CONFIGURATION_FLAG_CROSS_SLIDE_REARRANGE = 0x00000010,
64 INTERACTION_CONFIGURATION_FLAG_CROSS_SLIDE_EXACT = 0x00000020,
65 INTERACTION_CONFIGURATION_FLAG_TAP = 0x00000001,
66 INTERACTION_CONFIGURATION_FLAG_TAP_DOUBLE = 0x00000002
67#if (NTDDI_VERSION >= NTDDI_WIN10_VB)
68 ,INTERACTION_CONFIGURATION_FLAG_TAP_MULTIPLE_FINGER = 0x00000004
69#endif
70 ,INTERACTION_CONFIGURATION_FLAG_SECONDARY_TAP = 0x00000001
71 ,INTERACTION_CONFIGURATION_FLAG_HOLD = 0x00000001
72 ,INTERACTION_CONFIGURATION_FLAG_HOLD_MOUSE = 0x00000002
73#if (NTDDI_VERSION >= NTDDI_WIN10_VB)
74 ,INTERACTION_CONFIGURATION_FLAG_HOLD_MULTIPLE_FINGER = 0x00000004
75#endif
76 ,INTERACTION_CONFIGURATION_FLAG_DRAG = 0x00000001
77 ,INTERACTION_CONFIGURATION_FLAG_MAX = 0xffffffff
78} INTERACTION_CONFIGURATION_FLAGS;
79
80DEFINE_ENUM_FLAG_OPERATORS(INTERACTION_CONFIGURATION_FLAGS);
81
82typedef enum INERTIA_PARAMETER {
83 INERTIA_PARAMETER_TRANSLATION_DECELERATION = 0x00000001,
84 INERTIA_PARAMETER_TRANSLATION_DISPLACEMENT = 0x00000002,
85 INERTIA_PARAMETER_ROTATION_DECELERATION = 0x00000003,
86 INERTIA_PARAMETER_ROTATION_ANGLE = 0x00000004,
87 INERTIA_PARAMETER_EXPANSION_DECELERATION = 0x00000005,
88 INERTIA_PARAMETER_EXPANSION_EXPANSION = 0x00000006,
89 INERTIA_PARAMETER_MAX = 0xffffffff
90} INERTIA_PARAMETER;
91
92typedef enum INTERACTION_STATE {
93 INTERACTION_STATE_IDLE = 0x00000000,
94 INTERACTION_STATE_IN_INTERACTION = 0x00000001,
95 INTERACTION_STATE_POSSIBLE_DOUBLE_TAP = 0x00000002,
96 INTERACTION_STATE_MAX = 0xffffffff
97} INTERACTION_STATE;
98
99typedef enum INTERACTION_CONTEXT_PROPERTY {
100 INTERACTION_CONTEXT_PROPERTY_MEASUREMENT_UNITS = 0x00000001,
101 INTERACTION_CONTEXT_PROPERTY_INTERACTION_UI_FEEDBACK = 0x00000002,
102 INTERACTION_CONTEXT_PROPERTY_FILTER_POINTERS = 0x00000003,
103 INTERACTION_CONTEXT_PROPERTY_MAX = 0xffffffff
104} INTERACTION_CONTEXT_PROPERTY;
105
106typedef enum CROSS_SLIDE_THRESHOLD {
107 CROSS_SLIDE_THRESHOLD_SELECT_START = 0x00000000,
108 CROSS_SLIDE_THRESHOLD_SPEED_BUMP_START = 0x00000001,
109 CROSS_SLIDE_THRESHOLD_SPEED_BUMP_END = 0x00000002,
110 CROSS_SLIDE_THRESHOLD_REARRANGE_START = 0x00000003,
111 CROSS_SLIDE_THRESHOLD_COUNT = 0x00000004,
112 CROSS_SLIDE_THRESHOLD_MAX = 0xffffffff
113} CROSS_SLIDE_THRESHOLD;
114
115#define CROSS_SLIDE_THRESHOLD_INVALID_VALUE FLT_MAX
116
117typedef enum CROSS_SLIDE_FLAGS {
118 CROSS_SLIDE_FLAGS_NONE = 0x00000000,
119 CROSS_SLIDE_FLAGS_SELECT = 0x00000001,
120 CROSS_SLIDE_FLAGS_SPEED_BUMP = 0x00000002,
121 CROSS_SLIDE_FLAGS_REARRANGE = 0x00000004,
122 CROSS_SLIDE_FLAGS_MAX = 0xffffffff
123} CROSS_SLIDE_FLAGS;
124
125DEFINE_ENUM_FLAG_OPERATORS(CROSS_SLIDE_FLAGS);
126
127typedef enum MOUSE_WHEEL_PARAMETER {
128 MOUSE_WHEEL_PARAMETER_CHAR_TRANSLATION_X = 0x00000001,
129 MOUSE_WHEEL_PARAMETER_CHAR_TRANSLATION_Y = 0x00000002,
130 MOUSE_WHEEL_PARAMETER_DELTA_SCALE = 0x00000003,
131 MOUSE_WHEEL_PARAMETER_DELTA_ROTATION = 0x00000004,
132 MOUSE_WHEEL_PARAMETER_PAGE_TRANSLATION_X = 0x00000005,
133 MOUSE_WHEEL_PARAMETER_PAGE_TRANSLATION_Y = 0x00000006,
134 MOUSE_WHEEL_PARAMETER_MAX = 0xffffffff
135} MOUSE_WHEEL_PARAMETER;
136
137#if (NTDDI_VERSION >= NTDDI_WIN10_VB)
138typedef enum TAP_PARAMETER {
139 TAP_PARAMETER_MIN_CONTACT_COUNT = 0x00000000,
140 TAP_PARAMETER_MAX_CONTACT_COUNT = 0x00000001,
141 TAP_PARAMETER_MAX = 0xffffffff
142} TAP_PARAMETER;
143
144typedef enum HOLD_PARAMETER {
145 HOLD_PARAMETER_MIN_CONTACT_COUNT = 0x00000000,
146 HOLD_PARAMETER_MAX_CONTACT_COUNT = 0x00000001,
147 HOLD_PARAMETER_THRESHOLD_RADIUS = 0x00000002,
148 HOLD_PARAMETER_THRESHOLD_START_DELAY = 0x00000003,
149 HOLD_PARAMETER_MAX = 0xffffffff
150} HOLD_PARAMETER;
151
152typedef enum TRANSLATION_PARAMETER {
153 TRANSLATION_PARAMETER_MIN_CONTACT_COUNT = 0x00000000,
154 TRANSLATION_PARAMETER_MAX_CONTACT_COUNT = 0x00000001,
155 TRANSLATION_PARAMETER_MAX = 0xffffffff
156} TRANSLATION_PARAMETER;
157#endif
158
159typedef enum MANIPULATION_RAILS_STATE {
160 MANIPULATION_RAILS_STATE_UNDECIDED = 0x00000000,
161 MANIPULATION_RAILS_STATE_FREE = 0x00000001,
162 MANIPULATION_RAILS_STATE_RAILED = 0x00000002,
163 MANIPULATION_RAILS_STATE_MAX = 0xffffffff
164} MANIPULATION_RAILS_STATE;
165
166typedef struct MANIPULATION_TRANSFORM {
167 float translationX;
168 float translationY;
169 float scale;
170 float expansion;
171 float rotation;
172} MANIPULATION_TRANSFORM;
173
174typedef struct MANIPULATION_VELOCITY {
175 float velocityX;
176 float velocityY;
177 float velocityExpansion;
178 float velocityAngular;
179} MANIPULATION_VELOCITY;
180
181typedef struct INTERACTION_ARGUMENTS_MANIPULATION {
182 MANIPULATION_TRANSFORM delta;
183 MANIPULATION_TRANSFORM cumulative;
184 MANIPULATION_VELOCITY velocity;
185 MANIPULATION_RAILS_STATE railsState;
186} INTERACTION_ARGUMENTS_MANIPULATION;
187
188typedef struct INTERACTION_ARGUMENTS_TAP {
189 UINT32 count;
190} INTERACTION_ARGUMENTS_TAP;
191
192typedef struct INTERACTION_ARGUMENTS_CROSS_SLIDE {
193 CROSS_SLIDE_FLAGS flags;
194} INTERACTION_ARGUMENTS_CROSS_SLIDE;
195
196typedef struct INTERACTION_CONTEXT_OUTPUT {
197 INTERACTION_ID interactionId;
198 INTERACTION_FLAGS interactionFlags;
199 POINTER_INPUT_TYPE inputType;
200 float x;
201 float y;
202 union {
203 INTERACTION_ARGUMENTS_MANIPULATION manipulation;
204 INTERACTION_ARGUMENTS_TAP tap;
205 INTERACTION_ARGUMENTS_CROSS_SLIDE crossSlide;
206 } arguments;
207} INTERACTION_CONTEXT_OUTPUT;
208
209#if (NTDDI_VERSION >= NTDDI_WIN10_VB)
210typedef struct INTERACTION_CONTEXT_OUTPUT2 {
211 INTERACTION_ID interactionId;
212 INTERACTION_FLAGS interactionFlags;
213 POINTER_INPUT_TYPE inputType;
214 UINT32 contactCount;
215 UINT32 currentContactCount;
216 float x;
217 float y;
218 union {
219 INTERACTION_ARGUMENTS_MANIPULATION manipulation;
220 INTERACTION_ARGUMENTS_TAP tap;
221 INTERACTION_ARGUMENTS_CROSS_SLIDE crossSlide;
222 } arguments;
223} INTERACTION_CONTEXT_OUTPUT2;
224#endif
225
226typedef struct INTERACTION_CONTEXT_CONFIGURATION {
227 INTERACTION_ID interactionId;
228 INTERACTION_CONFIGURATION_FLAGS enable;
229} INTERACTION_CONTEXT_CONFIGURATION;
230
231typedef struct CROSS_SLIDE_PARAMETER {
232 CROSS_SLIDE_THRESHOLD threshold;
233 float distance;
234} CROSS_SLIDE_PARAMETER;
235
236typedef void(CALLBACK *INTERACTION_CONTEXT_OUTPUT_CALLBACK)(void *clientData, const INTERACTION_CONTEXT_OUTPUT *output);
237
238#if (NTDDI_VERSION >= NTDDI_WIN10_VB)
239typedef void(CALLBACK *INTERACTION_CONTEXT_OUTPUT_CALLBACK2)(void *clientData, const INTERACTION_CONTEXT_OUTPUT2 *output);
240#endif
241
242DECLARE_HANDLE(HINTERACTIONCONTEXT);
243
244#define INTERACTION_CONTEXT_CONFIGURATION_DEFAULT \
245{ \
246 {INTERACTION_ID_MANIPULATION, \
247 INTERACTION_CONFIGURATION_FLAG_MANIPULATION | \
248 INTERACTION_CONFIGURATION_FLAG_MANIPULATION_TRANSLATION_X | \
249 INTERACTION_CONFIGURATION_FLAG_MANIPULATION_TRANSLATION_Y | \
250 INTERACTION_CONFIGURATION_FLAG_MANIPULATION_ROTATION | \
251 INTERACTION_CONFIGURATION_FLAG_MANIPULATION_SCALING | \
252 INTERACTION_CONFIGURATION_FLAG_MANIPULATION_TRANSLATION_INERTIA | \
253 INTERACTION_CONFIGURATION_FLAG_MANIPULATION_ROTATION_INERTIA | \
254 INTERACTION_CONFIGURATION_FLAG_MANIPULATION_SCALING_INERTIA}, \
255 {INTERACTION_ID_TAP, \
256 INTERACTION_CONFIGURATION_FLAG_TAP}, \
257 {INTERACTION_ID_SECONDARY_TAP, \
258 INTERACTION_CONFIGURATION_FLAG_SECONDARY_TAP}, \
259 {INTERACTION_ID_HOLD, \
260 INTERACTION_CONFIGURATION_FLAG_HOLD}, \
261 {INTERACTION_ID_DRAG, \
262 INTERACTION_CONFIGURATION_FLAG_NONE}, \
263 {INTERACTION_ID_CROSS_SLIDE, \
264 INTERACTION_CONFIGURATION_FLAG_NONE} \
265} \
266
267#define INERTIA_PARAMETER_INVALID_VALUE FLT_MAX
268
269HRESULT WINAPI CreateInteractionContext(HINTERACTIONCONTEXT *interactionContext);
270HRESULT WINAPI DestroyInteractionContext(HINTERACTIONCONTEXT interactionContext);
271HRESULT WINAPI RegisterOutputCallbackInteractionContext(HINTERACTIONCONTEXT interactionContext, INTERACTION_CONTEXT_OUTPUT_CALLBACK outputCallback, void *clientData);
272#if (NTDDI_VERSION >= NTDDI_WIN10_VB)
273HRESULT WINAPI RegisterOutputCallbackInteractionContext2(HINTERACTIONCONTEXT interactionContext, INTERACTION_CONTEXT_OUTPUT_CALLBACK2 outputCallback, void *clientData);
274#endif
275HRESULT WINAPI SetInteractionConfigurationInteractionContext(HINTERACTIONCONTEXT interactionContext, UINT32 configurationCount, const INTERACTION_CONTEXT_CONFIGURATION *configuration);
276HRESULT WINAPI GetInteractionConfigurationInteractionContext(HINTERACTIONCONTEXT interactionContext, UINT32 configurationCount, INTERACTION_CONTEXT_CONFIGURATION *configuration);
277HRESULT WINAPI SetPropertyInteractionContext(HINTERACTIONCONTEXT interactionContext, INTERACTION_CONTEXT_PROPERTY contextProperty, UINT32 value);
278HRESULT WINAPI GetPropertyInteractionContext(HINTERACTIONCONTEXT interactionContext, INTERACTION_CONTEXT_PROPERTY contextProperty, UINT32 *value);
279HRESULT WINAPI SetInertiaParameterInteractionContext(HINTERACTIONCONTEXT interactionContext, INERTIA_PARAMETER inertiaParameter, float value);
280HRESULT WINAPI GetInertiaParameterInteractionContext(HINTERACTIONCONTEXT interactionContext, INERTIA_PARAMETER inertiaParameter, float *value);
281HRESULT WINAPI SetCrossSlideParametersInteractionContext(HINTERACTIONCONTEXT interactionContext, UINT32 parameterCount, CROSS_SLIDE_PARAMETER *crossSlideParameters);
282HRESULT WINAPI GetCrossSlideParameterInteractionContext(HINTERACTIONCONTEXT interactionContext, CROSS_SLIDE_THRESHOLD threshold, float *distance);
283#if (NTDDI_VERSION >= NTDDI_WIN10_VB)
284HRESULT WINAPI SetTapParameterInteractionContext(HINTERACTIONCONTEXT interactionContext, TAP_PARAMETER parameter, float value);
285HRESULT WINAPI GetTapParameterInteractionContext(HINTERACTIONCONTEXT interactionContext, TAP_PARAMETER parameter, float *value);
286HRESULT WINAPI SetHoldParameterInteractionContext(HINTERACTIONCONTEXT interactionContext, HOLD_PARAMETER parameter, float value);
287HRESULT WINAPI GetHoldParameterInteractionContext(HINTERACTIONCONTEXT interactionContext, HOLD_PARAMETER parameter, float *value);
288HRESULT WINAPI SetTranslationParameterInteractionContext(HINTERACTIONCONTEXT interactionContext, TRANSLATION_PARAMETER parameter, float value);
289HRESULT WINAPI GetTranslationParameterInteractionContext(HINTERACTIONCONTEXT interactionContext, TRANSLATION_PARAMETER parameter, float *value);
290#endif
291HRESULT WINAPI SetMouseWheelParameterInteractionContext(HINTERACTIONCONTEXT interactionContext, MOUSE_WHEEL_PARAMETER parameter, float value);
292HRESULT WINAPI GetMouseWheelParameterInteractionContext(HINTERACTIONCONTEXT interactionContext, MOUSE_WHEEL_PARAMETER parameter, float *value);
293HRESULT WINAPI ResetInteractionContext(HINTERACTIONCONTEXT interactionContext);
294HRESULT WINAPI GetStateInteractionContext(HINTERACTIONCONTEXT interactionContext, const POINTER_INFO *pointerInfo, INTERACTION_STATE *state);
295HRESULT WINAPI AddPointerInteractionContext(HINTERACTIONCONTEXT interactionContext, UINT32 pointerId);
296HRESULT WINAPI RemovePointerInteractionContext(HINTERACTIONCONTEXT interactionContext, UINT32 pointerId);
297HRESULT WINAPI ProcessPointerFramesInteractionContext(HINTERACTIONCONTEXT interactionContext, UINT32 entriesCount, UINT32 pointerCount, const POINTER_INFO *pointerInfo);
298HRESULT WINAPI BufferPointerPacketsInteractionContext(HINTERACTIONCONTEXT interactionContext, UINT32 entriesCount, const POINTER_INFO *pointerInfo);
299HRESULT WINAPI ProcessBufferedPacketsInteractionContext(HINTERACTIONCONTEXT interactionContext);
300HRESULT WINAPI ProcessInertiaInteractionContext(HINTERACTIONCONTEXT interactionContext);
301HRESULT WINAPI StopInteractionContext(HINTERACTIONCONTEXT interactionContext);
302HRESULT WINAPI SetPivotInteractionContext(HINTERACTIONCONTEXT interactionContext, float x, float y, float radius);
303
304#endif /* (NTDDI_VERSION >= NTDDI_WIN8) */
305
306#if defined(__cplusplus)
307}
308#endif
309
310#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) */
311
312#endif /* INTERACTION_CONTEXT_H */