/* GDK - The GIMP Drawing Kit * Copyright (C) 2021 the GTK team * * 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 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, see . */ /* This code is derived from portions provided by the mingw-w64 project * (mingw-w64.org), originally licensed under the Zope Public License * (ZPL) version 2.1, with modifications made on May 12, 2021. * Legal notice of the Zope Public License version 2.1 follows: * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * 1. Redistributions in source code must retain the accompanying copyright * notice, this list of conditions, and the following disclaimer. * 2. Redistributions in binary form must reproduce the accompanying * copyright notice, this list of conditions, and the following disclaimer * in the documentation and/or other materials provided with the * distribution. * 3. Names of the copyright holders must not be used to endorse or promote * products derived from this software without prior written permission * from the copyright holders. * 4. The right to distribute this software or to use it for any purpose does * not give you the right to use Servicemarks (sm) or Trademarks (tm) of * the copyright holders. Use of them is covered by separate agreement * with the copyright holders. * 5. If any files are modified, you must cause the modified files to carry * prominent notices stating that you changed the files and the date of * any change. */ #ifndef POINTER_FLAG_NONE #include #include #define WM_POINTERDEVICECHANGE 0x238 #define WM_POINTERDEVICEINRANGE 0x239 #define WM_POINTERDEVICEOUTOFRANGE 0x23a #define WM_NCPOINTERUPDATE 0x0241 #define WM_NCPOINTERDOWN 0x0242 #define WM_NCPOINTERUP 0x0243 #define WM_POINTERUPDATE 0x0245 #define WM_POINTERDOWN 0x0246 #define WM_POINTERUP 0x0247 #define WM_POINTERENTER 0x0249 #define WM_POINTERLEAVE 0x024a #define WM_POINTERACTIVATE 0x024b #define WM_POINTERCAPTURECHANGED 0x024c #define WM_TOUCHHITTESTING 0x024d #define WM_POINTERWHEEL 0x024e #define WM_POINTERHWHEEL 0x024f #define DM_POINTERHITTEST 0x0250 #define WM_POINTERROUTEDTO 0x0251 #define WM_POINTERROUTEDAWAY 0x0252 #define WM_POINTERROUTEDRELEASED 0x0253 #define POINTER_FLAG_NONE 0x00000000 #define POINTER_FLAG_NEW 0x00000001 #define POINTER_FLAG_INRANGE 0x00000002 #define POINTER_FLAG_INCONTACT 0x00000004 #define POINTER_FLAG_FIRSTBUTTON 0x00000010 #define POINTER_FLAG_SECONDBUTTON 0x00000020 #define POINTER_FLAG_THIRDBUTTON 0x00000040 #define POINTER_FLAG_FOURTHBUTTON 0x00000080 #define POINTER_FLAG_FIFTHBUTTON 0x00000100 #define POINTER_FLAG_PRIMARY 0x00002000 #define POINTER_FLAG_CONFIDENCE 0x00004000 #define POINTER_FLAG_CANCELED 0x00008000 #define POINTER_FLAG_DOWN 0x00010000 #define POINTER_FLAG_UPDATE 0x00020000 #define POINTER_FLAG_UP 0x00040000 #define POINTER_FLAG_WHEEL 0x00080000 #define POINTER_FLAG_HWHEEL 0x00100000 #define POINTER_FLAG_CAPTURECHANGED 0x00200000 #define POINTER_FLAG_HASTRANSFORM 0x00400000 #define POINTER_MOD_SHIFT (0x0004) #define POINTER_MOD_CTRL (0x0008) #define TOUCH_FLAG_NONE 0x00000000 #define TOUCH_MASK_NONE 0x00000000 #define TOUCH_MASK_CONTACTAREA 0x00000001 #define TOUCH_MASK_ORIENTATION 0x00000002 #define TOUCH_MASK_PRESSURE 0x00000004 #define PEN_FLAG_NONE 0x00000000 #define PEN_FLAG_BARREL 0x00000001 #define PEN_FLAG_INVERTED 0x00000002 #define PEN_FLAG_ERASER 0x00000004 #define PEN_MASK_NONE 0x00000000 #define PEN_MASK_PRESSURE 0x00000001 #define PEN_MASK_ROTATION 0x00000002 #define PEN_MASK_TILT_X 0x00000004 #define PEN_MASK_TILT_Y 0x00000008 #define POINTER_MESSAGE_FLAG_NEW 0x00000001 #define POINTER_MESSAGE_FLAG_INRANGE 0x00000002 #define POINTER_MESSAGE_FLAG_INCONTACT 0x00000004 #define POINTER_MESSAGE_FLAG_FIRSTBUTTON 0x00000010 #define POINTER_MESSAGE_FLAG_SECONDBUTTON 0x00000020 #define POINTER_MESSAGE_FLAG_THIRDBUTTON 0x00000040 #define POINTER_MESSAGE_FLAG_FOURTHBUTTON 0x00000080 #define POINTER_MESSAGE_FLAG_FIFTHBUTTON 0x00000100 #define POINTER_MESSAGE_FLAG_PRIMARY 0x00002000 #define POINTER_MESSAGE_FLAG_CONFIDENCE 0x00004000 #define POINTER_MESSAGE_FLAG_CANCELED 0x00008000 #define GET_POINTERID_WPARAM(wParam) (LOWORD (wParam)) #define IS_POINTER_FLAG_SET_WPARAM(wParam, flag) (((DWORD)HIWORD (wParam) &(flag)) == (flag)) #define IS_POINTER_NEW_WPARAM(wParam) IS_POINTER_FLAG_SET_WPARAM (wParam, POINTER_MESSAGE_FLAG_NEW) #define IS_POINTER_INRANGE_WPARAM(wParam) IS_POINTER_FLAG_SET_WPARAM (wParam, POINTER_MESSAGE_FLAG_INRANGE) #define IS_POINTER_INCONTACT_WPARAM(wParam) IS_POINTER_FLAG_SET_WPARAM (wParam, POINTER_MESSAGE_FLAG_INCONTACT) #define IS_POINTER_FIRSTBUTTON_WPARAM(wParam) IS_POINTER_FLAG_SET_WPARAM (wParam, POINTER_MESSAGE_FLAG_FIRSTBUTTON) #define IS_POINTER_SECONDBUTTON_WPARAM(wParam) IS_POINTER_FLAG_SET_WPARAM (wParam, POINTER_MESSAGE_FLAG_SECONDBUTTON) #define IS_POINTER_THIRDBUTTON_WPARAM(wParam) IS_POINTER_FLAG_SET_WPARAM (wParam, POINTER_MESSAGE_FLAG_THIRDBUTTON) #define IS_POINTER_FOURTHBUTTON_WPARAM(wParam) IS_POINTER_FLAG_SET_WPARAM (wParam, POINTER_MESSAGE_FLAG_FOURTHBUTTON) #define IS_POINTER_FIFTHBUTTON_WPARAM(wParam) IS_POINTER_FLAG_SET_WPARAM (wParam, POINTER_MESSAGE_FLAG_FIFTHBUTTON) #define IS_POINTER_PRIMARY_WPARAM(wParam) IS_POINTER_FLAG_SET_WPARAM (wParam, POINTER_MESSAGE_FLAG_PRIMARY) #define HAS_POINTER_CONFIDENCE_WPARAM(wParam) IS_POINTER_FLAG_SET_WPARAM (wParam, POINTER_MESSAGE_FLAG_CONFIDENCE) #define IS_POINTER_CANCELED_WPARAM(wParam) IS_POINTER_FLAG_SET_WPARAM (wParam, POINTER_MESSAGE_FLAG_CANCELED) #define PA_ACTIVATE MA_ACTIVATE #define PA_NOACTIVATE MA_NOACTIVATE typedef DWORD POINTER_INPUT_TYPE; typedef UINT32 POINTER_FLAGS; typedef UINT32 TOUCH_FLAGS; typedef UINT32 TOUCH_MASK; typedef UINT32 PEN_FLAGS; typedef UINT32 PEN_MASK; enum tagPOINTER_INPUT_TYPE { PT_POINTER = 0x00000001, PT_TOUCH = 0x00000002, PT_PEN = 0x00000003, PT_MOUSE = 0x00000004, PT_TOUCHPAD = 0x00000005 }; typedef enum tagFEEDBACK_TYPE { FEEDBACK_TOUCH_CONTACTVISUALIZATION = 1, FEEDBACK_PEN_BARRELVISUALIZATION = 2, FEEDBACK_PEN_TAP = 3, FEEDBACK_PEN_DOUBLETAP = 4, FEEDBACK_PEN_PRESSANDHOLD = 5, FEEDBACK_PEN_RIGHTTAP = 6, FEEDBACK_TOUCH_TAP = 7, FEEDBACK_TOUCH_DOUBLETAP = 8, FEEDBACK_TOUCH_PRESSANDHOLD = 9, FEEDBACK_TOUCH_RIGHTTAP = 10, FEEDBACK_GESTURE_PRESSANDTAP = 11, FEEDBACK_MAX = 0xffffffff } FEEDBACK_TYPE; typedef enum tagPOINTER_BUTTON_CHANGE_TYPE { POINTER_CHANGE_NONE, POINTER_CHANGE_FIRSTBUTTON_DOWN, POINTER_CHANGE_FIRSTBUTTON_UP, POINTER_CHANGE_SECONDBUTTON_DOWN, POINTER_CHANGE_SECONDBUTTON_UP, POINTER_CHANGE_THIRDBUTTON_DOWN, POINTER_CHANGE_THIRDBUTTON_UP, POINTER_CHANGE_FOURTHBUTTON_DOWN, POINTER_CHANGE_FOURTHBUTTON_UP, POINTER_CHANGE_FIFTHBUTTON_DOWN, POINTER_CHANGE_FIFTHBUTTON_UP, } POINTER_BUTTON_CHANGE_TYPE; typedef struct tagPOINTER_INFO { POINTER_INPUT_TYPE pointerType; UINT32 pointerId; UINT32 frameId; POINTER_FLAGS pointerFlags; HANDLE sourceDevice; HWND hwndTarget; POINT ptPixelLocation; POINT ptHimetricLocation; POINT ptPixelLocationRaw; POINT ptHimetricLocationRaw; DWORD dwTime; UINT32 historyCount; INT32 InputData; DWORD dwKeyStates; UINT64 PerformanceCount; POINTER_BUTTON_CHANGE_TYPE ButtonChangeType; } POINTER_INFO; typedef struct tagPOINTER_TOUCH_INFO { POINTER_INFO pointerInfo; TOUCH_FLAGS touchFlags; TOUCH_MASK touchMask; RECT rcContact; RECT rcContactRaw; UINT32 orientation; UINT32 pressure; } POINTER_TOUCH_INFO; typedef struct tagPOINTER_PEN_INFO { POINTER_INFO pointerInfo; PEN_FLAGS penFlags; PEN_MASK penMask; UINT32 pressure; UINT32 rotation; INT32 tiltX; INT32 tiltY; } POINTER_PEN_INFO; typedef enum { POINTER_FEEDBACK_DEFAULT = 1, POINTER_FEEDBACK_INDIRECT = 2, POINTER_FEEDBACK_NONE = 3 } POINTER_FEEDBACK_MODE; typedef struct tagUSAGE_PROPERTIES { USHORT level; USHORT page; USHORT usage; INT32 logicalMinimum; INT32 logicalMaximum; USHORT unit; USHORT exponent; BYTE count; INT32 physicalMinimum; INT32 physicalMaximum; } USAGE_PROPERTIES, *PUSAGE_PROPERTIES; typedef struct tagPOINTER_TYPE_INFO { POINTER_INPUT_TYPE type; union { POINTER_TOUCH_INFO touchInfo; POINTER_PEN_INFO penInfo; } DUMMYUNIONNAME; } POINTER_TYPE_INFO, *PPOINTER_TYPE_INFO; #define POINTER_DEVICE_PRODUCT_STRING_MAX 520 #define PDC_ARRIVAL 0x001 #define PDC_REMOVAL 0x002 #define PDC_ORIENTATION_0 0x004 #define PDC_ORIENTATION_90 0x008 #define PDC_ORIENTATION_180 0x010 #define PDC_ORIENTATION_270 0x020 #define PDC_MODE_DEFAULT 0x040 #define PDC_MODE_CENTERED 0x080 #define PDC_MAPPING_CHANGE 0x100 #define PDC_RESOLUTION 0x200 #define PDC_ORIGIN 0x400 #define PDC_MODE_ASPECTRATIOPRESERVED 0x800 typedef enum tagPOINTER_DEVICE_TYPE { POINTER_DEVICE_TYPE_INTEGRATED_PEN = 0x00000001, POINTER_DEVICE_TYPE_EXTERNAL_PEN = 0x00000002, POINTER_DEVICE_TYPE_TOUCH = 0x00000003, POINTER_DEVICE_TYPE_TOUCH_PAD = 0x00000004, POINTER_DEVICE_TYPE_MAX = 0xffffffff } POINTER_DEVICE_TYPE; typedef struct tagPOINTER_DEVICE_INFO { DWORD displayOrientation; HANDLE device; POINTER_DEVICE_TYPE pointerDeviceType; HMONITOR monitor; ULONG startingCursorId; USHORT maxActiveContacts; WCHAR productString[POINTER_DEVICE_PRODUCT_STRING_MAX]; } POINTER_DEVICE_INFO; typedef struct tagPOINTER_DEVICE_PROPERTY { INT32 logicalMin; INT32 logicalMax; INT32 physicalMin; INT32 physicalMax; UINT32 unit; UINT32 unitExponent; USHORT usagePageId; USHORT usageId; } POINTER_DEVICE_PROPERTY; typedef enum tagPOINTER_DEVICE_CURSOR_TYPE { POINTER_DEVICE_CURSOR_TYPE_UNKNOWN = 0x00000000, POINTER_DEVICE_CURSOR_TYPE_TIP = 0x00000001, POINTER_DEVICE_CURSOR_TYPE_ERASER = 0x00000002, POINTER_DEVICE_CURSOR_TYPE_MAX = 0xffffffff } POINTER_DEVICE_CURSOR_TYPE; typedef struct tagPOINTER_DEVICE_CURSOR_INFO { UINT32 cursorId; POINTER_DEVICE_CURSOR_TYPE cursor; } POINTER_DEVICE_CURSOR_INFO; #endif /* POINTER_FLAG_NONE */ #if WINVER < 0x0601 typedef struct tagGESTURECONFIG { DWORD dwID; DWORD dwWant; DWORD dwBlock; } GESTURECONFIG,*PGESTURECONFIG; #endif /* WINVER < 0x0601 */ #ifndef MICROSOFT_TABLETPENSERVICE_PROPERTY #define MICROSOFT_TABLETPENSERVICE_PROPERTY _T("MicrosoftTabletPenServiceProperty") #endif