zig

fork of https://codeberg.org/ziglang/zig
Log | Files | Refs | README | LICENSE

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 */