interactioncontext.h (14516B) - Raw
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) 18 extern "C" { 19 #endif 20 21 #if (NTDDI_VERSION >= NTDDI_WIN8) 22 23 typedef 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 34 typedef 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 43 DEFINE_ENUM_FLAG_OPERATORS(INTERACTION_FLAGS); 44 45 typedef 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 80 DEFINE_ENUM_FLAG_OPERATORS(INTERACTION_CONFIGURATION_FLAGS); 81 82 typedef 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 92 typedef 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 99 typedef 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 106 typedef 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 117 typedef 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 125 DEFINE_ENUM_FLAG_OPERATORS(CROSS_SLIDE_FLAGS); 126 127 typedef 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) 138 typedef 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 144 typedef 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 152 typedef 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 159 typedef 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 166 typedef struct MANIPULATION_TRANSFORM { 167 float translationX; 168 float translationY; 169 float scale; 170 float expansion; 171 float rotation; 172 } MANIPULATION_TRANSFORM; 173 174 typedef struct MANIPULATION_VELOCITY { 175 float velocityX; 176 float velocityY; 177 float velocityExpansion; 178 float velocityAngular; 179 } MANIPULATION_VELOCITY; 180 181 typedef 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 188 typedef struct INTERACTION_ARGUMENTS_TAP { 189 UINT32 count; 190 } INTERACTION_ARGUMENTS_TAP; 191 192 typedef struct INTERACTION_ARGUMENTS_CROSS_SLIDE { 193 CROSS_SLIDE_FLAGS flags; 194 } INTERACTION_ARGUMENTS_CROSS_SLIDE; 195 196 typedef 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) 210 typedef 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 226 typedef struct INTERACTION_CONTEXT_CONFIGURATION { 227 INTERACTION_ID interactionId; 228 INTERACTION_CONFIGURATION_FLAGS enable; 229 } INTERACTION_CONTEXT_CONFIGURATION; 230 231 typedef struct CROSS_SLIDE_PARAMETER { 232 CROSS_SLIDE_THRESHOLD threshold; 233 float distance; 234 } CROSS_SLIDE_PARAMETER; 235 236 typedef void(CALLBACK *INTERACTION_CONTEXT_OUTPUT_CALLBACK)(void *clientData, const INTERACTION_CONTEXT_OUTPUT *output); 237 238 #if (NTDDI_VERSION >= NTDDI_WIN10_VB) 239 typedef void(CALLBACK *INTERACTION_CONTEXT_OUTPUT_CALLBACK2)(void *clientData, const INTERACTION_CONTEXT_OUTPUT2 *output); 240 #endif 241 242 DECLARE_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 269 HRESULT WINAPI CreateInteractionContext(HINTERACTIONCONTEXT *interactionContext); 270 HRESULT WINAPI DestroyInteractionContext(HINTERACTIONCONTEXT interactionContext); 271 HRESULT WINAPI RegisterOutputCallbackInteractionContext(HINTERACTIONCONTEXT interactionContext, INTERACTION_CONTEXT_OUTPUT_CALLBACK outputCallback, void *clientData); 272 #if (NTDDI_VERSION >= NTDDI_WIN10_VB) 273 HRESULT WINAPI RegisterOutputCallbackInteractionContext2(HINTERACTIONCONTEXT interactionContext, INTERACTION_CONTEXT_OUTPUT_CALLBACK2 outputCallback, void *clientData); 274 #endif 275 HRESULT WINAPI SetInteractionConfigurationInteractionContext(HINTERACTIONCONTEXT interactionContext, UINT32 configurationCount, const INTERACTION_CONTEXT_CONFIGURATION *configuration); 276 HRESULT WINAPI GetInteractionConfigurationInteractionContext(HINTERACTIONCONTEXT interactionContext, UINT32 configurationCount, INTERACTION_CONTEXT_CONFIGURATION *configuration); 277 HRESULT WINAPI SetPropertyInteractionContext(HINTERACTIONCONTEXT interactionContext, INTERACTION_CONTEXT_PROPERTY contextProperty, UINT32 value); 278 HRESULT WINAPI GetPropertyInteractionContext(HINTERACTIONCONTEXT interactionContext, INTERACTION_CONTEXT_PROPERTY contextProperty, UINT32 *value); 279 HRESULT WINAPI SetInertiaParameterInteractionContext(HINTERACTIONCONTEXT interactionContext, INERTIA_PARAMETER inertiaParameter, float value); 280 HRESULT WINAPI GetInertiaParameterInteractionContext(HINTERACTIONCONTEXT interactionContext, INERTIA_PARAMETER inertiaParameter, float *value); 281 HRESULT WINAPI SetCrossSlideParametersInteractionContext(HINTERACTIONCONTEXT interactionContext, UINT32 parameterCount, CROSS_SLIDE_PARAMETER *crossSlideParameters); 282 HRESULT WINAPI GetCrossSlideParameterInteractionContext(HINTERACTIONCONTEXT interactionContext, CROSS_SLIDE_THRESHOLD threshold, float *distance); 283 #if (NTDDI_VERSION >= NTDDI_WIN10_VB) 284 HRESULT WINAPI SetTapParameterInteractionContext(HINTERACTIONCONTEXT interactionContext, TAP_PARAMETER parameter, float value); 285 HRESULT WINAPI GetTapParameterInteractionContext(HINTERACTIONCONTEXT interactionContext, TAP_PARAMETER parameter, float *value); 286 HRESULT WINAPI SetHoldParameterInteractionContext(HINTERACTIONCONTEXT interactionContext, HOLD_PARAMETER parameter, float value); 287 HRESULT WINAPI GetHoldParameterInteractionContext(HINTERACTIONCONTEXT interactionContext, HOLD_PARAMETER parameter, float *value); 288 HRESULT WINAPI SetTranslationParameterInteractionContext(HINTERACTIONCONTEXT interactionContext, TRANSLATION_PARAMETER parameter, float value); 289 HRESULT WINAPI GetTranslationParameterInteractionContext(HINTERACTIONCONTEXT interactionContext, TRANSLATION_PARAMETER parameter, float *value); 290 #endif 291 HRESULT WINAPI SetMouseWheelParameterInteractionContext(HINTERACTIONCONTEXT interactionContext, MOUSE_WHEEL_PARAMETER parameter, float value); 292 HRESULT WINAPI GetMouseWheelParameterInteractionContext(HINTERACTIONCONTEXT interactionContext, MOUSE_WHEEL_PARAMETER parameter, float *value); 293 HRESULT WINAPI ResetInteractionContext(HINTERACTIONCONTEXT interactionContext); 294 HRESULT WINAPI GetStateInteractionContext(HINTERACTIONCONTEXT interactionContext, const POINTER_INFO *pointerInfo, INTERACTION_STATE *state); 295 HRESULT WINAPI AddPointerInteractionContext(HINTERACTIONCONTEXT interactionContext, UINT32 pointerId); 296 HRESULT WINAPI RemovePointerInteractionContext(HINTERACTIONCONTEXT interactionContext, UINT32 pointerId); 297 HRESULT WINAPI ProcessPointerFramesInteractionContext(HINTERACTIONCONTEXT interactionContext, UINT32 entriesCount, UINT32 pointerCount, const POINTER_INFO *pointerInfo); 298 HRESULT WINAPI BufferPointerPacketsInteractionContext(HINTERACTIONCONTEXT interactionContext, UINT32 entriesCount, const POINTER_INFO *pointerInfo); 299 HRESULT WINAPI ProcessBufferedPacketsInteractionContext(HINTERACTIONCONTEXT interactionContext); 300 HRESULT WINAPI ProcessInertiaInteractionContext(HINTERACTIONCONTEXT interactionContext); 301 HRESULT WINAPI StopInteractionContext(HINTERACTIONCONTEXT interactionContext); 302 HRESULT 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 */