aboutsummaryrefslogtreecommitdiffstats
path: root/code/macosx/CGPrivateAPI.h
blob: dd522372a861096b3c1b7429a4da5579c382e838 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
/*
===========================================================================
Copyright (C) 1999-2005 Id Software, Inc.

This file is part of Quake III Arena source code.

Quake III Arena source code is free software; you can redistribute it
and/or modify it under the terms of the GNU General Public License as
published by the Free Software Foundation; either version 2 of the License,
or (at your option) any later version.

Quake III Arena source code 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 General Public License for more details.

You should have received a copy of the GNU General Public License
along with Foobar; if not, write to the Free Software
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
===========================================================================
*/


typedef unsigned long CGSNotificationType;
typedef void * CGSNotificationData;
typedef void * CGSNotificationArg;
typedef void * CGSWindowID;
typedef void * CGSConnectionID;

typedef unsigned long long      CGSUInt64;
typedef long long               CGSInt64;
typedef unsigned long           CGSUInt32;
typedef long                    CGSInt32;
typedef unsigned short          CGSUInt16;
typedef short                   CGSInt16;
typedef unsigned char           CGSUInt8;
typedef char                    CGSInt8;
typedef float                   CGSFloat32;

typedef CGSUInt32 CGSByteCount;
typedef CGSUInt16 CGSEventRecordVersion;
typedef unsigned long CGSEventType;
typedef CGSUInt64 CGSEventRecordTime;  /* nanosecond timer */
typedef unsigned long CGSEventFlag;
typedef CGSUInt32  CGSError;


typedef	union {
    struct {	/* For mouse events */
        CGSUInt8	subx;			/* sub-pixel position for x */
        CGSUInt8	suby;			/* sub-pixel position for y */
        CGSInt16	eventNum;		/* unique identifier for this button */
        CGSInt32	click;			/* click state of this event */
        CGSUInt8	pressure;	/* pressure value: 0=none, 255=full */
        CGSInt8		_reserved1;
        CGSInt16	_reserved2;
        CGSInt16	deltaX;
        CGSInt16	deltaY;
        CGSInt32	_padding[8];
    } mouse;
    struct {	/* For pointer movement events */
        CGSInt16	_obsolete_deltaX;	/* Revert to subX, subY, eventNum */
        CGSInt16	_obsolete_deltaY;	/* for Gonzo 1H */
        CGSInt32	click;			/* click state of this event */
        CGSUInt8	pressure;	/* pressure value: 0=none, 255=full */
        CGSInt8		_reserved1;
        CGSInt16	_reserved2;
        CGSInt16	deltaX;
        CGSInt16	deltaY;
        CGSInt32	_padding[8];
    } move;
    struct {	/* For key-down and key-up events */
        CGSInt16	reserved;
        CGSInt16	repeat;		/* for key-down: nonzero if really a repeat */
        CGSUInt16	charSet;	/* character set code */
        CGSUInt16	charCode;	/* character code in that set */
        CGSUInt16	keyCode;	/* device-dependent virtual key code */
        CGSInt16	keyData;	/* device-dependent info */
        CGSInt16	specialKey;	/* CPSSpecialKeyID if kCGSFlagsMaskSpecialKey is set */
        CGSInt16	_pad;
        CGSInt32	_padding[8];
    } key;
    struct {	/* For mouse-entered and mouse-exited events */
        CGSInt16	reserved;
        CGSInt16	eventNum;	/* unique identifier from mouse down event */
        CGSInt32	trackingNum;	/* unique identifier from settrackingrect */
        CGSInt32	userData;	/* unCGSInt32erpreted CGSInt32eger from settrackingrect */
        CGSInt32	_padding[9];
    } tracking;
    struct {	/* For process-related events */
        CGSUInt16	notifyCode;	/* CPSNotificationCodes in CPSProcesses.h */
        CGSUInt16	flags;		/* CPSEventFlags in CPSProcesses.h */
        CGSUInt32	targetHiPSN;	/* hiword of PSN */
        CGSUInt32	targetLoPSN;	/* loword of PSN */
        CGSInt32	status;		/* operation result */
        CGSInt32	_padding[8];
    } process;
    struct {		/* For scroll wheel events */
        CGSInt16	deltaAxis1;
        CGSInt16	deltaAxis2;
        CGSInt16	deltaAxis3;
        CGSInt16	reserved1;
        CGSInt32	reserved2;
        CGSInt32	_padding[9];
    } scrollWheel;
    struct {
        CGSInt32	x;	/* absolute x coordinate in tablet space at full tablet resolution */
        CGSInt32	y;	/* absolute y coordinate in tablet space at full tablet resolution */
        CGSInt32	z;	/* absolute z coordinate in tablet space at full tablet resolution */
        CGSUInt16	buttons;	/* one bit per button - bit 0 is first button - 1 = closed */
        CGSUInt16	pressure;	/* scaled pressure value; MAXPRESSURE=(2^16)-1, MINPRESSURE=0 */
        struct {
            CGSInt16 x;	/* scaled tilt x value; range is -((2^15)-1) to (2^15)-1 (-32767 to 32767) */
            CGSInt16 y;	/* scaled tilt y value; range is -((2^15)-1) to (2^15)-1 (-32767 to 32767) */
        } tilt;
        CGSUInt16	rotation;	/* Fixed-point representation of device rotation in a 10.6 format */
        CGSInt16	tangentialPressure;	/* tangential pressure on the device; range same as tilt */
        CGSUInt16	deviceID;	/* system-assigned unique device ID - matches to deviceID field in proximity event */
        CGSInt16	vendor1;	/* vendor-defined signed 16-bit integer */
        CGSInt16	vendor2;	/* vendor-defined signed 16-bit integer */
        CGSInt16	vendor3;	/* vendor-defined signed 16-bit integer */
        CGSInt32	_padding[4];
    } tablet;
    struct {
        CGSUInt16	vendorID;	/* vendor-defined ID - typically will be USB vendor ID */
        CGSUInt16	tabletID;	/* vendor-defined tablet ID - typically will be USB product ID for the tablet */
        CGSUInt16	pointerID;	/* vendor-defined ID of the specific pointing device */
        CGSUInt16	deviceID;	/* system-assigned unique device ID - matches to deviceID field in tablet event */
        CGSUInt16	systemTabletID;	/* system-assigned unique tablet ID */
        CGSUInt16	vendorPointerType;	/* vendor-defined pointer type */
        CGSUInt32  pointerSerialNumber;	/* vendor-defined serial number of the specific pointing device */
        CGSUInt64	uniqueID;	/* vendor-defined unique ID for this pointer */
        CGSUInt32	capabilityMask;	/* mask representing the capabilities of the device */
        CGSUInt8	pointerType;	/* type of pointing device - enum to be defined */
        CGSUInt8	enterProximity;	/* non-zero = entering; zero = leaving */
        CGSInt16	reserved1;
        CGSInt32	_padding[4];
    } proximity;
    struct {	/* For AppKit-defined, sys-defined, and app-defined events */
        CGSInt16	reserved;
        CGSInt16	subtype;	/* event subtype for compound events */
        union {
            CGSFloat32	F[11];	/* for use in compound events */
            CGSInt32	L[11];	/* for use in compound events */
            CGSInt16	S[22];	/* for use in compound events */
            CGSInt8	C[44];	/* for use in compound events */
        } misc;
    } compound;
} CGSEventRecordData;


