source: trunk/src/3rdparty/wintab/pktdef.h@ 890

Last change on this file since 890 was 2, checked in by Dmitry A. Kuminov, 16 years ago

Initially imported qt-all-opensource-src-4.5.1 from Trolltech.

File size: 6.2 KB
Line 
1/* -------------------------------- pktdef.h -------------------------------- */
2/* Combined 16 & 32-bit version. */
3
4/*------------------------------------------------------------------------------
5The text and information contained in this file may be freely used,
6copied, or distributed without compensation or licensing restrictions.
7
8This file is copyright 1991-1998 by LCS/Telegraphics.
9------------------------------------------------------------------------------*/
10/*------------------------------------------------------------------------------
11
12How to use pktdef.h:
13
141. Include wintab.h
152. 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.
213. 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.
294. 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
44Example #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
54Example #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
79Example #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...
87UINT 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
118extern "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
147typedef 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#endif
212
213} __TYPES ;
214
215#undef PACKETNAME
216#undef __TAG
217#undef __TAG2
218#undef __TYPES
219#undef __TYPES2
220#undef __DATA
221#undef __MODE
222#undef __PFX
223#undef __PFX2
224#undef __PFX3
225#undef __IFX
226#undef __IFX2
227#undef __IFX3
228#undef __SFX2
229#undef __SFX3
230
231#ifdef __cplusplus
232}
233#endif /* __cplusplus */
Note: See TracBrowser for help on using the repository browser.