325 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			325 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /* 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 <http://www.gnu.org/licenses/>.
 | |
|  */
 | |
| 
 | |
| /* 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 <windows.h>
 | |
| #include <tchar.h>
 | |
| 
 | |
| #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
 | |
| 
 | |
| #ifndef GC_ALLGESTURES
 | |
| #define GC_ALLGESTURES 0x1
 | |
| #endif
 | |
| 
 | |
| 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
 | 