struct _CGSEventRecord {
    CGSEventRecordVersion major;
    CGSEventRecordVersion minor;
    CGSByteCount length;	/* Length of complete event record */
    CGSEventType type;		/* An event type from above */
    CGPoint location;		/* Base coordinates (global), from upper-left */
    CGPoint windowLocation;	/* Coordinates relative to window */
    CGSEventRecordTime time;	/* nanoseconds since startup */
    CGSEventFlag flags;		/* key state flags */
    CGSWindowID	window;		/* window number of assigned window */
    CGSConnectionID connection;	/* connection the event came from */
    CGSEventRecordData data;	/* type-dependent data: 40 bytes */
};
typedef struct _CGSEventRecord CGSEventRecord;
typedef CGSEventRecord *CGSEventRecordPtr;


typedef void (*CGSNotifyProcPtr)(CGSNotificationType type,
                                CGSNotificationData data,
                                CGSByteCount dataLength,
                                CGSNotificationArg arg);

// Define a type for the 'CGSRegisterNotifyProc' call.  Don't reference it explicitly since we don't want link errors if Apple removes this private function.
typedef CGSError (*CGSRegisterNotifyProcType)(CGSNotifyProcPtr proc,
                                              CGSNotificationType type,
                                              CGSNotificationArg arg);


#define kCGSEventNotificationMouseMoved                    (710 + 5)
#define kCGSEventNotificationLeftMouseDragged              (710 + 6)
#define kCGSEventNotificationRightMouseDragged             (710 + 7)
#define kCGSEventNotificationNotificationOtherMouseDragged (710 + 27)