This repository has been archived by the owner. It is now read-only.
Permalink
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Added Wacom API headers.
FIXME: Dynamically load the Wacom API functions from wintab32.dll
- Loading branch information
Showing
with
1,257 additions
and 33 deletions.
- +6 −15 src/video/win32/SDL_win32events.c
- +10 −4 src/video/win32/SDL_win32keyboard.c
- +0 −5 src/video/win32/SDL_win32mouse.c
- +0 −2 src/video/win32/SDL_win32video.c
- +5 −0 src/video/win32/SDL_win32video.h
- +0 −7 src/video/win32/SDL_win32window.c
- +236 −0 src/video/win32/wactab/pktdef.h
- +865 −0 src/video/win32/wactab/wintab.h
- +135 −0 src/video/win32/wactab/wintabx.h
@@ -0,0 +1,236 @@ | ||
/* -------------------------------- pktdef.h -------------------------------- */ | ||
/* Combined 16 & 32-bit version. */ | ||
|
||
/*------------------------------------------------------------------------------ | ||
The text and information contained in this file may be freely used, | ||
copied, or distributed without compensation or licensing restrictions. | ||
This file is copyright 1991-1998 by LCS/Telegraphics. | ||
------------------------------------------------------------------------------*/ | ||
/*------------------------------------------------------------------------------ | ||
How to use pktdef.h: | ||
1. Include wintab.h | ||
2. if using just one packet format: | ||
a. Define PACKETDATA and PACKETMODE as or'ed combinations of WTPKT bits | ||
(use the PK_* identifiers). | ||
b. Include pktdef.h. | ||
c. The generated structure typedef will be called PACKET. Use PACKETDATA | ||
and PACKETMODE to fill in the LOGCONTEXT structure. | ||
3. If using multiple packet formats, for each one: | ||
a. Define PACKETNAME. Its text value will be a prefix for this packet's | ||
parameters and names. | ||
b. Define <PACKETNAME>PACKETDATA and <PACKETNAME>PACKETMODE similar to | ||
2.a. above. | ||
c. Include pktdef.h. | ||
d. The generated structure typedef will be called | ||
<PACKETNAME>PACKET. Compare with 2.c. above and example #2 below. | ||
4. If using extension packet data, do the following additional steps | ||
for each extension: | ||
a. Before including pktdef.h, define <PACKETNAME>PACKET<EXTENSION> | ||
as either PKEXT_ABSOLUTE or PKEXT_RELATIVE. | ||
b. The generated structure typedef will contain a field for the | ||
extension data. | ||
c. Scan the WTI_EXTENSION categories to find the extension's | ||
packet mask bit. | ||
d. OR the packet mask bit with <PACKETNAME>PACKETDATA and use the | ||
result in the lcPktData field of the LOGCONTEXT structure. | ||
e. If <PACKETNAME>PACKET<EXTENSION> was PKEXT_RELATIVE, OR the | ||
packet mask bit with <PACKETNAME>PACKETMODE and use the result | ||
in the lcPktMode field of the LOGCONTEXT structure. | ||
Example #1. -- single packet format | ||
#include <wintab.h> | ||
#define PACKETDATA PK_X | PK_Y | PK_BUTTONS /@ x, y, buttons @/ | ||
#define PACKETMODE PK_BUTTONS /@ buttons relative mode @/ | ||
#include <pktdef.h> | ||
... | ||
lc.lcPktData = PACKETDATA; | ||
lc.lcPktMode = PACKETMODE; | ||
Example #2. -- multiple formats | ||
#include <wintab.h> | ||
#define PACKETNAME MOE | ||
#define MOEPACKETDATA PK_X | PK_Y | PK_BUTTONS /@ x, y, buttons @/ | ||
#define MOEPACKETMODE PK_BUTTONS /@ buttons relative mode @/ | ||
#include <pktdef.h> | ||
#define PACKETNAME LARRY | ||
#define LARRYPACKETDATA PK_Y | PK_Z | PK_BUTTONS /@ y, z, buttons @/ | ||
#define LARRYPACKETMODE PK_BUTTONS /@ buttons relative mode @/ | ||
#include <pktdef.h> | ||
#define PACKETNAME CURLY | ||
#define CURLYPACKETDATA PK_X | PK_Z | PK_BUTTONS /@ x, z, buttons @/ | ||
#define CURLYPACKETMODE PK_BUTTONS /@ buttons relative mode @/ | ||
#include <pktdef.h> | ||
... | ||
lcMOE.lcPktData = MOEPACKETDATA; | ||
lcMOE.lcPktMode = MOEPACKETMODE; | ||
... | ||
lcLARRY.lcPktData = LARRYPACKETDATA; | ||
lcLARRY.lcPktMode = LARRYPACKETMODE; | ||
... | ||
lcCURLY.lcPktData = CURLYPACKETDATA; | ||
lcCURLY.lcPktMode = CURLYPACKETMODE; | ||
Example #3. -- extension packet data "XFOO". | ||
#include <wintab.h> | ||
#define PACKETDATA PK_X | PK_Y | PK_BUTTONS /@ x, y, buttons @/ | ||
#define PACKETMODE PK_BUTTONS /@ buttons relative mode @/ | ||
#define PACKETXFOO PKEXT_ABSOLUTE /@ XFOO absolute mode @/ | ||
#include <pktdef.h> | ||
... | ||
UINT ScanExts(UINT wTag) | ||
{ | ||
UINT i; | ||
UINT wScanTag; | ||
/@ scan for wTag's info category. @/ | ||
for (i = 0; WTInfo(WTI_EXTENSIONS + i, EXT_TAG, &wScanTag); i++) { | ||
if (wTag == wScanTag) { | ||
/@ return category offset from WTI_EXTENSIONS. @/ | ||
return i; | ||
} | ||
} | ||
/@ return error code. @/ | ||
return 0xFFFF; | ||
} | ||
... | ||
lc.lcPktData = PACKETDATA; | ||
lc.lcPktMode = PACKETMODE; | ||
#ifdef PACKETXFOO | ||
categoryXFOO = ScanExts(WTX_XFOO); | ||
WTInfo(WTI_EXTENSIONS + categoryXFOO, EXT_MASK, &maskXFOO); | ||
lc.lcPktData |= maskXFOO; | ||
#if PACKETXFOO == PKEXT_RELATIVE | ||
lc.lcPktMode |= maskXFOO; | ||
#endif | ||
#endif | ||
WTOpen(hWnd, &lc, TRUE); | ||
------------------------------------------------------------------------------*/ | ||
#ifdef __cplusplus | ||
extern "C" { | ||
#endif /* __cplusplus */ | ||
|
||
#ifndef PACKETNAME | ||
/* if no packet name prefix */ | ||
#define __PFX(x) x | ||
#define __IFX(x,y) x ## y | ||
#else | ||
/* add prefixes and infixes to packet format names */ | ||
#define __PFX(x) __PFX2(PACKETNAME,x) | ||
#define __PFX2(p,x) __PFX3(p,x) | ||
#define __PFX3(p,x) p ## x | ||
#define __IFX(x,y) __IFX2(x,PACKETNAME,y) | ||
#define __IFX2(x,i,y) __IFX3(x,i,y) | ||
#define __IFX3(x,i,y) x ## i ## y | ||
#endif | ||
|
||
#define __SFX2(x,s) __SFX3(x,s) | ||
#define __SFX3(x,s) x ## s | ||
|
||
#define __TAG __IFX(tag,PACKET) | ||
#define __TYPES __PFX(PACKET), * __IFX(P,PACKET), NEAR * __IFX(NP,PACKET), \ | ||
FAR * __IFX(LP,PACKET) | ||
|
||
#define __DATA (__PFX(PACKETDATA)) | ||
#define __MODE (__PFX(PACKETMODE)) | ||
#define __EXT(x) __SFX2(__PFX(PACKET),x) | ||
|
||
|
||
typedef struct __TAG { | ||
#if (__DATA & PK_CONTEXT) | ||
HCTX pkContext; | ||
#endif | ||
#if (__DATA & PK_STATUS) | ||
UINT pkStatus; | ||
#endif | ||
#if (__DATA & PK_TIME) | ||
DWORD pkTime; | ||
#endif | ||
#if (__DATA & PK_CHANGED) | ||
WTPKT pkChanged; | ||
#endif | ||
#if (__DATA & PK_SERIAL_NUMBER) | ||
UINT pkSerialNumber; | ||
#endif | ||
#if (__DATA & PK_CURSOR) | ||
UINT pkCursor; | ||
#endif | ||
#if (__DATA & PK_BUTTONS) | ||
DWORD pkButtons; | ||
#endif | ||
#if (__DATA & PK_X) | ||
LONG pkX; | ||
#endif | ||
#if (__DATA & PK_Y) | ||
LONG pkY; | ||
#endif | ||
#if (__DATA & PK_Z) | ||
LONG pkZ; | ||
#endif | ||
#if (__DATA & PK_NORMAL_PRESSURE) | ||
#if (__MODE & PK_NORMAL_PRESSURE) | ||
/* relative */ | ||
int pkNormalPressure; | ||
#else | ||
/* absolute */ | ||
UINT pkNormalPressure; | ||
#endif | ||
#endif | ||
#if (__DATA & PK_TANGENT_PRESSURE) | ||
#if (__MODE & PK_TANGENT_PRESSURE) | ||
/* relative */ | ||
int pkTangentPressure; | ||
#else | ||
/* absolute */ | ||
UINT pkTangentPressure; | ||
#endif | ||
#endif | ||
#if (__DATA & PK_ORIENTATION) | ||
ORIENTATION pkOrientation; | ||
#endif | ||
#if (__DATA & PK_ROTATION) | ||
ROTATION pkRotation; /* 1.1 */ | ||
#endif | ||
|
||
#ifndef NOWTEXTENSIONS | ||
/* extensions begin here. */ | ||
#if (__EXT(FKEYS) == PKEXT_RELATIVE) || (__EXT(FKEYS) == PKEXT_ABSOLUTE) | ||
UINT pkFKeys; | ||
#endif | ||
#if (__EXT(TILT) == PKEXT_RELATIVE) || (__EXT(TILT) == PKEXT_ABSOLUTE) | ||
TILT pkTilt; | ||
#endif | ||
#if (__EXT(EXPKEYS) == PKEXT_RELATIVE) || (__EXT(EXPKEYS) == PKEXT_ABSOLUTE) | ||
WORD pkExpKeys[4]; /* 1.3 */ | ||
#endif | ||
#endif | ||
|
||
} __TYPES ; | ||
|
||
#undef PACKETNAME | ||
#undef __TAG | ||
#undef __TAG2 | ||
#undef __TYPES | ||
#undef __TYPES2 | ||
#undef __DATA | ||
#undef __MODE | ||
#undef __PFX | ||
#undef __PFX2 | ||
#undef __PFX3 | ||
#undef __IFX | ||
#undef __IFX2 | ||
#undef __IFX3 | ||
#undef __SFX2 | ||
#undef __SFX3 | ||
|
||
#ifdef __cplusplus | ||
} | ||
#endif /* __cplusplus */ |
Oops, something went wrong.