Build Wintab support always on Windows. Don't require the Wintab SDK.
2007-01-19 Tor Lillqvist <tml@novell.com> Build Wintab support always on Windows. Don't require the Wintab SDK. * configure.in: Drop the --with-wintab option. Drop the HAVE_WINTAB feature test macro and Automake variable. * acconfig.h * config.h.win32.in: Drop HAVE_WINTAB. * gdk/win32/gdkevents-win32.c * gdk/win32/gdkinput.c * gdk/win32/gdkinput-win32.h * gdk/win32/gdkinput-win32.c * gdk/win32/gdkmain-win32.c: Make HAVE_WINTAB ifdef blocks unconditional. * gdk/win32/gdkinput-win32.c (_gdk_input_wintab_init_check): Try to load wintab32.dll dynamically here. If it is found look up the handful Wintab functions we use. (rest of file): Use these function pointers instead of calling the functions from wntab32x.lib. The code in wntab32x.lib did the same thing anyway: tried to load wintab32.dll, and looked up the addresses of the actual functions from it. * gdk/Makefile.am * gdk/win32/Makefile.am: Drop the libwntab32x hacks. * gdk/win32/wintab.h * gdk/win32/pktdef.h: New files. Copied from the Wintab SDK. Copyright blurb says: "The text and information contained in this file may be freely used, copied, or distributed without compensation or licensing restrictions." * README.win32: Update a bit. Remove the text about the Wintab SDK. svn path=/trunk/; revision=17186
This commit is contained in:
committed by
Tor Lillqvist
parent
f1ce05caa9
commit
f6b4585c98
38
ChangeLog
38
ChangeLog
@ -1,3 +1,41 @@
|
|||||||
|
2007-01-19 Tor Lillqvist <tml@novell.com>
|
||||||
|
|
||||||
|
Build Wintab support always on Windows. Don't require the Wintab
|
||||||
|
SDK.
|
||||||
|
|
||||||
|
* configure.in: Drop the --with-wintab option. Drop the
|
||||||
|
HAVE_WINTAB feature test macro and Automake variable.
|
||||||
|
|
||||||
|
* acconfig.h
|
||||||
|
* config.h.win32.in: Drop HAVE_WINTAB.
|
||||||
|
|
||||||
|
* gdk/win32/gdkevents-win32.c
|
||||||
|
* gdk/win32/gdkinput.c
|
||||||
|
* gdk/win32/gdkinput-win32.h
|
||||||
|
* gdk/win32/gdkinput-win32.c
|
||||||
|
* gdk/win32/gdkmain-win32.c: Make HAVE_WINTAB ifdef blocks
|
||||||
|
unconditional.
|
||||||
|
|
||||||
|
* gdk/win32/gdkinput-win32.c (_gdk_input_wintab_init_check): Try
|
||||||
|
to load wintab32.dll dynamically here. If it is found look up the
|
||||||
|
handful Wintab functions we use.
|
||||||
|
(rest of file): Use these function pointers instead of calling the
|
||||||
|
functions from wntab32x.lib. The code in wntab32x.lib did the same
|
||||||
|
thing anyway: tried to load wintab32.dll, and looked up the
|
||||||
|
addresses of the actual functions from it.
|
||||||
|
|
||||||
|
* gdk/Makefile.am
|
||||||
|
* gdk/win32/Makefile.am: Drop the libwntab32x hacks.
|
||||||
|
|
||||||
|
* gdk/win32/wintab.h
|
||||||
|
* gdk/win32/pktdef.h: New files. Copied from the Wintab
|
||||||
|
SDK. Copyright blurb says: "The text and information contained in
|
||||||
|
this file may be freely used, copied, or distributed without
|
||||||
|
compensation or licensing restrictions."
|
||||||
|
|
||||||
|
* README.win32: Update a bit. Remove the text about the Wintab
|
||||||
|
SDK.
|
||||||
|
|
||||||
2007-01-18 Tor Lillqvist <tml@novell.com>
|
2007-01-18 Tor Lillqvist <tml@novell.com>
|
||||||
|
|
||||||
* gdk-pixbuf/Makefile.am
|
* gdk-pixbuf/Makefile.am
|
||||||
|
|||||||
46
README.win32
46
README.win32
@ -19,25 +19,21 @@ There are two ways to build GTK+ for win32.
|
|||||||
Makefiles (which use libtool and gcc to do the compilation). I use
|
Makefiles (which use libtool and gcc to do the compilation). I use
|
||||||
this myself, but it can be hard to setup correctly.
|
this myself, but it can be hard to setup correctly.
|
||||||
|
|
||||||
Personally I run configure with:
|
Note that I first always edit the ltmain.sh file like this:
|
||||||
CC='gcc -mpentium -fnative-struct' CPPFLAGS='-I/target/include' CFLAGS=-O2 LDFLAGS='-L/target/lib' ./configure --disable-static --prefix=/target --with-gdktarget=win32 --with-wintab=/src/wtkit126 --with-ie55=/src/workshop/ie55_lib --host=i386-pc-mingw32
|
sed -e 's/need_relink=yes/need_relink=no # no way --tml/' <ltmain.sh >ltmain.temp && mv ltmain.temp ltmain.sh
|
||||||
|
|
||||||
Then, in theory, you can just say "make", like on Unix. In reality,
|
Personally I run configure with something like:
|
||||||
there are a few hickups that require manual intervention, and it's
|
CC='gcc -mtune=pentium3 -mthreads' CPPFLAGS='-I/opt/gnuwin32/include -I/opt/gnu/include -I/opt/misc/include' CFLAGS=-g LIBS=-lintl LDFLAGS='-L/opt/gnuwin32/lib -L/opt/gnu/lib -L/opt/misc/lib' ./configure --prefix=c:/devel/target/HEAD --with-gdktarget=win32 --enable-maintainer-mode --enable-debug=yes --enable-explicit-deps=no --with-included-loaders=png,bmp,gif,ico,jpeg,tiff,xpm
|
||||||
best to run make separately in each subdirectory. At least for me,
|
|
||||||
when libtool creates an .exe file, it puts the real .exe in the .libs
|
|
||||||
directory, and leaves a wrapper .exe in the work directory. For some
|
|
||||||
reason that wrapper doesn't work for me, it doesn't do anything. So, I
|
|
||||||
always do a "cp .libs/*.exe ." after running a make that has produced
|
|
||||||
some exes.
|
|
||||||
|
|
||||||
Another issue is with the gdk-pixbuf.loaders file. It's probably best
|
Then you should just be able to run "make", like on Unix.
|
||||||
to do a "make install" in the gdk-pixbuf directory, and let that set
|
|
||||||
up a mostly correct gdk-pixbuf.loaders in the target directory. Then
|
An issue is with the gdk-pixbuf.loaders file. It's probably best to do
|
||||||
copy that back to the source directory. It's needed in gtk/stock-icons
|
a "make install" in the gdk-pixbuf directory, and let that set up a
|
||||||
|
mostly correct gdk-pixbuf.loaders in the target directory. Then copy
|
||||||
|
that back to the source directory. It's needed in gtk/stock-icons
|
||||||
where make runs gdk-pixbuf-csource.
|
where make runs gdk-pixbuf-csource.
|
||||||
|
|
||||||
Etc, you get the idea. It can be a bit of a pain.
|
Etc, you get the idea.
|
||||||
|
|
||||||
2) Use the Microsoft compiler, cl and Make, nmake. Say nmake -f
|
2) Use the Microsoft compiler, cl and Make, nmake. Say nmake -f
|
||||||
makefile.msc in gdk and gtk. Be prepared to manually edit various
|
makefile.msc in gdk and gtk. Be prepared to manually edit various
|
||||||
@ -72,22 +68,8 @@ all. Possible ways to fix this are being investigated.
|
|||||||
Wintab
|
Wintab
|
||||||
======
|
======
|
||||||
|
|
||||||
The tablet support uses the Wintab API. The Wintab development kit can
|
The tablet support uses the Wintab API. Unfortunately it seems that
|
||||||
be downloaded from http://www.pointing.com. Pass the --with-wintab
|
only Wacom tablet software comes with the required wintab32.dll
|
||||||
flag to configure if you use that. If you use nmake and you don't care
|
nowadays.
|
||||||
for Wintab, undefine HAVE_WINTAB in config.h.win32 and remove
|
|
||||||
references to the wntab32x library from the makefile before building.
|
|
||||||
|
|
||||||
ActiveIMM
|
|
||||||
=========
|
|
||||||
|
|
||||||
If you want to build a GTK+ that supports ActiveIMM (the Input Method
|
|
||||||
Manager for non-EastAsia locales that can be used on Win9x/NT4), you
|
|
||||||
need the dimm.h header file. That is somewhat difficult to find, but
|
|
||||||
http://msdn.microsoft.com/downloads/samples/internet/wizard/ seems to
|
|
||||||
be a good place to look nowadays. If you use "autoconfiscated" build,
|
|
||||||
pass the --with-ie55 flag to configure specifying the location of the
|
|
||||||
ie55_lib directory created by downloading the IE5.5 headers and libs
|
|
||||||
from the above URL.
|
|
||||||
|
|
||||||
--Tor Lillqvist <tml@iki.fi>
|
--Tor Lillqvist <tml@iki.fi>
|
||||||
|
|||||||
@ -33,7 +33,6 @@
|
|||||||
#undef HAVE_SYS_TIME_H
|
#undef HAVE_SYS_TIME_H
|
||||||
#undef HAVE_XFREE_XINERAMA
|
#undef HAVE_XFREE_XINERAMA
|
||||||
#undef HAVE_XINERAMA
|
#undef HAVE_XINERAMA
|
||||||
#undef HAVE_WINTAB
|
|
||||||
#undef HAVE_XCONVERTCASE
|
#undef HAVE_XCONVERTCASE
|
||||||
#undef HAVE_XFT
|
#undef HAVE_XFT
|
||||||
|
|
||||||
|
|||||||
@ -40,7 +40,6 @@
|
|||||||
#endif /* _MSC_VER */
|
#endif /* _MSC_VER */
|
||||||
/* #undef HAVE_XFREE_XINERAMA */
|
/* #undef HAVE_XFREE_XINERAMA */
|
||||||
/* #undef HAVE_XINERAMA */
|
/* #undef HAVE_XINERAMA */
|
||||||
#define HAVE_WINTAB 1
|
|
||||||
/* #undef HAVE_XCONVERTCASE */
|
/* #undef HAVE_XCONVERTCASE */
|
||||||
/* #undef HAVE_XFT */
|
/* #undef HAVE_XFT */
|
||||||
|
|
||||||
|
|||||||
37
configure.in
37
configure.in
@ -211,9 +211,6 @@ AC_ARG_ENABLE(visibility,
|
|||||||
AC_ARG_WITH(xinput,
|
AC_ARG_WITH(xinput,
|
||||||
[AC_HELP_STRING([--with-xinput=@<:@no/yes@:>@], [support XInput])])
|
[AC_HELP_STRING([--with-xinput=@<:@no/yes@:>@], [support XInput])])
|
||||||
|
|
||||||
AC_ARG_WITH(wintab,
|
|
||||||
[AC_HELP_STRING([--with-wintab=DIRECTORY],
|
|
||||||
[use Wintab API with win32 backend])])
|
|
||||||
if test "$platform_win32" = yes; then
|
if test "$platform_win32" = yes; then
|
||||||
gdktarget=win32
|
gdktarget=win32
|
||||||
else
|
else
|
||||||
@ -568,33 +565,6 @@ AC_CHECK_HEADERS(pwd.h, AC_DEFINE(HAVE_PWD_H))
|
|||||||
AC_CHECK_HEADERS(sys/time.h, AC_DEFINE(HAVE_SYS_TIME_H))
|
AC_CHECK_HEADERS(sys/time.h, AC_DEFINE(HAVE_SYS_TIME_H))
|
||||||
AC_CHECK_HEADERS(unistd.h, AC_DEFINE(HAVE_UNISTD_H))
|
AC_CHECK_HEADERS(unistd.h, AC_DEFINE(HAVE_UNISTD_H))
|
||||||
|
|
||||||
if test "${with_wintab+set}" = set && test $with_wintab != no; then
|
|
||||||
AC_MSG_CHECKING([for wintab.h])
|
|
||||||
saved_CFLAGS="$CFLAGS"
|
|
||||||
CFLAGS="$CFLAGS -I$with_wintab/include"
|
|
||||||
AC_TRY_COMPILE([#include <windows.h>
|
|
||||||
#include <wintab.h>],
|
|
||||||
[],
|
|
||||||
[AC_MSG_RESULT(yes)
|
|
||||||
AC_MSG_CHECKING([for wntab32x.lib])
|
|
||||||
if test -f $with_wintab/lib/i386/wntab32x.lib ; then
|
|
||||||
AC_MSG_RESULT(yes)
|
|
||||||
have_wintab=yes
|
|
||||||
AC_DEFINE(HAVE_WINTAB)
|
|
||||||
WINTAB_LIB="$with_wintab/lib/i386/wntab32x.lib"
|
|
||||||
AC_SUBST(WINTAB_LIB)
|
|
||||||
else
|
|
||||||
AC_MSG_RESULT(no)
|
|
||||||
CFLAGS="$saved_cflags"
|
|
||||||
have_wintab=no
|
|
||||||
fi
|
|
||||||
],
|
|
||||||
[AC_MSG_RESULT(no)
|
|
||||||
CFLAGS="$saved_cflags"
|
|
||||||
have_wintab=no])
|
|
||||||
fi
|
|
||||||
AM_CONDITIONAL(HAVE_WINTAB, test x$have_wintab = xyes)
|
|
||||||
|
|
||||||
saved_cflags="$CFLAGS"
|
saved_cflags="$CFLAGS"
|
||||||
saved_ldflags="$LDFLAGS"
|
saved_ldflags="$LDFLAGS"
|
||||||
|
|
||||||
@ -1341,13 +1311,6 @@ else
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if test "x$gdktarget" = "xwin32"; then
|
if test "x$gdktarget" = "xwin32"; then
|
||||||
# We start off with the libraries from Pango
|
|
||||||
|
|
||||||
if test x$have_wintab = xyes; then
|
|
||||||
GDK_WIN32_EXTRA_CFLAGS="-I $with_wintab/include"
|
|
||||||
AC_SUBST(GDK_WIN32_EXTRA_CFLAGS)
|
|
||||||
fi
|
|
||||||
|
|
||||||
GDK_EXTRA_LIBS="$GDK_EXTRA_LIBS -lgdi32 -user32 -limm32 -lshell32 -lole32 -Wl,-luuid"
|
GDK_EXTRA_LIBS="$GDK_EXTRA_LIBS -lgdi32 -user32 -limm32 -lshell32 -lole32 -Wl,-luuid"
|
||||||
AM_CONDITIONAL(USE_WIN32, true)
|
AM_CONDITIONAL(USE_WIN32, true)
|
||||||
else
|
else
|
||||||
|
|||||||
@ -159,9 +159,6 @@ libgdk_win32_2_0_la_LIBADD = win32/libgdk-win32.la $(GDK_DEP_LIBS) \
|
|||||||
$(top_builddir)/gdk-pixbuf/libgdk_pixbuf-$(GTK_API_VERSION).la
|
$(top_builddir)/gdk-pixbuf/libgdk_pixbuf-$(GTK_API_VERSION).la
|
||||||
libgdk_win32_2_0_la_DEPENDENCIES = win32/libgdk-win32.la win32/rc/gdk-win32-res.o gdk.def
|
libgdk_win32_2_0_la_DEPENDENCIES = win32/libgdk-win32.la win32/rc/gdk-win32-res.o gdk.def
|
||||||
libgdk_win32_2_0_la_LDFLAGS = -Wl,win32/rc/gdk-win32-res.o -export-symbols $(srcdir)/gdk.def $(LDADD)
|
libgdk_win32_2_0_la_LDFLAGS = -Wl,win32/rc/gdk-win32-res.o -export-symbols $(srcdir)/gdk.def $(LDADD)
|
||||||
if HAVE_WINTAB
|
|
||||||
libgdk_win32_2_0_la_LDFLAGS += -Wl,win32/libwntab32x.a
|
|
||||||
endif
|
|
||||||
|
|
||||||
if OS_WIN32
|
if OS_WIN32
|
||||||
install-def-file: gdk.def
|
install-def-file: gdk.def
|
||||||
|
|||||||
@ -15,15 +15,6 @@ INCLUDES = \
|
|||||||
|
|
||||||
LDADDS = $(GDK_DEP_LIBS)
|
LDADDS = $(GDK_DEP_LIBS)
|
||||||
|
|
||||||
if HAVE_WINTAB
|
|
||||||
libwntab32x_a = libwntab32x.a
|
|
||||||
|
|
||||||
libwntab32x.a: $(WINTAB_LIB)
|
|
||||||
cp $< $@
|
|
||||||
endif
|
|
||||||
|
|
||||||
noinst_DATA = $(libwntab32x_a)
|
|
||||||
|
|
||||||
noinst_LTLIBRARIES = libgdk-win32.la
|
noinst_LTLIBRARIES = libgdk-win32.la
|
||||||
|
|
||||||
SUBDIRS=rc
|
SUBDIRS=rc
|
||||||
@ -63,7 +54,9 @@ libgdk_win32_la_SOURCES = \
|
|||||||
gdkwin32.h \
|
gdkwin32.h \
|
||||||
gdkwin32id.c \
|
gdkwin32id.c \
|
||||||
gdkwindow-win32.c \
|
gdkwindow-win32.c \
|
||||||
gdkwindow-win32.h
|
gdkwindow-win32.h \
|
||||||
|
wintab.h \
|
||||||
|
pktdef.h
|
||||||
|
|
||||||
libgdkinclude_HEADERS = \
|
libgdkinclude_HEADERS = \
|
||||||
gdkwin32.h
|
gdkwin32.h
|
||||||
|
|||||||
@ -3442,7 +3442,6 @@ gdk_event_translate (MSG *msg,
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
#ifdef HAVE_WINTAB
|
|
||||||
case WM_ACTIVATE:
|
case WM_ACTIVATE:
|
||||||
/* Bring any tablet contexts to the top of the overlap order when
|
/* Bring any tablet contexts to the top of the overlap order when
|
||||||
* one of our windows is activated.
|
* one of our windows is activated.
|
||||||
@ -3483,7 +3482,6 @@ gdk_event_translate (MSG *msg,
|
|||||||
else
|
else
|
||||||
gdk_event_free (event);
|
gdk_event_free (event);
|
||||||
break;
|
break;
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
done:
|
done:
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
/* GDK - The GIMP Drawing Kit
|
/* GDK - The GIMP Drawing Kit
|
||||||
* Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
|
* Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald
|
||||||
* Copyright (C) 1998-2002 Tor Lillqvist
|
* Copyright (C) 1998-2007 Tor Lillqvist
|
||||||
*
|
*
|
||||||
* This library is free software; you can redistribute it and/or
|
* This library is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU Lesser General Public
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
@ -37,8 +37,6 @@
|
|||||||
#include "gdkprivate-win32.h"
|
#include "gdkprivate-win32.h"
|
||||||
#include "gdkinput-win32.h"
|
#include "gdkinput-win32.h"
|
||||||
|
|
||||||
#ifdef HAVE_WINTAB
|
|
||||||
|
|
||||||
#define PACKETDATA (PK_CONTEXT | PK_CURSOR | PK_BUTTONS | PK_X | PK_Y | PK_NORMAL_PRESSURE | PK_ORIENTATION)
|
#define PACKETDATA (PK_CONTEXT | PK_CURSOR | PK_BUTTONS | PK_X | PK_Y | PK_NORMAL_PRESSURE | PK_ORIENTATION)
|
||||||
#define PACKETMODE (PK_BUTTONS)
|
#define PACKETMODE (PK_BUTTONS)
|
||||||
#include <pktdef.h>
|
#include <pktdef.h>
|
||||||
@ -47,37 +45,35 @@
|
|||||||
|
|
||||||
#define PROXIMITY_OUT_DELAY 200 /* In milliseconds, see set_ignore_core */
|
#define PROXIMITY_OUT_DELAY 200 /* In milliseconds, see set_ignore_core */
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(HAVE_WINTAB) || defined(HAVE_WHATEVER_OTHER)
|
|
||||||
#define HAVE_SOME_XINPUT
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define TWOPI (2.*G_PI)
|
#define TWOPI (2.*G_PI)
|
||||||
|
|
||||||
/* Forward declarations */
|
/* Forward declarations */
|
||||||
|
|
||||||
#ifdef HAVE_WINTAB
|
|
||||||
|
|
||||||
static GdkDevicePrivate *gdk_input_find_dev_from_ctx (HCTX hctx,
|
static GdkDevicePrivate *gdk_input_find_dev_from_ctx (HCTX hctx,
|
||||||
UINT id);
|
UINT id);
|
||||||
static GList *wintab_contexts = NULL;
|
static GList *wintab_contexts = NULL;
|
||||||
|
|
||||||
static GdkWindow *wintab_window = NULL;
|
static GdkWindow *wintab_window = NULL;
|
||||||
|
|
||||||
#endif /* HAVE_WINTAB */
|
|
||||||
|
|
||||||
#ifdef HAVE_SOME_XINPUT
|
|
||||||
|
|
||||||
static GdkWindow *x_grab_window = NULL; /* Window that currently holds
|
static GdkWindow *x_grab_window = NULL; /* Window that currently holds
|
||||||
* the extended inputs grab
|
* the extended inputs grab
|
||||||
*/
|
*/
|
||||||
static GdkEventMask x_grab_mask;
|
static GdkEventMask x_grab_mask;
|
||||||
static gboolean x_grab_owner_events;
|
static gboolean x_grab_owner_events;
|
||||||
|
|
||||||
#endif /* HAVE_SOME_XINPUT */
|
typedef UINT (WINAPI *t_WTInfoA) (UINT a, UINT b, LPVOID c);
|
||||||
|
typedef BOOL (WINAPI *t_WTEnable) (HCTX a, BOOL b);
|
||||||
|
typedef HCTX (WINAPI *t_WTOpenA) (HWND a, LPLOGCONTEXTA b, BOOL c);
|
||||||
|
typedef BOOL (WINAPI *t_WTOverlap) (HCTX a, BOOL b);
|
||||||
|
typedef BOOL (WINAPI *t_WTPacket) (HCTX a, UINT b, LPVOID c);
|
||||||
|
typedef int (WINAPI *t_WTQueueSizeSet) (HCTX a, int b);
|
||||||
|
|
||||||
#ifdef HAVE_WINTAB
|
static t_WTInfoA p_WTInfoA;
|
||||||
|
static t_WTEnable p_WTEnable;
|
||||||
|
static t_WTOpenA p_WTOpenA;
|
||||||
|
static t_WTOverlap p_WTOverlap;
|
||||||
|
static t_WTPacket p_WTPacket;
|
||||||
|
static t_WTQueueSizeSet p_WTQueueSizeSet;
|
||||||
|
|
||||||
static GdkDevicePrivate *
|
static GdkDevicePrivate *
|
||||||
gdk_input_find_dev_from_ctx (HCTX hctx,
|
gdk_input_find_dev_from_ctx (HCTX hctx,
|
||||||
@ -209,6 +205,7 @@ _gdk_input_wintab_init_check (void)
|
|||||||
int devix, cursorix;
|
int devix, cursorix;
|
||||||
char devname[100], csrname[100];
|
char devname[100], csrname[100];
|
||||||
BOOL defcontext_done;
|
BOOL defcontext_done;
|
||||||
|
HMODULE wintab32;
|
||||||
|
|
||||||
if (wintab_initialized)
|
if (wintab_initialized)
|
||||||
return;
|
return;
|
||||||
@ -217,14 +214,33 @@ _gdk_input_wintab_init_check (void)
|
|||||||
|
|
||||||
wintab_contexts = NULL;
|
wintab_contexts = NULL;
|
||||||
|
|
||||||
if (!_gdk_input_ignore_wintab &&
|
if (_gdk_input_ignore_wintab)
|
||||||
WTInfo (0, 0, NULL))
|
return;
|
||||||
{
|
|
||||||
WTInfo (WTI_INTERFACE, IFC_SPECVERSION, &specversion);
|
if ((wintab32 = LoadLibrary ("wintab32.dll")) == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if ((p_WTInfoA = (t_WTInfoA) GetProcAddress (wintab32, "WTInfoA")) == NULL)
|
||||||
|
return;
|
||||||
|
if ((p_WTEnable = (t_WTEnable) GetProcAddress (wintab32, "WTEnable")) == NULL)
|
||||||
|
return;
|
||||||
|
if ((p_WTOpenA = (t_WTOpenA) GetProcAddress (wintab32, "WTOpenA")) == NULL)
|
||||||
|
return;
|
||||||
|
if ((p_WTOverlap = (t_WTOverlap) GetProcAddress (wintab32, "WTOverlap")) == NULL)
|
||||||
|
return;
|
||||||
|
if ((p_WTPacket = (t_WTPacket) GetProcAddress (wintab32, "WTPacket")) == NULL)
|
||||||
|
return;
|
||||||
|
if ((p_WTQueueSizeSet = (t_WTQueueSizeSet) GetProcAddress (wintab32, "WTQueueSizeSet")) == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (!(*p_WTInfoA) (0, 0, NULL))
|
||||||
|
return;
|
||||||
|
|
||||||
|
(*p_WTInfoA) (WTI_INTERFACE, IFC_SPECVERSION, &specversion);
|
||||||
GDK_NOTE (INPUT, g_print ("Wintab interface version %d.%d\n",
|
GDK_NOTE (INPUT, g_print ("Wintab interface version %d.%d\n",
|
||||||
HIBYTE (specversion), LOBYTE (specversion)));
|
HIBYTE (specversion), LOBYTE (specversion)));
|
||||||
WTInfo (WTI_INTERFACE, IFC_NDEVICES, &ndevices);
|
(*p_WTInfoA) (WTI_INTERFACE, IFC_NDEVICES, &ndevices);
|
||||||
WTInfo (WTI_INTERFACE, IFC_NCURSORS, &ncursors);
|
(*p_WTInfoA) (WTI_INTERFACE, IFC_NCURSORS, &ncursors);
|
||||||
#if DEBUG_WINTAB
|
#if DEBUG_WINTAB
|
||||||
GDK_NOTE (INPUT, g_print ("NDEVICES: %d, NCURSORS: %d\n",
|
GDK_NOTE (INPUT, g_print ("NDEVICES: %d, NCURSORS: %d\n",
|
||||||
ndevices, ncursors));
|
ndevices, ncursors));
|
||||||
@ -253,22 +269,22 @@ _gdk_input_wintab_init_check (void)
|
|||||||
* cursor. This seems much more natural.
|
* cursor. This seems much more natural.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
WTInfo (WTI_DEVICES + devix, DVC_NAME, devname);
|
(*p_WTInfoA) (WTI_DEVICES + devix, DVC_NAME, devname);
|
||||||
|
|
||||||
WTInfo (WTI_DEVICES + devix, DVC_NCSRTYPES, &ncsrtypes);
|
(*p_WTInfoA) (WTI_DEVICES + devix, DVC_NCSRTYPES, &ncsrtypes);
|
||||||
WTInfo (WTI_DEVICES + devix, DVC_FIRSTCSR, &firstcsr);
|
(*p_WTInfoA) (WTI_DEVICES + devix, DVC_FIRSTCSR, &firstcsr);
|
||||||
WTInfo (WTI_DEVICES + devix, DVC_HARDWARE, &hardware);
|
(*p_WTInfoA) (WTI_DEVICES + devix, DVC_HARDWARE, &hardware);
|
||||||
WTInfo (WTI_DEVICES + devix, DVC_X, &axis_x);
|
(*p_WTInfoA) (WTI_DEVICES + devix, DVC_X, &axis_x);
|
||||||
WTInfo (WTI_DEVICES + devix, DVC_Y, &axis_y);
|
(*p_WTInfoA) (WTI_DEVICES + devix, DVC_Y, &axis_y);
|
||||||
WTInfo (WTI_DEVICES + devix, DVC_NPRESSURE, &axis_npressure);
|
(*p_WTInfoA) (WTI_DEVICES + devix, DVC_NPRESSURE, &axis_npressure);
|
||||||
WTInfo (WTI_DEVICES + devix, DVC_ORIENTATION, axis_or);
|
(*p_WTInfoA) (WTI_DEVICES + devix, DVC_ORIENTATION, axis_or);
|
||||||
|
|
||||||
defcontext_done = FALSE;
|
defcontext_done = FALSE;
|
||||||
if (HIBYTE (specversion) > 1 || LOBYTE (specversion) >= 1)
|
if (HIBYTE (specversion) > 1 || LOBYTE (specversion) >= 1)
|
||||||
{
|
{
|
||||||
/* Try to get device-specific default context */
|
/* Try to get device-specific default context */
|
||||||
/* Some drivers, e.g. Aiptek, don't provide this info */
|
/* Some drivers, e.g. Aiptek, don't provide this info */
|
||||||
if (WTInfo (WTI_DSCTXS + devix, 0, &lc) > 0)
|
if ((*p_WTInfoA) (WTI_DSCTXS + devix, 0, &lc) > 0)
|
||||||
defcontext_done = TRUE;
|
defcontext_done = TRUE;
|
||||||
#if DEBUG_WINTAB
|
#if DEBUG_WINTAB
|
||||||
if (defcontext_done)
|
if (defcontext_done)
|
||||||
@ -279,7 +295,7 @@ _gdk_input_wintab_init_check (void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (!defcontext_done)
|
if (!defcontext_done)
|
||||||
WTInfo (WTI_DEFSYSCTX, 0, &lc);
|
(*p_WTInfoA) (WTI_DEFSYSCTX, 0, &lc);
|
||||||
#if DEBUG_WINTAB
|
#if DEBUG_WINTAB
|
||||||
GDK_NOTE (INPUT, (g_print("Default context:\n"), print_lc(&lc)));
|
GDK_NOTE (INPUT, (g_print("Default context:\n"), print_lc(&lc)));
|
||||||
#endif
|
#endif
|
||||||
@ -301,7 +317,7 @@ _gdk_input_wintab_init_check (void)
|
|||||||
print_lc(&lc)));
|
print_lc(&lc)));
|
||||||
#endif
|
#endif
|
||||||
hctx = g_new (HCTX, 1);
|
hctx = g_new (HCTX, 1);
|
||||||
if ((*hctx = WTOpen (GDK_WINDOW_HWND (wintab_window), &lc, TRUE)) == NULL)
|
if ((*hctx = (*p_WTOpenA) (GDK_WINDOW_HWND (wintab_window), &lc, TRUE)) == NULL)
|
||||||
{
|
{
|
||||||
g_warning ("gdk_input_wintab_init: WTOpen failed");
|
g_warning ("gdk_input_wintab_init: WTOpen failed");
|
||||||
return;
|
return;
|
||||||
@ -311,21 +327,22 @@ _gdk_input_wintab_init_check (void)
|
|||||||
|
|
||||||
wintab_contexts = g_list_append (wintab_contexts, hctx);
|
wintab_contexts = g_list_append (wintab_contexts, hctx);
|
||||||
#if 0
|
#if 0
|
||||||
WTEnable (*hctx, TRUE);
|
(*p_WTEnable) (*hctx, TRUE);
|
||||||
#endif
|
#endif
|
||||||
WTOverlap (*hctx, TRUE);
|
(*p_WTOverlap) (*hctx, TRUE);
|
||||||
|
|
||||||
#if DEBUG_WINTAB
|
#if DEBUG_WINTAB
|
||||||
GDK_NOTE (INPUT, (g_print("context for device %d after WTOpen:\n", devix),
|
GDK_NOTE (INPUT, (g_print("context for device %d after WTOpen:\n", devix),
|
||||||
print_lc(&lc)));
|
print_lc(&lc)));
|
||||||
#endif
|
#endif
|
||||||
/* Increase packet queue size to reduce the risk of lost packets */
|
/* Increase packet queue size to reduce the risk of lost packets.
|
||||||
/* According to the specs, if the function fails we must try again */
|
* According to the specs, if the function fails we must try again
|
||||||
/* with a smaller queue size */
|
* with a smaller queue size.
|
||||||
|
*/
|
||||||
GDK_NOTE (INPUT, g_print("Attempting to increase queue size\n"));
|
GDK_NOTE (INPUT, g_print("Attempting to increase queue size\n"));
|
||||||
for (i = 128; i >= 1; i >>= 1)
|
for (i = 128; i >= 1; i >>= 1)
|
||||||
{
|
{
|
||||||
if (WTQueueSizeSet(*hctx, i))
|
if ((*p_WTQueueSizeSet) (*hctx, i))
|
||||||
{
|
{
|
||||||
GDK_NOTE (INPUT, g_print("Queue size set to %d\n", i));
|
GDK_NOTE (INPUT, g_print("Queue size set to %d\n", i));
|
||||||
break;
|
break;
|
||||||
@ -336,18 +353,18 @@ _gdk_input_wintab_init_check (void)
|
|||||||
for (cursorix = firstcsr; cursorix < firstcsr + ncsrtypes; cursorix++)
|
for (cursorix = firstcsr; cursorix < firstcsr + ncsrtypes; cursorix++)
|
||||||
{
|
{
|
||||||
active = FALSE;
|
active = FALSE;
|
||||||
WTInfo (WTI_CURSORS + cursorix, CSR_ACTIVE, &active);
|
(*p_WTInfoA) (WTI_CURSORS + cursorix, CSR_ACTIVE, &active);
|
||||||
if (!active)
|
if (!active)
|
||||||
continue;
|
continue;
|
||||||
gdkdev = g_object_new (GDK_TYPE_DEVICE, NULL);
|
gdkdev = g_object_new (GDK_TYPE_DEVICE, NULL);
|
||||||
WTInfo (WTI_CURSORS + cursorix, CSR_NAME, csrname);
|
(*p_WTInfoA) (WTI_CURSORS + cursorix, CSR_NAME, csrname);
|
||||||
gdkdev->info.name = g_strconcat (devname, " ", csrname, NULL);
|
gdkdev->info.name = g_strconcat (devname, " ", csrname, NULL);
|
||||||
gdkdev->info.source = GDK_SOURCE_PEN;
|
gdkdev->info.source = GDK_SOURCE_PEN;
|
||||||
gdkdev->info.mode = GDK_MODE_SCREEN;
|
gdkdev->info.mode = GDK_MODE_SCREEN;
|
||||||
gdkdev->info.has_cursor = TRUE;
|
gdkdev->info.has_cursor = TRUE;
|
||||||
gdkdev->hctx = *hctx;
|
gdkdev->hctx = *hctx;
|
||||||
gdkdev->cursor = cursorix;
|
gdkdev->cursor = cursorix;
|
||||||
WTInfo (WTI_CURSORS + cursorix, CSR_PKTDATA, &gdkdev->pktdata);
|
(*p_WTInfoA) (WTI_CURSORS + cursorix, CSR_PKTDATA, &gdkdev->pktdata);
|
||||||
gdkdev->info.num_axes = 0;
|
gdkdev->info.num_axes = 0;
|
||||||
if (gdkdev->pktdata & PK_X)
|
if (gdkdev->pktdata & PK_X)
|
||||||
gdkdev->info.num_axes++;
|
gdkdev->info.num_axes++;
|
||||||
@ -366,7 +383,7 @@ _gdk_input_wintab_init_check (void)
|
|||||||
|
|
||||||
if (gdkdev->pktdata & PK_ORIENTATION)
|
if (gdkdev->pktdata & PK_ORIENTATION)
|
||||||
gdkdev->info.num_axes += 2; /* x and y tilt */
|
gdkdev->info.num_axes += 2; /* x and y tilt */
|
||||||
WTInfo (WTI_CURSORS + cursorix, CSR_NPBTNMARKS, &gdkdev->npbtnmarks);
|
(*p_WTInfoA) (WTI_CURSORS + cursorix, CSR_NPBTNMARKS, &gdkdev->npbtnmarks);
|
||||||
gdkdev->info.axes = g_new (GdkDeviceAxis, gdkdev->info.num_axes);
|
gdkdev->info.axes = g_new (GdkDeviceAxis, gdkdev->info.num_axes);
|
||||||
gdkdev->axes = g_new (GdkAxisInfo, gdkdev->info.num_axes);
|
gdkdev->axes = g_new (GdkAxisInfo, gdkdev->info.num_axes);
|
||||||
gdkdev->last_axis_data = g_new (gint, gdkdev->info.num_axes);
|
gdkdev->last_axis_data = g_new (gint, gdkdev->info.num_axes);
|
||||||
@ -437,14 +454,12 @@ _gdk_input_wintab_init_check (void)
|
|||||||
}
|
}
|
||||||
gdkdev->info.num_keys = 0;
|
gdkdev->info.num_keys = 0;
|
||||||
gdkdev->info.keys = NULL;
|
gdkdev->info.keys = NULL;
|
||||||
GDK_NOTE (INPUT,
|
GDK_NOTE (INPUT, g_print ("device: (%d) %s axes: %d\n",
|
||||||
g_print ("device: (%d) %s axes: %d\n",
|
|
||||||
cursorix,
|
cursorix,
|
||||||
gdkdev->info.name,
|
gdkdev->info.name,
|
||||||
gdkdev->info.num_axes));
|
gdkdev->info.num_axes));
|
||||||
for (i = 0; i < gdkdev->info.num_axes; i++)
|
for (i = 0; i < gdkdev->info.num_axes; i++)
|
||||||
GDK_NOTE (INPUT,
|
GDK_NOTE (INPUT, g_print ("... axis %d: %d--%d@%d (%d--%d@%d)\n",
|
||||||
g_print ("... axis %d: %d--%d@%d (%d--%d@%d)\n",
|
|
||||||
i,
|
i,
|
||||||
gdkdev->axes[i].xmin_value,
|
gdkdev->axes[i].xmin_value,
|
||||||
gdkdev->axes[i].xmax_value,
|
gdkdev->axes[i].xmax_value,
|
||||||
@ -457,7 +472,6 @@ _gdk_input_wintab_init_check (void)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
decode_tilt (gint *axis_data,
|
decode_tilt (gint *axis_data,
|
||||||
@ -481,8 +495,6 @@ decode_tilt (gint *axis_data,
|
|||||||
axis_data[1] = sin (az) * cos (el) * 1000;
|
axis_data[1] = sin (az) * cos (el) * 1000;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* HAVE_WINTAB */
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gdk_input_translate_coordinates (GdkDevicePrivate *gdkdev,
|
gdk_input_translate_coordinates (GdkDevicePrivate *gdkdev,
|
||||||
GdkInputWindow *input_window,
|
GdkInputWindow *input_window,
|
||||||
@ -654,8 +666,6 @@ get_modifier_key_state (void)
|
|||||||
return state;
|
return state;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HAVE_WINTAB
|
|
||||||
|
|
||||||
static guint ignore_core_timer = 0;
|
static guint ignore_core_timer = 0;
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
@ -693,14 +703,12 @@ set_ignore_core (gboolean ignore)
|
|||||||
ignore_core_timer = gdk_threads_add_timeout (PROXIMITY_OUT_DELAY,
|
ignore_core_timer = gdk_threads_add_timeout (PROXIMITY_OUT_DELAY,
|
||||||
ignore_core_timefunc, NULL);
|
ignore_core_timefunc, NULL);
|
||||||
}
|
}
|
||||||
#endif /* HAVE_WINTAB */
|
|
||||||
|
|
||||||
gboolean
|
gboolean
|
||||||
_gdk_input_other_event (GdkEvent *event,
|
_gdk_input_other_event (GdkEvent *event,
|
||||||
MSG *msg,
|
MSG *msg,
|
||||||
GdkWindow *window)
|
GdkWindow *window)
|
||||||
{
|
{
|
||||||
#ifdef HAVE_WINTAB
|
|
||||||
GdkDisplay *display;
|
GdkDisplay *display;
|
||||||
GdkWindowObject *obj, *grab_obj;
|
GdkWindowObject *obj, *grab_obj;
|
||||||
GdkInputWindow *input_window;
|
GdkInputWindow *input_window;
|
||||||
@ -732,7 +740,7 @@ _gdk_input_other_event (GdkEvent *event,
|
|||||||
|
|
||||||
if (msg->message == WT_PACKET)
|
if (msg->message == WT_PACKET)
|
||||||
{
|
{
|
||||||
if (!WTPacket ((HCTX) msg->lParam, msg->wParam, &packet))
|
if (!(*p_WTPacket) ((HCTX) msg->lParam, msg->wParam, &packet))
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -742,7 +750,8 @@ _gdk_input_other_event (GdkEvent *event,
|
|||||||
{
|
{
|
||||||
case WT_PACKET:
|
case WT_PACKET:
|
||||||
/* Don't produce any button or motion events while a window is being
|
/* Don't produce any button or motion events while a window is being
|
||||||
* moved or resized, see bug #151090. */
|
* moved or resized, see bug #151090.
|
||||||
|
*/
|
||||||
if (_sizemove_in_progress)
|
if (_sizemove_in_progress)
|
||||||
{
|
{
|
||||||
GDK_NOTE (EVENTS_OR_INPUT, g_print ("... ignored when moving/sizing\n"));
|
GDK_NOTE (EVENTS_OR_INPUT, g_print ("... ignored when moving/sizing\n"));
|
||||||
@ -830,7 +839,7 @@ _gdk_input_other_event (GdkEvent *event,
|
|||||||
/* Now we can check if the window wants the event, and
|
/* Now we can check if the window wants the event, and
|
||||||
* propagate if necessary.
|
* propagate if necessary.
|
||||||
*/
|
*/
|
||||||
dijkstra:
|
loop:
|
||||||
if (!GDK_WINDOW_IMPL_WIN32 (obj->impl)->extension_events_selected
|
if (!GDK_WINDOW_IMPL_WIN32 (obj->impl)->extension_events_selected
|
||||||
|| !(obj->extension_events & masktest))
|
|| !(obj->extension_events & masktest))
|
||||||
{
|
{
|
||||||
@ -860,7 +869,7 @@ _gdk_input_other_event (GdkEvent *event,
|
|||||||
y = pt.y;
|
y = pt.y;
|
||||||
GDK_NOTE (EVENTS_OR_INPUT, g_print ("... propagating to %p %+d%+d\n",
|
GDK_NOTE (EVENTS_OR_INPUT, g_print ("... propagating to %p %+d%+d\n",
|
||||||
GDK_WINDOW_HWND (window), x, y));
|
GDK_WINDOW_HWND (window), x, y));
|
||||||
goto dijkstra;
|
goto loop;
|
||||||
}
|
}
|
||||||
|
|
||||||
input_window = _gdk_input_window_find (window);
|
input_window = _gdk_input_window_find (window);
|
||||||
@ -993,7 +1002,6 @@ _gdk_input_other_event (GdkEvent *event,
|
|||||||
"in" : "out")));
|
"in" : "out")));
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
return FALSE;
|
return FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1001,11 +1009,9 @@ gboolean
|
|||||||
_gdk_input_enable_window (GdkWindow *window,
|
_gdk_input_enable_window (GdkWindow *window,
|
||||||
GdkDevicePrivate *gdkdev)
|
GdkDevicePrivate *gdkdev)
|
||||||
{
|
{
|
||||||
#ifdef HAVE_SOME_XINPUT
|
|
||||||
GdkWindowImplWin32 *impl = GDK_WINDOW_IMPL_WIN32 (GDK_WINDOW_OBJECT (window)->impl);
|
GdkWindowImplWin32 *impl = GDK_WINDOW_IMPL_WIN32 (GDK_WINDOW_OBJECT (window)->impl);
|
||||||
|
|
||||||
impl->extension_events_selected = TRUE;
|
impl->extension_events_selected = TRUE;
|
||||||
#endif
|
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
@ -1014,11 +1020,9 @@ gboolean
|
|||||||
_gdk_input_disable_window (GdkWindow *window,
|
_gdk_input_disable_window (GdkWindow *window,
|
||||||
GdkDevicePrivate *gdkdev)
|
GdkDevicePrivate *gdkdev)
|
||||||
{
|
{
|
||||||
#ifdef HAVE_SOME_XINPUT
|
|
||||||
GdkWindowImplWin32 *impl = GDK_WINDOW_IMPL_WIN32 (GDK_WINDOW_OBJECT (window)->impl);
|
GdkWindowImplWin32 *impl = GDK_WINDOW_IMPL_WIN32 (GDK_WINDOW_OBJECT (window)->impl);
|
||||||
|
|
||||||
impl->extension_events_selected = FALSE;
|
impl->extension_events_selected = FALSE;
|
||||||
#endif
|
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
@ -1030,7 +1034,6 @@ _gdk_input_grab_pointer (GdkWindow *window,
|
|||||||
GdkWindow *confine_to,
|
GdkWindow *confine_to,
|
||||||
guint32 time)
|
guint32 time)
|
||||||
{
|
{
|
||||||
#ifdef HAVE_SOME_XINPUT
|
|
||||||
GdkInputWindow *input_window, *new_window;
|
GdkInputWindow *input_window, *new_window;
|
||||||
gboolean need_ungrab;
|
gboolean need_ungrab;
|
||||||
GdkDevicePrivate *gdkdev;
|
GdkDevicePrivate *gdkdev;
|
||||||
@ -1115,7 +1118,6 @@ _gdk_input_grab_pointer (GdkWindow *window,
|
|||||||
tmp_list = tmp_list->next;
|
tmp_list = tmp_list->next;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
return GDK_GRAB_SUCCESS;
|
return GDK_GRAB_SUCCESS;
|
||||||
}
|
}
|
||||||
@ -1123,7 +1125,6 @@ _gdk_input_grab_pointer (GdkWindow *window,
|
|||||||
void
|
void
|
||||||
_gdk_input_ungrab_pointer (guint32 time)
|
_gdk_input_ungrab_pointer (guint32 time)
|
||||||
{
|
{
|
||||||
#ifdef HAVE_SOME_XINPUT
|
|
||||||
GdkInputWindow *input_window;
|
GdkInputWindow *input_window;
|
||||||
GdkDevicePrivate *gdkdev;
|
GdkDevicePrivate *gdkdev;
|
||||||
GList *tmp_list;
|
GList *tmp_list;
|
||||||
@ -1156,7 +1157,6 @@ _gdk_input_ungrab_pointer (guint32 time)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
x_grab_window = NULL;
|
x_grab_window = NULL;
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
gboolean
|
gboolean
|
||||||
@ -1220,7 +1220,6 @@ gdk_device_get_state (GdkDevice *device,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef HAVE_WINTAB
|
|
||||||
void
|
void
|
||||||
_gdk_input_set_tablet_active (void)
|
_gdk_input_set_tablet_active (void)
|
||||||
{
|
{
|
||||||
@ -1240,11 +1239,10 @@ _gdk_input_set_tablet_active (void)
|
|||||||
while (tmp_list)
|
while (tmp_list)
|
||||||
{
|
{
|
||||||
hctx = (HCTX *) (tmp_list->data);
|
hctx = (HCTX *) (tmp_list->data);
|
||||||
WTOverlap (*hctx, TRUE);
|
(*p_WTOverlap) (*hctx, TRUE);
|
||||||
tmp_list = tmp_list->next;
|
tmp_list = tmp_list->next;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif /* HAVE_WINTAB */
|
|
||||||
|
|
||||||
void
|
void
|
||||||
_gdk_input_init (GdkDisplay *display)
|
_gdk_input_init (GdkDisplay *display)
|
||||||
@ -1253,7 +1251,6 @@ _gdk_input_init (GdkDisplay *display)
|
|||||||
_gdk_input_devices = NULL;
|
_gdk_input_devices = NULL;
|
||||||
|
|
||||||
_gdk_init_input_core (display);
|
_gdk_init_input_core (display);
|
||||||
#ifdef HAVE_WINTAB
|
|
||||||
#ifdef WINTAB_NO_LAZY_INIT
|
#ifdef WINTAB_NO_LAZY_INIT
|
||||||
/* Normally, Wintab is only initialized when the application performs
|
/* Normally, Wintab is only initialized when the application performs
|
||||||
* an action that requires it, such as enabling extended input events
|
* an action that requires it, such as enabling extended input events
|
||||||
@ -1261,7 +1258,6 @@ _gdk_input_init (GdkDisplay *display)
|
|||||||
*/
|
*/
|
||||||
_gdk_input_wintab_init_check ();
|
_gdk_input_wintab_init_check ();
|
||||||
#endif /* WINTAB_NO_LAZY_INIT */
|
#endif /* WINTAB_NO_LAZY_INIT */
|
||||||
#endif /* HAVE_WINTAB */
|
|
||||||
|
|
||||||
_gdk_input_devices = g_list_append (_gdk_input_devices, display->core_pointer);
|
_gdk_input_devices = g_list_append (_gdk_input_devices, display->core_pointer);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -27,9 +27,8 @@
|
|||||||
#ifndef __GDK_INPUT_WIN32_H__
|
#ifndef __GDK_INPUT_WIN32_H__
|
||||||
#define __GDK_INPUT_WIN32_H__
|
#define __GDK_INPUT_WIN32_H__
|
||||||
|
|
||||||
#ifdef HAVE_WINTAB
|
#include <windows.h>
|
||||||
#include <wintab.h>
|
#include <wintab.h>
|
||||||
#endif
|
|
||||||
|
|
||||||
typedef struct _GdkAxisInfo GdkAxisInfo;
|
typedef struct _GdkAxisInfo GdkAxisInfo;
|
||||||
typedef struct _GdkDevicePrivate GdkDevicePrivate;
|
typedef struct _GdkDevicePrivate GdkDevicePrivate;
|
||||||
@ -85,7 +84,6 @@ struct _GdkDevicePrivate
|
|||||||
|
|
||||||
gint *last_axis_data;
|
gint *last_axis_data;
|
||||||
gint last_buttons;
|
gint last_buttons;
|
||||||
#ifdef HAVE_WINTAB
|
|
||||||
/* WINTAB stuff: */
|
/* WINTAB stuff: */
|
||||||
HCTX hctx;
|
HCTX hctx;
|
||||||
/* Cursor number */
|
/* Cursor number */
|
||||||
@ -96,7 +94,6 @@ struct _GdkDevicePrivate
|
|||||||
UINT npbtnmarks[2];
|
UINT npbtnmarks[2];
|
||||||
/* Azimuth and altitude axis */
|
/* Azimuth and altitude axis */
|
||||||
AXIS orientation_axes[2];
|
AXIS orientation_axes[2];
|
||||||
#endif
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct _GdkInputWindow
|
struct _GdkInputWindow
|
||||||
@ -166,9 +163,7 @@ gboolean _gdk_device_get_history (GdkDevice *device,
|
|||||||
GdkTimeCoord ***events,
|
GdkTimeCoord ***events,
|
||||||
gint *n_events);
|
gint *n_events);
|
||||||
|
|
||||||
#ifdef HAVE_WINTAB
|
|
||||||
void _gdk_input_wintab_init_check (void);
|
void _gdk_input_wintab_init_check (void);
|
||||||
void _gdk_input_set_tablet_active (void);
|
void _gdk_input_set_tablet_active (void);
|
||||||
#endif /* HAVE_WINTAB */
|
|
||||||
|
|
||||||
#endif /* __GDK_INPUT_WIN32_H__ */
|
#endif /* __GDK_INPUT_WIN32_H__ */
|
||||||
|
|||||||
@ -37,16 +37,6 @@
|
|||||||
#include "gdkinput.h"
|
#include "gdkinput.h"
|
||||||
#include "gdkprivate.h"
|
#include "gdkprivate.h"
|
||||||
|
|
||||||
/* When ther necessary stuff is in
|
|
||||||
* gdkinput.h, gdkinternals.h and
|
|
||||||
* gdkprivate.h, these includes shouldn't be here.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <windows.h>
|
|
||||||
#ifdef HAVE_WINTAB
|
|
||||||
#include <wintab.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include "gdkinput-win32.h"
|
#include "gdkinput-win32.h"
|
||||||
|
|
||||||
static GdkDeviceAxis gdk_input_core_axes[] = {
|
static GdkDeviceAxis gdk_input_core_axes[] = {
|
||||||
@ -119,18 +109,14 @@ gdk_device_get_type (void)
|
|||||||
GList *
|
GList *
|
||||||
gdk_devices_list (void)
|
gdk_devices_list (void)
|
||||||
{
|
{
|
||||||
#ifdef HAVE_WINTAB
|
|
||||||
_gdk_input_wintab_init_check ();
|
_gdk_input_wintab_init_check ();
|
||||||
#endif /* HAVE_WINTAB */
|
|
||||||
return _gdk_input_devices;
|
return _gdk_input_devices;
|
||||||
}
|
}
|
||||||
|
|
||||||
GList *
|
GList *
|
||||||
gdk_display_list_devices (GdkDisplay *dpy)
|
gdk_display_list_devices (GdkDisplay *dpy)
|
||||||
{
|
{
|
||||||
#ifdef HAVE_WINTAB
|
|
||||||
_gdk_input_wintab_init_check ();
|
_gdk_input_wintab_init_check ();
|
||||||
#endif /* HAVE_WINTAB */
|
|
||||||
return _gdk_input_devices;
|
return _gdk_input_devices;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -276,9 +262,8 @@ gdk_input_set_extension_events (GdkWindow *window, gint mask,
|
|||||||
|
|
||||||
if (mask != 0)
|
if (mask != 0)
|
||||||
{
|
{
|
||||||
#ifdef HAVE_WINTAB
|
|
||||||
_gdk_input_wintab_init_check ();
|
_gdk_input_wintab_init_check ();
|
||||||
#endif /* HAVE_WINTAB */
|
|
||||||
iw = g_new(GdkInputWindow,1);
|
iw = g_new(GdkInputWindow,1);
|
||||||
|
|
||||||
iw->window = window;
|
iw->window = window;
|
||||||
|
|||||||
@ -79,12 +79,10 @@ _gdk_windowing_init (void)
|
|||||||
{
|
{
|
||||||
gchar buf[10];
|
gchar buf[10];
|
||||||
|
|
||||||
#ifdef HAVE_WINTAB
|
|
||||||
if (getenv ("GDK_IGNORE_WINTAB") != NULL)
|
if (getenv ("GDK_IGNORE_WINTAB") != NULL)
|
||||||
_gdk_input_ignore_wintab = TRUE;
|
_gdk_input_ignore_wintab = TRUE;
|
||||||
else if (getenv ("GDK_USE_WINTAB") != NULL)
|
else if (getenv ("GDK_USE_WINTAB") != NULL)
|
||||||
_gdk_input_ignore_wintab = FALSE;
|
_gdk_input_ignore_wintab = FALSE;
|
||||||
#endif
|
|
||||||
|
|
||||||
if (gdk_synchronize)
|
if (gdk_synchronize)
|
||||||
GdiSetBatchLimit (1);
|
GdiSetBatchLimit (1);
|
||||||
@ -862,11 +860,9 @@ _gdk_win32_message_to_string (UINT msg)
|
|||||||
CASE (WM_PENWINFIRST);
|
CASE (WM_PENWINFIRST);
|
||||||
CASE (WM_PENWINLAST);
|
CASE (WM_PENWINLAST);
|
||||||
CASE (WM_APP);
|
CASE (WM_APP);
|
||||||
#ifdef HAVE_WINTAB
|
|
||||||
CASE (WT_PACKET);
|
CASE (WT_PACKET);
|
||||||
CASE (WT_CSRCHANGE);
|
CASE (WT_CSRCHANGE);
|
||||||
CASE (WT_PROXIMITY);
|
CASE (WT_PROXIMITY);
|
||||||
#endif
|
|
||||||
#undef CASE
|
#undef CASE
|
||||||
default:
|
default:
|
||||||
if (msg >= WM_HANDHELDFIRST && msg <= WM_HANDHELDLAST)
|
if (msg >= WM_HANDHELDFIRST && msg <= WM_HANDHELDLAST)
|
||||||
|
|||||||
233
gdk/win32/pktdef.h
Normal file
233
gdk/win32/pktdef.h
Normal file
@ -0,0 +1,233 @@
|
|||||||
|
/* -------------------------------- 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
|
||||||
|
#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 */
|
||||||
863
gdk/win32/wintab.h
Normal file
863
gdk/win32/wintab.h
Normal file
@ -0,0 +1,863 @@
|
|||||||
|
/* -------------------------------- wintab.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.
|
||||||
|
------------------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#ifndef _INC_WINTAB /* prevent multiple includes */
|
||||||
|
#define _INC_WINTAB
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
/* Messages */
|
||||||
|
#ifndef NOWTMESSAGES
|
||||||
|
|
||||||
|
#define WT_DEFBASE 0x7FF0
|
||||||
|
#define WT_MAXOFFSET 0xF
|
||||||
|
|
||||||
|
#define _WT_PACKET(b) ((b)+0)
|
||||||
|
#define _WT_CTXOPEN(b) ((b)+1)
|
||||||
|
#define _WT_CTXCLOSE(b) ((b)+2)
|
||||||
|
#define _WT_CTXUPDATE(b) ((b)+3)
|
||||||
|
#define _WT_CTXOVERLAP(b) ((b)+4)
|
||||||
|
#define _WT_PROXIMITY(b) ((b)+5)
|
||||||
|
#define _WT_INFOCHANGE(b) ((b)+6)
|
||||||
|
#define _WT_CSRCHANGE(b) ((b)+7) /* 1.1 */
|
||||||
|
#define _WT_MAX(b) ((b)+WT_MAXOFFSET)
|
||||||
|
|
||||||
|
#define WT_PACKET _WT_PACKET(WT_DEFBASE)
|
||||||
|
#define WT_CTXOPEN _WT_CTXOPEN(WT_DEFBASE)
|
||||||
|
#define WT_CTXCLOSE _WT_CTXCLOSE(WT_DEFBASE)
|
||||||
|
#define WT_CTXUPDATE _WT_CTXUPDATE(WT_DEFBASE)
|
||||||
|
#define WT_CTXOVERLAP _WT_CTXOVERLAP(WT_DEFBASE)
|
||||||
|
#define WT_PROXIMITY _WT_PROXIMITY(WT_DEFBASE)
|
||||||
|
#define WT_INFOCHANGE _WT_INFOCHANGE(WT_DEFBASE)
|
||||||
|
#define WT_CSRCHANGE _WT_CSRCHANGE(WT_DEFBASE) /* 1.1 */
|
||||||
|
#define WT_MAX _WT_MAX(WT_DEFBASE)
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
/* Data Types */
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
/* COMMON DATA DEFS */
|
||||||
|
|
||||||
|
DECLARE_HANDLE(HMGR); /* manager handle */
|
||||||
|
DECLARE_HANDLE(HCTX); /* context handle */
|
||||||
|
DECLARE_HANDLE(HWTHOOK); /* hook handle */
|
||||||
|
|
||||||
|
typedef DWORD WTPKT; /* packet mask */
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef NOWTPKT
|
||||||
|
|
||||||
|
/* WTPKT bits */
|
||||||
|
#define PK_CONTEXT 0x0001 /* reporting context */
|
||||||
|
#define PK_STATUS 0x0002 /* status bits */
|
||||||
|
#define PK_TIME 0x0004 /* time stamp */
|
||||||
|
#define PK_CHANGED 0x0008 /* change bit vector */
|
||||||
|
#define PK_SERIAL_NUMBER 0x0010 /* packet serial number */
|
||||||
|
#define PK_CURSOR 0x0020 /* reporting cursor */
|
||||||
|
#define PK_BUTTONS 0x0040 /* button information */
|
||||||
|
#define PK_X 0x0080 /* x axis */
|
||||||
|
#define PK_Y 0x0100 /* y axis */
|
||||||
|
#define PK_Z 0x0200 /* z axis */
|
||||||
|
#define PK_NORMAL_PRESSURE 0x0400 /* normal or tip pressure */
|
||||||
|
#define PK_TANGENT_PRESSURE 0x0800 /* tangential or barrel pressure */
|
||||||
|
#define PK_ORIENTATION 0x1000 /* orientation info: tilts */
|
||||||
|
#define PK_ROTATION 0x2000 /* rotation info; 1.1 */
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef DWORD FIX32; /* fixed-point arithmetic type */
|
||||||
|
|
||||||
|
#ifndef NOFIX32
|
||||||
|
#define INT(x) HIWORD(x)
|
||||||
|
#define FRAC(x) LOWORD(x)
|
||||||
|
|
||||||
|
#define CASTFIX32(x) ((FIX32)((x)*65536L))
|
||||||
|
|
||||||
|
#define ROUND(x) (INT(x) + (FRAC(x) > (WORD)0x8000))
|
||||||
|
|
||||||
|
#define FIX_MUL(c, a, b) \
|
||||||
|
(c = (((DWORD)FRAC(a) * FRAC(b)) >> 16) + \
|
||||||
|
(DWORD)INT(a) * FRAC(b) + \
|
||||||
|
(DWORD)INT(b) * FRAC(a) + \
|
||||||
|
((DWORD)INT(a) * INT(b) << 16))
|
||||||
|
|
||||||
|
#ifdef _WINDLL
|
||||||
|
#define FIX_DIV_SC static
|
||||||
|
#else
|
||||||
|
#define FIX_DIV_SC
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define FIX_DIV(c, a, b) \
|
||||||
|
{ \
|
||||||
|
FIX_DIV_SC DWORD temp, rem, btemp; \
|
||||||
|
\
|
||||||
|
/* fraction done bytewise */ \
|
||||||
|
temp = ((a / b) << 16); \
|
||||||
|
rem = a % b; \
|
||||||
|
btemp = b; \
|
||||||
|
if (INT(btemp) < 256) { \
|
||||||
|
rem <<= 8; \
|
||||||
|
} \
|
||||||
|
else { \
|
||||||
|
btemp >>= 8; \
|
||||||
|
} \
|
||||||
|
temp += ((rem / btemp) << 8); \
|
||||||
|
rem %= btemp; \
|
||||||
|
rem <<= 8; \
|
||||||
|
temp += rem / btemp; \
|
||||||
|
c = temp; \
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
/* INFO DATA DEFS */
|
||||||
|
|
||||||
|
#ifndef NOWTINFO
|
||||||
|
|
||||||
|
#ifndef NOWTAXIS
|
||||||
|
|
||||||
|
typedef struct tagAXIS {
|
||||||
|
LONG axMin;
|
||||||
|
LONG axMax;
|
||||||
|
UINT axUnits;
|
||||||
|
FIX32 axResolution;
|
||||||
|
} AXIS, *PAXIS, NEAR *NPAXIS, FAR *LPAXIS;
|
||||||
|
|
||||||
|
/* unit specifiers */
|
||||||
|
#define TU_NONE 0
|
||||||
|
#define TU_INCHES 1
|
||||||
|
#define TU_CENTIMETERS 2
|
||||||
|
#define TU_CIRCLE 3
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef NOWTSYSBUTTONS
|
||||||
|
|
||||||
|
/* system button assignment values */
|
||||||
|
#define SBN_NONE 0x00
|
||||||
|
#define SBN_LCLICK 0x01
|
||||||
|
#define SBN_LDBLCLICK 0x02
|
||||||
|
#define SBN_LDRAG 0x03
|
||||||
|
#define SBN_RCLICK 0x04
|
||||||
|
#define SBN_RDBLCLICK 0x05
|
||||||
|
#define SBN_RDRAG 0x06
|
||||||
|
#define SBN_MCLICK 0x07
|
||||||
|
#define SBN_MDBLCLICK 0x08
|
||||||
|
#define SBN_MDRAG 0x09
|
||||||
|
/* for Pen Windows */
|
||||||
|
#define SBN_PTCLICK 0x10
|
||||||
|
#define SBN_PTDBLCLICK 0x20
|
||||||
|
#define SBN_PTDRAG 0x30
|
||||||
|
#define SBN_PNCLICK 0x40
|
||||||
|
#define SBN_PNDBLCLICK 0x50
|
||||||
|
#define SBN_PNDRAG 0x60
|
||||||
|
#define SBN_P1CLICK 0x70
|
||||||
|
#define SBN_P1DBLCLICK 0x80
|
||||||
|
#define SBN_P1DRAG 0x90
|
||||||
|
#define SBN_P2CLICK 0xA0
|
||||||
|
#define SBN_P2DBLCLICK 0xB0
|
||||||
|
#define SBN_P2DRAG 0xC0
|
||||||
|
#define SBN_P3CLICK 0xD0
|
||||||
|
#define SBN_P3DBLCLICK 0xE0
|
||||||
|
#define SBN_P3DRAG 0xF0
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef NOWTCAPABILITIES
|
||||||
|
|
||||||
|
/* hardware capabilities */
|
||||||
|
#define HWC_INTEGRATED 0x0001
|
||||||
|
#define HWC_TOUCH 0x0002
|
||||||
|
#define HWC_HARDPROX 0x0004
|
||||||
|
#define HWC_PHYSID_CURSORS 0x0008 /* 1.1 */
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef NOWTIFC
|
||||||
|
|
||||||
|
#ifndef NOWTCURSORS
|
||||||
|
|
||||||
|
/* cursor capabilities */
|
||||||
|
#define CRC_MULTIMODE 0x0001 /* 1.1 */
|
||||||
|
#define CRC_AGGREGATE 0x0002 /* 1.1 */
|
||||||
|
#define CRC_INVERT 0x0004 /* 1.1 */
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* info categories */
|
||||||
|
#define WTI_INTERFACE 1
|
||||||
|
#define IFC_WINTABID 1
|
||||||
|
#define IFC_SPECVERSION 2
|
||||||
|
#define IFC_IMPLVERSION 3
|
||||||
|
#define IFC_NDEVICES 4
|
||||||
|
#define IFC_NCURSORS 5
|
||||||
|
#define IFC_NCONTEXTS 6
|
||||||
|
#define IFC_CTXOPTIONS 7
|
||||||
|
#define IFC_CTXSAVESIZE 8
|
||||||
|
#define IFC_NEXTENSIONS 9
|
||||||
|
#define IFC_NMANAGERS 10
|
||||||
|
#define IFC_MAX 10
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef NOWTSTATUS
|
||||||
|
|
||||||
|
#define WTI_STATUS 2
|
||||||
|
#define STA_CONTEXTS 1
|
||||||
|
#define STA_SYSCTXS 2
|
||||||
|
#define STA_PKTRATE 3
|
||||||
|
#define STA_PKTDATA 4
|
||||||
|
#define STA_MANAGERS 5
|
||||||
|
#define STA_SYSTEM 6
|
||||||
|
#define STA_BUTTONUSE 7
|
||||||
|
#define STA_SYSBTNUSE 8
|
||||||
|
#define STA_MAX 8
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef NOWTDEFCONTEXT
|
||||||
|
|
||||||
|
#define WTI_DEFCONTEXT 3
|
||||||
|
#define WTI_DEFSYSCTX 4
|
||||||
|
#define WTI_DDCTXS 400 /* 1.1 */
|
||||||
|
#define WTI_DSCTXS 500 /* 1.1 */
|
||||||
|
#define CTX_NAME 1
|
||||||
|
#define CTX_OPTIONS 2
|
||||||
|
#define CTX_STATUS 3
|
||||||
|
#define CTX_LOCKS 4
|
||||||
|
#define CTX_MSGBASE 5
|
||||||
|
#define CTX_DEVICE 6
|
||||||
|
#define CTX_PKTRATE 7
|
||||||
|
#define CTX_PKTDATA 8
|
||||||
|
#define CTX_PKTMODE 9
|
||||||
|
#define CTX_MOVEMASK 10
|
||||||
|
#define CTX_BTNDNMASK 11
|
||||||
|
#define CTX_BTNUPMASK 12
|
||||||
|
#define CTX_INORGX 13
|
||||||
|
#define CTX_INORGY 14
|
||||||
|
#define CTX_INORGZ 15
|
||||||
|
#define CTX_INEXTX 16
|
||||||
|
#define CTX_INEXTY 17
|
||||||
|
#define CTX_INEXTZ 18
|
||||||
|
#define CTX_OUTORGX 19
|
||||||
|
#define CTX_OUTORGY 20
|
||||||
|
#define CTX_OUTORGZ 21
|
||||||
|
#define CTX_OUTEXTX 22
|
||||||
|
#define CTX_OUTEXTY 23
|
||||||
|
#define CTX_OUTEXTZ 24
|
||||||
|
#define CTX_SENSX 25
|
||||||
|
#define CTX_SENSY 26
|
||||||
|
#define CTX_SENSZ 27
|
||||||
|
#define CTX_SYSMODE 28
|
||||||
|
#define CTX_SYSORGX 29
|
||||||
|
#define CTX_SYSORGY 30
|
||||||
|
#define CTX_SYSEXTX 31
|
||||||
|
#define CTX_SYSEXTY 32
|
||||||
|
#define CTX_SYSSENSX 33
|
||||||
|
#define CTX_SYSSENSY 34
|
||||||
|
#define CTX_MAX 34
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef NOWTDEVICES
|
||||||
|
|
||||||
|
#define WTI_DEVICES 100
|
||||||
|
#define DVC_NAME 1
|
||||||
|
#define DVC_HARDWARE 2
|
||||||
|
#define DVC_NCSRTYPES 3
|
||||||
|
#define DVC_FIRSTCSR 4
|
||||||
|
#define DVC_PKTRATE 5
|
||||||
|
#define DVC_PKTDATA 6
|
||||||
|
#define DVC_PKTMODE 7
|
||||||
|
#define DVC_CSRDATA 8
|
||||||
|
#define DVC_XMARGIN 9
|
||||||
|
#define DVC_YMARGIN 10
|
||||||
|
#define DVC_ZMARGIN 11
|
||||||
|
#define DVC_X 12
|
||||||
|
#define DVC_Y 13
|
||||||
|
#define DVC_Z 14
|
||||||
|
#define DVC_NPRESSURE 15
|
||||||
|
#define DVC_TPRESSURE 16
|
||||||
|
#define DVC_ORIENTATION 17
|
||||||
|
#define DVC_ROTATION 18 /* 1.1 */
|
||||||
|
#define DVC_PNPID 19 /* 1.1 */
|
||||||
|
#define DVC_MAX 19
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef NOWTCURSORS
|
||||||
|
|
||||||
|
#define WTI_CURSORS 200
|
||||||
|
#define CSR_NAME 1
|
||||||
|
#define CSR_ACTIVE 2
|
||||||
|
#define CSR_PKTDATA 3
|
||||||
|
#define CSR_BUTTONS 4
|
||||||
|
#define CSR_BUTTONBITS 5
|
||||||
|
#define CSR_BTNNAMES 6
|
||||||
|
#define CSR_BUTTONMAP 7
|
||||||
|
#define CSR_SYSBTNMAP 8
|
||||||
|
#define CSR_NPBUTTON 9
|
||||||
|
#define CSR_NPBTNMARKS 10
|
||||||
|
#define CSR_NPRESPONSE 11
|
||||||
|
#define CSR_TPBUTTON 12
|
||||||
|
#define CSR_TPBTNMARKS 13
|
||||||
|
#define CSR_TPRESPONSE 14
|
||||||
|
#define CSR_PHYSID 15 /* 1.1 */
|
||||||
|
#define CSR_MODE 16 /* 1.1 */
|
||||||
|
#define CSR_MINPKTDATA 17 /* 1.1 */
|
||||||
|
#define CSR_MINBUTTONS 18 /* 1.1 */
|
||||||
|
#define CSR_CAPABILITIES 19 /* 1.1 */
|
||||||
|
#define CSR_MAX 19
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef NOWTEXTENSIONS
|
||||||
|
|
||||||
|
#define WTI_EXTENSIONS 300
|
||||||
|
#define EXT_NAME 1
|
||||||
|
#define EXT_TAG 2
|
||||||
|
#define EXT_MASK 3
|
||||||
|
#define EXT_SIZE 4
|
||||||
|
#define EXT_AXES 5
|
||||||
|
#define EXT_DEFAULT 6
|
||||||
|
#define EXT_DEFCONTEXT 7
|
||||||
|
#define EXT_DEFSYSCTX 8
|
||||||
|
#define EXT_CURSORS 9
|
||||||
|
#define EXT_MAX 109 /* Allow 100 cursors */
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
/* CONTEXT DATA DEFS */
|
||||||
|
|
||||||
|
#define LCNAMELEN 40
|
||||||
|
#define LC_NAMELEN 40
|
||||||
|
#ifdef WIN32
|
||||||
|
typedef struct tagLOGCONTEXTA {
|
||||||
|
char lcName[LCNAMELEN];
|
||||||
|
UINT lcOptions;
|
||||||
|
UINT lcStatus;
|
||||||
|
UINT lcLocks;
|
||||||
|
UINT lcMsgBase;
|
||||||
|
UINT lcDevice;
|
||||||
|
UINT lcPktRate;
|
||||||
|
WTPKT lcPktData;
|
||||||
|
WTPKT lcPktMode;
|
||||||
|
WTPKT lcMoveMask;
|
||||||
|
DWORD lcBtnDnMask;
|
||||||
|
DWORD lcBtnUpMask;
|
||||||
|
LONG lcInOrgX;
|
||||||
|
LONG lcInOrgY;
|
||||||
|
LONG lcInOrgZ;
|
||||||
|
LONG lcInExtX;
|
||||||
|
LONG lcInExtY;
|
||||||
|
LONG lcInExtZ;
|
||||||
|
LONG lcOutOrgX;
|
||||||
|
LONG lcOutOrgY;
|
||||||
|
LONG lcOutOrgZ;
|
||||||
|
LONG lcOutExtX;
|
||||||
|
LONG lcOutExtY;
|
||||||
|
LONG lcOutExtZ;
|
||||||
|
FIX32 lcSensX;
|
||||||
|
FIX32 lcSensY;
|
||||||
|
FIX32 lcSensZ;
|
||||||
|
BOOL lcSysMode;
|
||||||
|
int lcSysOrgX;
|
||||||
|
int lcSysOrgY;
|
||||||
|
int lcSysExtX;
|
||||||
|
int lcSysExtY;
|
||||||
|
FIX32 lcSysSensX;
|
||||||
|
FIX32 lcSysSensY;
|
||||||
|
} LOGCONTEXTA, *PLOGCONTEXTA, NEAR *NPLOGCONTEXTA, FAR *LPLOGCONTEXTA;
|
||||||
|
typedef struct tagLOGCONTEXTW {
|
||||||
|
WCHAR lcName[LCNAMELEN];
|
||||||
|
UINT lcOptions;
|
||||||
|
UINT lcStatus;
|
||||||
|
UINT lcLocks;
|
||||||
|
UINT lcMsgBase;
|
||||||
|
UINT lcDevice;
|
||||||
|
UINT lcPktRate;
|
||||||
|
WTPKT lcPktData;
|
||||||
|
WTPKT lcPktMode;
|
||||||
|
WTPKT lcMoveMask;
|
||||||
|
DWORD lcBtnDnMask;
|
||||||
|
DWORD lcBtnUpMask;
|
||||||
|
LONG lcInOrgX;
|
||||||
|
LONG lcInOrgY;
|
||||||
|
LONG lcInOrgZ;
|
||||||
|
LONG lcInExtX;
|
||||||
|
LONG lcInExtY;
|
||||||
|
LONG lcInExtZ;
|
||||||
|
LONG lcOutOrgX;
|
||||||
|
LONG lcOutOrgY;
|
||||||
|
LONG lcOutOrgZ;
|
||||||
|
LONG lcOutExtX;
|
||||||
|
LONG lcOutExtY;
|
||||||
|
LONG lcOutExtZ;
|
||||||
|
FIX32 lcSensX;
|
||||||
|
FIX32 lcSensY;
|
||||||
|
FIX32 lcSensZ;
|
||||||
|
BOOL lcSysMode;
|
||||||
|
int lcSysOrgX;
|
||||||
|
int lcSysOrgY;
|
||||||
|
int lcSysExtX;
|
||||||
|
int lcSysExtY;
|
||||||
|
FIX32 lcSysSensX;
|
||||||
|
FIX32 lcSysSensY;
|
||||||
|
} LOGCONTEXTW, *PLOGCONTEXTW, NEAR *NPLOGCONTEXTW, FAR *LPLOGCONTEXTW;
|
||||||
|
#ifdef UNICODE
|
||||||
|
typedef LOGCONTEXTW LOGCONTEXT;
|
||||||
|
typedef PLOGCONTEXTW PLOGCONTEXT;
|
||||||
|
typedef NPLOGCONTEXTW NPLOGCONTEXT;
|
||||||
|
typedef LPLOGCONTEXTW LPLOGCONTEXT;
|
||||||
|
#else
|
||||||
|
typedef LOGCONTEXTA LOGCONTEXT;
|
||||||
|
typedef PLOGCONTEXTA PLOGCONTEXT;
|
||||||
|
typedef NPLOGCONTEXTA NPLOGCONTEXT;
|
||||||
|
typedef LPLOGCONTEXTA LPLOGCONTEXT;
|
||||||
|
#endif /* UNICODE */
|
||||||
|
#else /* WIN32 */
|
||||||
|
typedef struct tagLOGCONTEXT {
|
||||||
|
char lcName[LCNAMELEN];
|
||||||
|
UINT lcOptions;
|
||||||
|
UINT lcStatus;
|
||||||
|
UINT lcLocks;
|
||||||
|
UINT lcMsgBase;
|
||||||
|
UINT lcDevice;
|
||||||
|
UINT lcPktRate;
|
||||||
|
WTPKT lcPktData;
|
||||||
|
WTPKT lcPktMode;
|
||||||
|
WTPKT lcMoveMask;
|
||||||
|
DWORD lcBtnDnMask;
|
||||||
|
DWORD lcBtnUpMask;
|
||||||
|
LONG lcInOrgX;
|
||||||
|
LONG lcInOrgY;
|
||||||
|
LONG lcInOrgZ;
|
||||||
|
LONG lcInExtX;
|
||||||
|
LONG lcInExtY;
|
||||||
|
LONG lcInExtZ;
|
||||||
|
LONG lcOutOrgX;
|
||||||
|
LONG lcOutOrgY;
|
||||||
|
LONG lcOutOrgZ;
|
||||||
|
LONG lcOutExtX;
|
||||||
|
LONG lcOutExtY;
|
||||||
|
LONG lcOutExtZ;
|
||||||
|
FIX32 lcSensX;
|
||||||
|
FIX32 lcSensY;
|
||||||
|
FIX32 lcSensZ;
|
||||||
|
BOOL lcSysMode;
|
||||||
|
int lcSysOrgX;
|
||||||
|
int lcSysOrgY;
|
||||||
|
int lcSysExtX;
|
||||||
|
int lcSysExtY;
|
||||||
|
FIX32 lcSysSensX;
|
||||||
|
FIX32 lcSysSensY;
|
||||||
|
} LOGCONTEXT, *PLOGCONTEXT, NEAR *NPLOGCONTEXT, FAR *LPLOGCONTEXT;
|
||||||
|
#endif /* WIN32 */
|
||||||
|
|
||||||
|
/* context option values */
|
||||||
|
#define CXO_SYSTEM 0x0001
|
||||||
|
#define CXO_PEN 0x0002
|
||||||
|
#define CXO_MESSAGES 0x0004
|
||||||
|
#define CXO_MARGIN 0x8000
|
||||||
|
#define CXO_MGNINSIDE 0x4000
|
||||||
|
#define CXO_CSRMESSAGES 0x0008 /* 1.1 */
|
||||||
|
|
||||||
|
/* context status values */
|
||||||
|
#define CXS_DISABLED 0x0001
|
||||||
|
#define CXS_OBSCURED 0x0002
|
||||||
|
#define CXS_ONTOP 0x0004
|
||||||
|
|
||||||
|
/* context lock values */
|
||||||
|
#define CXL_INSIZE 0x0001
|
||||||
|
#define CXL_INASPECT 0x0002
|
||||||
|
#define CXL_SENSITIVITY 0x0004
|
||||||
|
#define CXL_MARGIN 0x0008
|
||||||
|
#define CXL_SYSOUT 0x0010
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
/* EVENT DATA DEFS */
|
||||||
|
|
||||||
|
/* For packet structure definition, see pktdef.h */
|
||||||
|
|
||||||
|
/* packet status values */
|
||||||
|
#define TPS_PROXIMITY 0x0001
|
||||||
|
#define TPS_QUEUE_ERR 0x0002
|
||||||
|
#define TPS_MARGIN 0x0004
|
||||||
|
#define TPS_GRAB 0x0008
|
||||||
|
#define TPS_INVERT 0x0010 /* 1.1 */
|
||||||
|
|
||||||
|
typedef struct tagORIENTATION {
|
||||||
|
int orAzimuth;
|
||||||
|
int orAltitude;
|
||||||
|
int orTwist;
|
||||||
|
} ORIENTATION, *PORIENTATION, NEAR *NPORIENTATION, FAR *LPORIENTATION;
|
||||||
|
|
||||||
|
typedef struct tagROTATION { /* 1.1 */
|
||||||
|
int roPitch;
|
||||||
|
int roRoll;
|
||||||
|
int roYaw;
|
||||||
|
} ROTATION, *PROTATION, NEAR *NPROTATION, FAR *LPROTATION;
|
||||||
|
// grandfather in obsolete member names.
|
||||||
|
#define rotPitch roPitch
|
||||||
|
#define rotRoll roRoll
|
||||||
|
#define rotYaw roYaw
|
||||||
|
|
||||||
|
/* relative buttons */
|
||||||
|
#define TBN_NONE 0
|
||||||
|
#define TBN_UP 1
|
||||||
|
#define TBN_DOWN 2
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
/* DEVICE CONFIG CONSTANTS */
|
||||||
|
|
||||||
|
#ifndef NOWTDEVCFG
|
||||||
|
|
||||||
|
#define WTDC_NONE 0
|
||||||
|
#define WTDC_CANCEL 1
|
||||||
|
#define WTDC_OK 2
|
||||||
|
#define WTDC_RESTART 3
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
/* HOOK CONSTANTS */
|
||||||
|
|
||||||
|
#ifndef NOWTHOOKS
|
||||||
|
|
||||||
|
#define WTH_PLAYBACK 1
|
||||||
|
#define WTH_RECORD 2
|
||||||
|
|
||||||
|
#define WTHC_GETLPLPFN (-3)
|
||||||
|
#define WTHC_LPLPFNNEXT (-2)
|
||||||
|
#define WTHC_LPFNNEXT (-1)
|
||||||
|
#define WTHC_ACTION 0
|
||||||
|
#define WTHC_GETNEXT 1
|
||||||
|
#define WTHC_SKIP 2
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
/* PREFERENCE FUNCTION CONSTANTS */
|
||||||
|
|
||||||
|
#ifndef NOWTPREF
|
||||||
|
|
||||||
|
#define WTP_LPDEFAULT ((LPVOID)-1L)
|
||||||
|
#define WTP_DWDEFAULT ((DWORD)-1L)
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
/* EXTENSION TAGS AND CONSTANTS */
|
||||||
|
|
||||||
|
#ifndef NOWTEXTENSIONS
|
||||||
|
|
||||||
|
/* constants for use with pktdef.h */
|
||||||
|
#define PKEXT_ABSOLUTE 1
|
||||||
|
#define PKEXT_RELATIVE 2
|
||||||
|
|
||||||
|
/* Extension tags. */
|
||||||
|
#define WTX_OBT 0 /* Out of bounds tracking */
|
||||||
|
#define WTX_FKEYS 1 /* Function keys */
|
||||||
|
#define WTX_TILT 2 /* Raw Cartesian tilt; 1.1 */
|
||||||
|
#define WTX_CSRMASK 3 /* select input by cursor type; 1.1 */
|
||||||
|
#define WTX_XBTNMASK 4 /* Extended button mask; 1.1 */
|
||||||
|
|
||||||
|
typedef struct tagXBTNMASK {
|
||||||
|
BYTE xBtnDnMask[32];
|
||||||
|
BYTE xBtnUpMask[32];
|
||||||
|
} XBTNMASK;
|
||||||
|
|
||||||
|
typedef struct tagTILT { /* 1.1 */
|
||||||
|
int tiltX;
|
||||||
|
int tiltY;
|
||||||
|
} TILT;
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
/* -------------------------------------------------------------------------- */
|
||||||
|
/* Functions */
|
||||||
|
|
||||||
|
#ifndef API
|
||||||
|
#ifndef WINAPI
|
||||||
|
#define API FAR PASCAL
|
||||||
|
#else
|
||||||
|
#define API WINAPI
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef NOWTCALLBACKS
|
||||||
|
|
||||||
|
#ifndef CALLBACK
|
||||||
|
#define CALLBACK FAR PASCAL
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef NOWTMANAGERFXNS
|
||||||
|
/* callback function types */
|
||||||
|
typedef BOOL (WINAPI * WTENUMPROC)(HCTX, LPARAM); /* changed CALLBACK->WINAPI, 1.1 */
|
||||||
|
typedef BOOL (WINAPI * WTCONFIGPROC)(HCTX, HWND);
|
||||||
|
typedef LRESULT (WINAPI * WTHOOKPROC)(int, WPARAM, LPARAM);
|
||||||
|
typedef WTHOOKPROC FAR *LPWTHOOKPROC;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef NOWTFUNCTIONS
|
||||||
|
|
||||||
|
#ifndef NOWTBASICFXNS
|
||||||
|
/* BASIC FUNCTIONS */
|
||||||
|
#ifdef WIN32
|
||||||
|
UINT API WTInfoA(UINT, UINT, LPVOID);
|
||||||
|
#define ORD_WTInfoA 20
|
||||||
|
UINT API WTInfoW(UINT, UINT, LPVOID);
|
||||||
|
#define ORD_WTInfoW 1020
|
||||||
|
#ifdef UNICODE
|
||||||
|
#define WTInfo WTInfoW
|
||||||
|
#define ORD_WTInfo ORD_WTInfoW
|
||||||
|
#else
|
||||||
|
#define WTInfo WTInfoA
|
||||||
|
#define ORD_WTInfo ORD_WTInfoA
|
||||||
|
#endif /* !UNICODE */
|
||||||
|
#else
|
||||||
|
UINT API WTInfo(UINT, UINT, LPVOID);
|
||||||
|
#define ORD_WTInfo 20
|
||||||
|
#endif
|
||||||
|
#ifdef WIN32
|
||||||
|
HCTX API WTOpenA(HWND, LPLOGCONTEXTA, BOOL);
|
||||||
|
#define ORD_WTOpenA 21
|
||||||
|
HCTX API WTOpenW(HWND, LPLOGCONTEXTW, BOOL);
|
||||||
|
#define ORD_WTOpenW 1021
|
||||||
|
#ifdef UNICODE
|
||||||
|
#define WTOpen WTOpenW
|
||||||
|
#define ORD_WTOpen ORD_WTOpenW
|
||||||
|
#else
|
||||||
|
#define WTOpen WTOpenA
|
||||||
|
#define ORD_WTOpen ORD_WTOpenA
|
||||||
|
#endif /* !UNICODE */
|
||||||
|
#else
|
||||||
|
HCTX API WTOpen(HWND, LPLOGCONTEXT, BOOL);
|
||||||
|
#define ORD_WTOpen 21
|
||||||
|
#endif
|
||||||
|
BOOL API WTClose(HCTX);
|
||||||
|
#define ORD_WTClose 22
|
||||||
|
int API WTPacketsGet(HCTX, int, LPVOID);
|
||||||
|
#define ORD_WTPacketsGet 23
|
||||||
|
BOOL API WTPacket(HCTX, UINT, LPVOID);
|
||||||
|
#define ORD_WTPacket 24
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef NOWTVISIBILITYFXNS
|
||||||
|
/* VISIBILITY FUNCTIONS */
|
||||||
|
BOOL API WTEnable(HCTX, BOOL);
|
||||||
|
#define ORD_WTEnable 40
|
||||||
|
BOOL API WTOverlap(HCTX, BOOL);
|
||||||
|
#define ORD_WTOverlap 41
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef NOWTCTXEDITFXNS
|
||||||
|
/* CONTEXT EDITING FUNCTIONS */
|
||||||
|
BOOL API WTConfig(HCTX, HWND);
|
||||||
|
#define ORD_WTConfig 60
|
||||||
|
#ifdef WIN32
|
||||||
|
BOOL API WTGetA(HCTX, LPLOGCONTEXTA);
|
||||||
|
#define ORD_WTGetA 61
|
||||||
|
BOOL API WTGetW(HCTX, LPLOGCONTEXTW);
|
||||||
|
#define ORD_WTGetW 1061
|
||||||
|
#ifdef UNICODE
|
||||||
|
#define WTGet WTGetW
|
||||||
|
#define ORD_WTGet ORD_WTGetW
|
||||||
|
#else
|
||||||
|
#define WTGet WTGetA
|
||||||
|
#define ORD_WTGet ORD_WTGetA
|
||||||
|
#endif /* !UNICODE */
|
||||||
|
#else
|
||||||
|
BOOL API WTGet(HCTX, LPLOGCONTEXT);
|
||||||
|
#define ORD_WTGet 61
|
||||||
|
#endif
|
||||||
|
#ifdef WIN32
|
||||||
|
BOOL API WTSetA(HCTX, LPLOGCONTEXTA);
|
||||||
|
#define ORD_WTSetA 62
|
||||||
|
BOOL API WTSetW(HCTX, LPLOGCONTEXTW);
|
||||||
|
#define ORD_WTSetW 1062
|
||||||
|
#ifdef UNICODE
|
||||||
|
#define WTSet WTSetW
|
||||||
|
#define ORD_WTSet ORD_WTSetW
|
||||||
|
#else
|
||||||
|
#define WTSet WTSetA
|
||||||
|
#define ORD_WTSet ORD_WTSetA
|
||||||
|
#endif /* !UNICODE */
|
||||||
|
#else
|
||||||
|
BOOL API WTSet(HCTX, LPLOGCONTEXT);
|
||||||
|
#define ORD_WTSet 62
|
||||||
|
#endif
|
||||||
|
BOOL API WTExtGet(HCTX, UINT, LPVOID);
|
||||||
|
#define ORD_WTExtGet 63
|
||||||
|
BOOL API WTExtSet(HCTX, UINT, LPVOID);
|
||||||
|
#define ORD_WTExtSet 64
|
||||||
|
BOOL API WTSave(HCTX, LPVOID);
|
||||||
|
#define ORD_WTSave 65
|
||||||
|
HCTX API WTRestore(HWND, LPVOID, BOOL);
|
||||||
|
#define ORD_WTRestore 66
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef NOWTQUEUEFXNS
|
||||||
|
/* ADVANCED PACKET AND QUEUE FUNCTIONS */
|
||||||
|
int API WTPacketsPeek(HCTX, int, LPVOID);
|
||||||
|
#define ORD_WTPacketsPeek 80
|
||||||
|
int API WTDataGet(HCTX, UINT, UINT, int, LPVOID, LPINT);
|
||||||
|
#define ORD_WTDataGet 81
|
||||||
|
int API WTDataPeek(HCTX, UINT, UINT, int, LPVOID, LPINT);
|
||||||
|
#define ORD_WTDataPeek 82
|
||||||
|
#ifndef WIN32
|
||||||
|
/* OBSOLETE IN WIN32! */
|
||||||
|
DWORD API WTQueuePackets(HCTX);
|
||||||
|
#define ORD_WTQueuePackets 83
|
||||||
|
#endif
|
||||||
|
int API WTQueueSizeGet(HCTX);
|
||||||
|
#define ORD_WTQueueSizeGet 84
|
||||||
|
BOOL API WTQueueSizeSet(HCTX, int);
|
||||||
|
#define ORD_WTQueueSizeSet 85
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef NOWTHMGRFXNS
|
||||||
|
/* MANAGER HANDLE FUNCTIONS */
|
||||||
|
HMGR API WTMgrOpen(HWND, UINT);
|
||||||
|
#define ORD_WTMgrOpen 100
|
||||||
|
BOOL API WTMgrClose(HMGR);
|
||||||
|
#define ORD_WTMgrClose 101
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef NOWTMGRCTXFXNS
|
||||||
|
/* MANAGER CONTEXT FUNCTIONS */
|
||||||
|
BOOL API WTMgrContextEnum(HMGR, WTENUMPROC, LPARAM);
|
||||||
|
#define ORD_WTMgrContextEnum 120
|
||||||
|
HWND API WTMgrContextOwner(HMGR, HCTX);
|
||||||
|
#define ORD_WTMgrContextOwner 121
|
||||||
|
HCTX API WTMgrDefContext(HMGR, BOOL);
|
||||||
|
#define ORD_WTMgrDefContext 122
|
||||||
|
HCTX API WTMgrDefContextEx(HMGR, UINT, BOOL); /* 1.1 */
|
||||||
|
#define ORD_WTMgrDefContextEx 206
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef NOWTMGRCONFIGFXNS
|
||||||
|
/* MANAGER CONFIG BOX FUNCTIONS */
|
||||||
|
UINT API WTMgrDeviceConfig(HMGR, UINT, HWND);
|
||||||
|
#define ORD_WTMgrDeviceConfig 140
|
||||||
|
#ifndef WIN32
|
||||||
|
/* OBSOLETE IN WIN32! */
|
||||||
|
BOOL API WTMgrConfigReplace(HMGR, BOOL, WTCONFIGPROC);
|
||||||
|
#define ORD_WTMgrConfigReplace 141
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef NOWTMGRHOOKFXNS
|
||||||
|
/* MANAGER PACKET HOOK FUNCTIONS */
|
||||||
|
#ifndef WIN32
|
||||||
|
/* OBSOLETE IN WIN32! */
|
||||||
|
WTHOOKPROC API WTMgrPacketHook(HMGR, BOOL, int, WTHOOKPROC);
|
||||||
|
#define ORD_WTMgrPacketHook 160
|
||||||
|
LRESULT API WTMgrPacketHookDefProc(int, WPARAM, LPARAM, LPWTHOOKPROC);
|
||||||
|
#define ORD_WTMgrPacketHookDefProc 161
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef NOWTMGRPREFFXNS
|
||||||
|
/* MANAGER PREFERENCE DATA FUNCTIONS */
|
||||||
|
BOOL API WTMgrExt(HMGR, UINT, LPVOID);
|
||||||
|
#define ORD_WTMgrExt 180
|
||||||
|
BOOL API WTMgrCsrEnable(HMGR, UINT, BOOL);
|
||||||
|
#define ORD_WTMgrCsrEnable 181
|
||||||
|
BOOL API WTMgrCsrButtonMap(HMGR, UINT, LPBYTE, LPBYTE);
|
||||||
|
#define ORD_WTMgrCsrButtonMap 182
|
||||||
|
BOOL API WTMgrCsrPressureBtnMarks(HMGR, UINT, DWORD, DWORD);
|
||||||
|
#define ORD_WTMgrCsrPressureBtnMarks 183
|
||||||
|
BOOL API WTMgrCsrPressureResponse(HMGR, UINT, UINT FAR *, UINT FAR *);
|
||||||
|
#define ORD_WTMgrCsrPressureResponse 184
|
||||||
|
BOOL API WTMgrCsrExt(HMGR, UINT, UINT, LPVOID);
|
||||||
|
#define ORD_WTMgrCsrExt 185
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Win32 replacements for non-portable functions. */
|
||||||
|
#ifndef NOWTQUEUEFXNS
|
||||||
|
/* ADVANCED PACKET AND QUEUE FUNCTIONS */
|
||||||
|
BOOL API WTQueuePacketsEx(HCTX, UINT FAR *, UINT FAR *);
|
||||||
|
#define ORD_WTQueuePacketsEx 200
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef NOWTMGRCONFIGFXNS
|
||||||
|
/* MANAGER CONFIG BOX FUNCTIONS */
|
||||||
|
#ifdef WIN32
|
||||||
|
BOOL API WTMgrConfigReplaceExA(HMGR, BOOL, LPSTR, LPSTR);
|
||||||
|
#define ORD_WTMgrConfigReplaceExA 202
|
||||||
|
BOOL API WTMgrConfigReplaceExW(HMGR, BOOL, LPWSTR, LPSTR);
|
||||||
|
#define ORD_WTMgrConfigReplaceExW 1202
|
||||||
|
#ifdef UNICODE
|
||||||
|
#define WTMgrConfigReplaceEx WTMgrConfigReplaceExW
|
||||||
|
#define ORD_WTMgrConfigReplaceEx ORD_WTMgrConfigReplaceExW
|
||||||
|
#else
|
||||||
|
#define WTMgrConfigReplaceEx WTMgrConfigReplaceExA
|
||||||
|
#define ORD_WTMgrConfigReplaceEx ORD_WTMgrConfigReplaceExA
|
||||||
|
#endif /* !UNICODE */
|
||||||
|
#else
|
||||||
|
BOOL API WTMgrConfigReplaceEx(HMGR, BOOL, LPSTR, LPSTR);
|
||||||
|
#define ORD_WTMgrConfigReplaceEx 202
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef NOWTMGRHOOKFXNS
|
||||||
|
/* MANAGER PACKET HOOK FUNCTIONS */
|
||||||
|
#ifdef WIN32
|
||||||
|
HWTHOOK API WTMgrPacketHookExA(HMGR, int, LPSTR, LPSTR);
|
||||||
|
#define ORD_WTMgrPacketHookExA 203
|
||||||
|
HWTHOOK API WTMgrPacketHookExW(HMGR, int, LPWSTR, LPSTR);
|
||||||
|
#define ORD_WTMgrPacketHookExW 1203
|
||||||
|
#ifdef UNICODE
|
||||||
|
#define WTMgrPacketHookEx WTMgrPacketHookExW
|
||||||
|
#define ORD_WTMgrPacketHookEx ORD_WTMgrPacketHookExW
|
||||||
|
#else
|
||||||
|
#define WTMgrPacketHookEx WTMgrPacketHookExA
|
||||||
|
#define ORD_WTMgrPacketHookEx ORD_WTMgrPacketHookExA
|
||||||
|
#endif /* !UNICODE */
|
||||||
|
#else
|
||||||
|
HWTHOOK API WTMgrPacketHookEx(HMGR, int, LPSTR, LPSTR);
|
||||||
|
#define ORD_WTMgrPacketHookEx 203
|
||||||
|
#endif
|
||||||
|
BOOL API WTMgrPacketUnhook(HWTHOOK);
|
||||||
|
#define ORD_WTMgrPacketUnhook 204
|
||||||
|
LRESULT API WTMgrPacketHookNext(HWTHOOK, int, WPARAM, LPARAM);
|
||||||
|
#define ORD_WTMgrPacketHookNext 205
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifndef NOWTMGRPREFFXNS
|
||||||
|
/* MANAGER PREFERENCE DATA FUNCTIONS */
|
||||||
|
BOOL API WTMgrCsrPressureBtnMarksEx(HMGR, UINT, UINT FAR *, UINT FAR *);
|
||||||
|
#define ORD_WTMgrCsrPressureBtnMarksEx 201
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
|
}
|
||||||
|
#endif /* __cplusplus */
|
||||||
|
|
||||||
|
#endif /* #define _INC_WINTAB */
|
||||||
|
|
||||||
Reference in New Issue
Block a user