Sweden-Number/include/interactioncontext.h

196 lines
6.9 KiB
C

/*
* Copyright 2018 Józef Kucia
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
*/
#ifndef INTERACTION_CONTEXT_H
#define INTERACTION_CONTEXT_H
#include <windows.h>
#ifdef __cplusplus
extern "C" {
#endif /* defined(__cplusplus) */
DECLARE_HANDLE(HINTERACTIONCONTEXT);
typedef enum INTERACTION_CONTEXT_PROPERTY
{
INTERACTION_CONTEXT_PROPERTY_MEASUREMENT_UNITS = 1,
INTERACTION_CONTEXT_PROPERTY_INTERACTION_UI_FEEDBACK = 2,
INTERACTION_CONTEXT_PROPERTY_FILTER_POINTERS = 3,
INTERACTION_CONTEXT_PROPERTY_MAX = 0xffffffff,
} INTERACTION_CONTEXT_PROPERTY;
typedef enum INTERACTION_ID
{
INTERACTION_ID_NONE = 0,
INTERACTION_ID_MANIPULATION = 1,
INTERACTION_ID_TAP = 2,
INTERACTION_ID_SECONDARY_TAP = 3,
INTERACTION_ID_HOLD = 4,
INTERACTION_ID_DRAG = 5,
INTERACTION_ID_CROSS_SLIDE = 6,
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;
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_TAP = 0x00000001,
INTERACTION_CONFIGURATION_FLAG_TAP_DOUBLE = 0x00000002,
INTERACTION_CONFIGURATION_FLAG_SECONDARY_TAP = 0x00000001,
INTERACTION_CONFIGURATION_FLAG_HOLD = 0x00000001,
INTERACTION_CONFIGURATION_FLAG_HOLD_MOUSE = 0x00000002,
INTERACTION_CONFIGURATION_FLAG_DRAG = 0x00000001,
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_MAX = 0xffffffff,
} INTERACTION_CONFIGURATION_FLAGS;
typedef struct INTERACTION_CONTEXT_CONFIGURATION
{
INTERACTION_ID interactionId;
INTERACTION_CONFIGURATION_FLAGS enable;
} INTERACTION_CONTEXT_CONFIGURATION;
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 velocityExapnsion;
float velocityAngular;
} MANIPULATION_VELOCITY;
typedef enum MANIPULATION_RAILS_STATE
{
MANIPULATION_RAILS_STATE_UNDECIDED = 0,
MANIPULATION_RAILS_STATE_FREE = 1,
MANIPULATION_RAILS_STATE_RAILED = 2,
MANIPULATION_RAILS_STATE_MAX = 0xffffffff,
} MANIPULATION_RAILS_STATE;
typedef struct INTERACTION_ARGUMENTS_MANIPULATION
{
MANIPULATION_TRANSFORM delta;
MANIPULATION_TRANSFORM cumulative;
MANIPULATION_VELOCITY veolcity;
MANIPULATION_RAILS_STATE railsState;
} INTERACTION_ARGUMENTS_MANIPULATION;
typedef struct INTERACTION_ARGUMENTS_TAP
{
UINT32 count;
} INTERACTION_ARGUMENTS_TAP;
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;
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;
typedef void (CALLBACK *INTERACTION_CONTEXT_OUTPUT_CALLBACK)(void *data,
const INTERACTION_CONTEXT_OUTPUT *output);
HRESULT WINAPI CreateInteractionContext(HINTERACTIONCONTEXT *context);
HRESULT WINAPI DestroyInteractionContext(HINTERACTIONCONTEXT context);
HRESULT WINAPI ProcessInertiaInteractionContext(HINTERACTIONCONTEXT context);
HRESULT WINAPI RegisterOutputCallbackInteractionContext(HINTERACTIONCONTEXT context,
INTERACTION_CONTEXT_OUTPUT_CALLBACK callback, void *data);
HRESULT WINAPI GetInteractionConfigurationInteractionContext(HINTERACTIONCONTEXT context,
UINT32 count, INTERACTION_CONTEXT_CONFIGURATION *configuration);
HRESULT WINAPI SetInteractionConfigurationInteractionContext(HINTERACTIONCONTEXT context,
UINT32 count, const INTERACTION_CONTEXT_CONFIGURATION *configuration);
HRESULT WINAPI GetPropertyInteractionContext(HINTERACTIONCONTEXT context,
INTERACTION_CONTEXT_PROPERTY proerty, UINT32 *value);
HRESULT WINAPI SetPropertyInteractionContext(HINTERACTIONCONTEXT context,
INTERACTION_CONTEXT_PROPERTY property, UINT32 value);
#ifdef __cplusplus
} /* extern "C" */
#endif /* defined(__cplusplus) */
#endif