From: Luca Bacci Date: Wed, 18 Aug 2021 10:34:24 +0000 (+0200) Subject: Add winpointer.h header file for type declarations X-Git-Tag: archive/raspbian/4.4.1+ds1-2+rpi1^2~18^2~1^2~6^2~9 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=fffa903ce9baaf8e908388950b734f9e98cbabfb;p=gtk4.git Add winpointer.h header file for type declarations --- diff --git a/gdk/win32/winpointer.h b/gdk/win32/winpointer.h new file mode 100644 index 0000000000..ee3e42e063 --- /dev/null +++ b/gdk/win32/winpointer.h @@ -0,0 +1,320 @@ +/* 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