comparison src/video/win32/wactab/pktdef.h @ 2724:0e2b65f32298

Added Wacom API headers. FIXME: Dynamically load the Wacom API functions from wintab32.dll
author Sam Lantinga <slouken@libsdl.org>
date Tue, 26 Aug 2008 05:26:28 +0000
parents
children f23ebf1ddac4
comparison
equal deleted inserted replaced
2723:911db724ea24 2724:0e2b65f32298
1 /* -------------------------------- pktdef.h -------------------------------- */
2 /* Combined 16 & 32-bit version. */
3
4 /*------------------------------------------------------------------------------
5 The text and information contained in this file may be freely used,
6 copied, or distributed without compensation or licensing restrictions.
7
8 This file is copyright 1991-1998 by LCS/Telegraphics.
9 ------------------------------------------------------------------------------*/
10 /*------------------------------------------------------------------------------
11
12 How to use pktdef.h:
13
14 1. Include wintab.h
15 2. if using just one packet format:
16 a. Define PACKETDATA and PACKETMODE as or'ed combinations of WTPKT bits
17 (use the PK_* identifiers).
18 b. Include pktdef.h.
19 c. The generated structure typedef will be called PACKET. Use PACKETDATA
20 and PACKETMODE to fill in the LOGCONTEXT structure.
21 3. If using multiple packet formats, for each one:
22 a. Define PACKETNAME. Its text value will be a prefix for this packet's
23 parameters and names.
24 b. Define <PACKETNAME>PACKETDATA and <PACKETNAME>PACKETMODE similar to
25 2.a. above.
26 c. Include pktdef.h.
27 d. The generated structure typedef will be called
28 <PACKETNAME>PACKET. Compare with 2.c. above and example #2 below.
29 4. If using extension packet data, do the following additional steps
30 for each extension:
31 a. Before including pktdef.h, define <PACKETNAME>PACKET<EXTENSION>
32 as either PKEXT_ABSOLUTE or PKEXT_RELATIVE.
33 b. The generated structure typedef will contain a field for the
34 extension data.
35 c. Scan the WTI_EXTENSION categories to find the extension's
36 packet mask bit.
37 d. OR the packet mask bit with <PACKETNAME>PACKETDATA and use the
38 result in the lcPktData field of the LOGCONTEXT structure.
39 e. If <PACKETNAME>PACKET<EXTENSION> was PKEXT_RELATIVE, OR the
40 packet mask bit with <PACKETNAME>PACKETMODE and use the result
41 in the lcPktMode field of the LOGCONTEXT structure.
42
43
44 Example #1. -- single packet format
45
46 #include <wintab.h>
47 #define PACKETDATA PK_X | PK_Y | PK_BUTTONS /@ x, y, buttons @/
48 #define PACKETMODE PK_BUTTONS /@ buttons relative mode @/
49 #include <pktdef.h>
50 ...
51 lc.lcPktData = PACKETDATA;
52 lc.lcPktMode = PACKETMODE;
53
54 Example #2. -- multiple formats
55
56 #include <wintab.h>
57 #define PACKETNAME MOE
58 #define MOEPACKETDATA PK_X | PK_Y | PK_BUTTONS /@ x, y, buttons @/
59 #define MOEPACKETMODE PK_BUTTONS /@ buttons relative mode @/
60 #include <pktdef.h>
61 #define PACKETNAME LARRY
62 #define LARRYPACKETDATA PK_Y | PK_Z | PK_BUTTONS /@ y, z, buttons @/
63 #define LARRYPACKETMODE PK_BUTTONS /@ buttons relative mode @/
64 #include <pktdef.h>
65 #define PACKETNAME CURLY
66 #define CURLYPACKETDATA PK_X | PK_Z | PK_BUTTONS /@ x, z, buttons @/
67 #define CURLYPACKETMODE PK_BUTTONS /@ buttons relative mode @/
68 #include <pktdef.h>
69 ...
70 lcMOE.lcPktData = MOEPACKETDATA;
71 lcMOE.lcPktMode = MOEPACKETMODE;
72 ...
73 lcLARRY.lcPktData = LARRYPACKETDATA;
74 lcLARRY.lcPktMode = LARRYPACKETMODE;
75 ...
76 lcCURLY.lcPktData = CURLYPACKETDATA;
77 lcCURLY.lcPktMode = CURLYPACKETMODE;
78
79 Example #3. -- extension packet data "XFOO".
80
81 #include <wintab.h>
82 #define PACKETDATA PK_X | PK_Y | PK_BUTTONS /@ x, y, buttons @/
83 #define PACKETMODE PK_BUTTONS /@ buttons relative mode @/
84 #define PACKETXFOO PKEXT_ABSOLUTE /@ XFOO absolute mode @/
85 #include <pktdef.h>
86 ...
87 UINT ScanExts(UINT wTag)
88 {
89 UINT i;
90 UINT wScanTag;
91
92 /@ scan for wTag's info category. @/
93 for (i = 0; WTInfo(WTI_EXTENSIONS + i, EXT_TAG, &wScanTag); i++) {
94 if (wTag == wScanTag) {
95 /@ return category offset from WTI_EXTENSIONS. @/
96 return i;
97 }
98 }
99 /@ return error code. @/
100 return 0xFFFF;
101 }
102 ...
103 lc.lcPktData = PACKETDATA;
104 lc.lcPktMode = PACKETMODE;
105 #ifdef PACKETXFOO
106 categoryXFOO = ScanExts(WTX_XFOO);
107 WTInfo(WTI_EXTENSIONS + categoryXFOO, EXT_MASK, &maskXFOO);
108 lc.lcPktData |= maskXFOO;
109 #if PACKETXFOO == PKEXT_RELATIVE
110 lc.lcPktMode |= maskXFOO;
111 #endif
112 #endif
113 WTOpen(hWnd, &lc, TRUE);
114
115
116 ------------------------------------------------------------------------------*/
117 #ifdef __cplusplus
118 extern "C" {
119 #endif /* __cplusplus */
120
121 #ifndef PACKETNAME
122 /* if no packet name prefix */
123 #define __PFX(x) x
124 #define __IFX(x,y) x ## y
125 #else
126 /* add prefixes and infixes to packet format names */
127 #define __PFX(x) __PFX2(PACKETNAME,x)
128 #define __PFX2(p,x) __PFX3(p,x)
129 #define __PFX3(p,x) p ## x
130 #define __IFX(x,y) __IFX2(x,PACKETNAME,y)
131 #define __IFX2(x,i,y) __IFX3(x,i,y)
132 #define __IFX3(x,i,y) x ## i ## y
133 #endif
134
135 #define __SFX2(x,s) __SFX3(x,s)
136 #define __SFX3(x,s) x ## s
137
138 #define __TAG __IFX(tag,PACKET)
139 #define __TYPES __PFX(PACKET), * __IFX(P,PACKET), NEAR * __IFX(NP,PACKET), \
140 FAR * __IFX(LP,PACKET)
141
142 #define __DATA (__PFX(PACKETDATA))
143 #define __MODE (__PFX(PACKETMODE))
144 #define __EXT(x) __SFX2(__PFX(PACKET),x)
145
146
147 typedef struct __TAG {
148 #if (__DATA & PK_CONTEXT)
149 HCTX pkContext;
150 #endif
151 #if (__DATA & PK_STATUS)
152 UINT pkStatus;
153 #endif
154 #if (__DATA & PK_TIME)
155 DWORD pkTime;
156 #endif
157 #if (__DATA & PK_CHANGED)
158 WTPKT pkChanged;
159 #endif
160 #if (__DATA & PK_SERIAL_NUMBER)
161 UINT pkSerialNumber;
162 #endif
163 #if (__DATA & PK_CURSOR)
164 UINT pkCursor;
165 #endif
166 #if (__DATA & PK_BUTTONS)
167 DWORD pkButtons;
168 #endif
169 #if (__DATA & PK_X)
170 LONG pkX;
171 #endif
172 #if (__DATA & PK_Y)
173 LONG pkY;
174 #endif
175 #if (__DATA & PK_Z)
176 LONG pkZ;
177 #endif
178 #if (__DATA & PK_NORMAL_PRESSURE)
179 #if (__MODE & PK_NORMAL_PRESSURE)
180 /* relative */
181 int pkNormalPressure;
182 #else
183 /* absolute */
184 UINT pkNormalPressure;
185 #endif
186 #endif
187 #if (__DATA & PK_TANGENT_PRESSURE)
188 #if (__MODE & PK_TANGENT_PRESSURE)
189 /* relative */
190 int pkTangentPressure;
191 #else
192 /* absolute */
193 UINT pkTangentPressure;
194 #endif
195 #endif
196 #if (__DATA & PK_ORIENTATION)
197 ORIENTATION pkOrientation;
198 #endif
199 #if (__DATA & PK_ROTATION)
200 ROTATION pkRotation; /* 1.1 */
201 #endif
202
203 #ifndef NOWTEXTENSIONS
204 /* extensions begin here. */
205 #if (__EXT(FKEYS) == PKEXT_RELATIVE) || (__EXT(FKEYS) == PKEXT_ABSOLUTE)
206 UINT pkFKeys;
207 #endif
208 #if (__EXT(TILT) == PKEXT_RELATIVE) || (__EXT(TILT) == PKEXT_ABSOLUTE)
209 TILT pkTilt;
210 #endif
211 #if (__EXT(EXPKEYS) == PKEXT_RELATIVE) || (__EXT(EXPKEYS) == PKEXT_ABSOLUTE)
212 WORD pkExpKeys[4]; /* 1.3 */
213 #endif
214 #endif
215
216 } __TYPES ;
217
218 #undef PACKETNAME
219 #undef __TAG
220 #undef __TAG2
221 #undef __TYPES
222 #undef __TYPES2
223 #undef __DATA
224 #undef __MODE
225 #undef __PFX
226 #undef __PFX2
227 #undef __PFX3
228 #undef __IFX
229 #undef __IFX2
230 #undef __IFX3
231 #undef __SFX2
232 #undef __SFX3
233
234 #ifdef __cplusplus
235 }
236 #endif /* __cplusplus */