commit
967913691a
@ -0,0 +1,52 @@
|
||||
QT += core gui
|
||||
|
||||
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
|
||||
|
||||
CONFIG += c++11
|
||||
|
||||
# The following define makes your compiler emit warnings if you use
|
||||
# any Qt feature that has been marked deprecated (the exact warnings
|
||||
# depend on your compiler). Please consult the documentation of the
|
||||
# deprecated API in order to know how to port your code away from it.
|
||||
DEFINES += QT_DEPRECATED_WARNINGS
|
||||
|
||||
# You can also make your code fail to compile if it uses deprecated APIs.
|
||||
# In order to do so, uncomment the following line.
|
||||
# You can also select to disable deprecated APIs only up to a certain version of Qt.
|
||||
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
|
||||
|
||||
SOURCES += \
|
||||
SWPosPointcut.cpp \
|
||||
main.cpp \
|
||||
mainwindow.cpp \
|
||||
signpaintercachethread.cpp \
|
||||
signpaintercachethread_linux.cpp \
|
||||
signpenpainter.cpp \
|
||||
signutils.cpp \
|
||||
sw_log.cpp \
|
||||
wintab/Utils.cpp
|
||||
|
||||
HEADERS += \
|
||||
SWPosPointcut.h \
|
||||
mainwindow.h \
|
||||
signpaintercachethread.h \
|
||||
signpaintercachethread_linux.h \
|
||||
signpenpainter.h \
|
||||
signpenstructs.h \
|
||||
signutils.h \
|
||||
sw_log.h \
|
||||
wintab/Utils.h \
|
||||
wintab/WINTAB.H
|
||||
|
||||
FORMS += \
|
||||
mainwindow.ui
|
||||
|
||||
LIBS+= -lUser32
|
||||
|
||||
# Default rules for deployment.
|
||||
qnx: target.path = /tmp/$${TARGET}/bin
|
||||
else: unix:!android: target.path = /opt/$${TARGET}/bin
|
||||
!isEmpty(target.path): INSTALLS += target
|
||||
|
||||
RESOURCES += \
|
||||
SignPenAppTablet.qrc
|
||||
@ -0,0 +1,5 @@
|
||||
<RCC>
|
||||
<qresource prefix="/qt">
|
||||
<file>etc/qt.conf</file>
|
||||
</qresource>
|
||||
</RCC>
|
||||
@ -0,0 +1,2 @@
|
||||
[Platforms]
|
||||
WindowsArguments = dpiawareness=0
|
||||
@ -0,0 +1,73 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>MainWindow</class>
|
||||
<widget class="QMainWindow" name="MainWindow">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>1279</width>
|
||||
<height>787</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="tabletTracking">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>MainWindow</string>
|
||||
</property>
|
||||
<widget class="QWidget" name="centralwidget">
|
||||
<widget class="QPlainTextEdit" name="plainTextEdit">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>20</x>
|
||||
<y>590</y>
|
||||
<width>1241</width>
|
||||
<height>181</height>
|
||||
</rect>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QPushButton" name="pushButton">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>30</x>
|
||||
<y>10</y>
|
||||
<width>80</width>
|
||||
<height>22</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>清空</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QCheckBox" name="checkBox">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>180</x>
|
||||
<y>10</y>
|
||||
<width>181</width>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>是否使用鼠标</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget class="QCheckBox" name="checkBox_ink">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>330</x>
|
||||
<y>10</y>
|
||||
<width>171</width>
|
||||
<height>21</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string>是否使用ink</string>
|
||||
</property>
|
||||
</widget>
|
||||
</widget>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,253 @@
|
||||
#include "signutils.h"
|
||||
#include <QtDebug>
|
||||
#include "sw_log.h"
|
||||
|
||||
QPointF CGPointZero = QPointF(0,0);
|
||||
|
||||
void CalculatePointcutWihtPoint(SWAnnotPath *curAnnotPath,CGPoint point, float radius, bool stroke, bool circle,qint64 ts)
|
||||
{
|
||||
/**
|
||||
进行切点计算
|
||||
*/
|
||||
SWRealPoint curPenPoint;
|
||||
curPenPoint.realPoint = point;
|
||||
curPenPoint.radius = radius;
|
||||
curPenPoint.timestamp = ts;
|
||||
curAnnotPath->points.append(curPenPoint);
|
||||
int realPointCount = curAnnotPath->points.count();
|
||||
|
||||
/**
|
||||
* 判断点数大于2进行 防抖处理
|
||||
*/
|
||||
if (realPointCount > 3)
|
||||
{
|
||||
|
||||
SWRealPoint penPoint0 = curAnnotPath->points.at(realPointCount - 3);
|
||||
SWRealPoint penPoint1 = curAnnotPath->points.at(realPointCount - 2);
|
||||
SWRealPoint penPoint2 = curAnnotPath->points.at(realPointCount - 1);
|
||||
SWPosStatus ret = CalculateShake(SWPosPointMake(penPoint0.realPoint.x(), penPoint0.realPoint.y(),penPoint0.radius),
|
||||
SWPosPointMake(penPoint1.realPoint.x(), penPoint1.realPoint.y(),penPoint1.radius),
|
||||
SWPosPointMake(penPoint2.realPoint.x(), penPoint2.realPoint.y(),penPoint2.radius));
|
||||
if (ret == SWPosRetSuccess)
|
||||
{
|
||||
if (penPoint0.circleCount != 0)
|
||||
{
|
||||
|
||||
penPoint0.circleCount = 0;
|
||||
penPoint0.circlePoints.clear();
|
||||
}
|
||||
penPoint0.pLeftBottomPoint = CGPointZero;
|
||||
penPoint0.pRightBottomPoint = CGPointZero;
|
||||
penPoint0.PLeftIntersectPoint = CGPointZero;
|
||||
penPoint0.PRightIntersectPoint = CGPointZero;
|
||||
if (curAnnotPath->isShake)
|
||||
{
|
||||
/**
|
||||
* 判断边际值停止纠偏
|
||||
**/
|
||||
double distance = GetDistanceBetweenPoint(penPoint0.realPoint,penPoint2.realPoint);
|
||||
if (distance >= 3) {
|
||||
|
||||
curAnnotPath->isShake = false;
|
||||
|
||||
} else {
|
||||
|
||||
curAnnotPath->points.removeAt(realPointCount - 2);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
curAnnotPath->points.removeAt(realPointCount - 2);
|
||||
curAnnotPath->isShake = true;
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
curAnnotPath->isShake = false;
|
||||
}
|
||||
}
|
||||
|
||||
realPointCount = curAnnotPath->points.count();
|
||||
|
||||
if (realPointCount == 2)
|
||||
{
|
||||
SWRealPoint penPoint0 = curAnnotPath->points.at(0);
|
||||
SWRealPoint penPoint1 = curAnnotPath->points.at(1);
|
||||
SWPosRet ret = SWGetTangentcurPoint(SWPosPointMake(penPoint0.realPoint.x(), penPoint0.realPoint.y(), penPoint0.radius),
|
||||
SWPosPointMake(penPoint1.realPoint.x(), penPoint1.realPoint.y(), penPoint1.radius),
|
||||
SWLineMakeZero(), SWLineMakeZero(),circle ? 1 : 0);
|
||||
|
||||
if (ret.status == SWPosRetSuccess)
|
||||
{
|
||||
|
||||
if (ret.circleCount > 0)
|
||||
{
|
||||
|
||||
curAnnotPath->points[0].circleCount = ret.circleCount;
|
||||
curAnnotPath->points[0].circlePoints = ret.circlePoints;
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
curAnnotPath->points[0].pLeftBottomPoint = CGPointMake(ret.prevLeftPoint.x, ret.prevLeftPoint.y);
|
||||
curAnnotPath->points[0].pRightBottomPoint = CGPointMake(ret.prevRightPoint.x, ret.prevRightPoint.y);
|
||||
curAnnotPath->points[1].pLeftTopPoint = CGPointMake(ret.curLeftPoint.x, ret.curLeftPoint.y);
|
||||
curAnnotPath->points[1].pRightTopPoint = CGPointMake(ret.curRightPoint.x, ret.curRightPoint.y);
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
curAnnotPath->points.removeLast();
|
||||
}
|
||||
|
||||
}
|
||||
else if (realPointCount > 2)
|
||||
{
|
||||
|
||||
SWRealPoint penPoint0 = curAnnotPath->points.at(realPointCount - 3);
|
||||
SWRealPoint penPoint1 = curAnnotPath->points.at(realPointCount - 2);
|
||||
SWRealPoint penPoint2 = curAnnotPath->points.at(realPointCount - 1);
|
||||
if (penPoint0.circleCount == 0)
|
||||
{
|
||||
|
||||
CGPoint penPoint0Left = CGPointEqualToPoint(penPoint0.PLeftIntersectPoint, CGPointZero) ? penPoint0.pLeftBottomPoint : penPoint0.PLeftIntersectPoint;
|
||||
|
||||
CGPoint penPoint1Left = CGPointEqualToPoint(penPoint1.PLeftIntersectPoint, CGPointZero) ? penPoint1.pLeftTopPoint : penPoint1.PLeftIntersectPoint;
|
||||
|
||||
CGPoint penPoint0Right = CGPointEqualToPoint(penPoint0.PRightIntersectPoint, CGPointZero) ? penPoint0.pRightBottomPoint : penPoint0.PRightIntersectPoint;
|
||||
|
||||
CGPoint penPoint1Right = CGPointEqualToPoint(penPoint1.PRightIntersectPoint, CGPointZero) ? penPoint1.pRightTopPoint : penPoint1.PRightIntersectPoint;
|
||||
|
||||
SWPosRet ret = SWGetTangentcurPoint(SWPosPointMake(penPoint1.realPoint.x(), penPoint1.realPoint.y(), penPoint1.radius), SWPosPointMake(penPoint2.realPoint.x(), penPoint2.realPoint.y(), penPoint2.radius), SWLineMake(penPoint0Left.x(), penPoint0Left.y(), penPoint1Left.x(), penPoint1Left.y()), SWLineMake(penPoint0Right.x(), penPoint0Right.y(), penPoint1Right.x(), penPoint1Right.y()),circle ? 1 : 0);
|
||||
if (ret.status == SWPosRetSuccess )
|
||||
{
|
||||
|
||||
if (ret.circleCount > 0)
|
||||
{
|
||||
|
||||
curAnnotPath->points[realPointCount - 2].circleCount = ret.circleCount;
|
||||
curAnnotPath->points[realPointCount - 2].circlePoints = ret.circlePoints;
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
curAnnotPath->points[realPointCount - 2].PLeftIntersectPoint = CGPointMake(ret.prevLeftIntersectPoint.x, ret.prevLeftIntersectPoint.y);
|
||||
curAnnotPath->points[realPointCount - 2].PRightIntersectPoint = CGPointMake(ret.prevRightIntersectPoint.x, ret.prevRightIntersectPoint.y);
|
||||
curAnnotPath->points[realPointCount - 2].pLeftBottomPoint = CGPointMake(ret.prevLeftPoint.x, ret.prevLeftPoint.y);
|
||||
curAnnotPath->points[realPointCount - 2].pRightBottomPoint = CGPointMake(ret.prevRightPoint.x, ret.prevRightPoint.y);
|
||||
curAnnotPath->points[realPointCount - 1].pLeftTopPoint = CGPointMake(ret.curLeftPoint.x, ret.curLeftPoint.y);
|
||||
curAnnotPath->points[realPointCount - 1].pRightTopPoint = CGPointMake(ret.curRightPoint.x, ret.curRightPoint.y);
|
||||
}
|
||||
}
|
||||
else if (ret.status == SWPosRetFail)
|
||||
{
|
||||
curAnnotPath->points.removeLast();
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
SWPosRet ret = SWGetTangentcurPoint(SWPosPointMake(penPoint1.realPoint.x(), penPoint1.realPoint.y(), penPoint1.radius), SWPosPointMake(penPoint2.realPoint.x(), penPoint2.realPoint.y(), penPoint2.radius), SWLineMakeZero(), SWLineMakeZero(),circle ? 1 : 0);
|
||||
if (ret.status == SWPosRetSuccess)
|
||||
{
|
||||
|
||||
if (ret.circleCount > 0)
|
||||
{
|
||||
|
||||
curAnnotPath->points[realPointCount - 2].circleCount = ret.circleCount;
|
||||
curAnnotPath->points[realPointCount - 2].circlePoints = ret.circlePoints;
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
curAnnotPath->points[realPointCount - 2].pLeftBottomPoint = CGPointMake(ret.prevLeftPoint.x, ret.prevLeftPoint.y);
|
||||
curAnnotPath->points[realPointCount - 2].pRightBottomPoint = CGPointMake(ret.prevRightPoint.x, ret.prevRightPoint.y);
|
||||
curAnnotPath->points[realPointCount - 1].pLeftTopPoint = CGPointMake(ret.curLeftPoint.x, ret.curLeftPoint.y);
|
||||
curAnnotPath->points[realPointCount - 1].pRightTopPoint = CGPointMake(ret.curRightPoint.x, ret.curRightPoint.y);
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
curAnnotPath->points.removeLast();
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
float GetDistanceBetweenPoint(QPointF start, QPointF end)
|
||||
{
|
||||
return sqrt(pow(start.y()-end.y(), 2.0) + pow(start.x()-end.x(), 2.0));
|
||||
}
|
||||
|
||||
|
||||
bool CGPointEqualToPoint(const CGPoint &point1, const CGPoint &point2)
|
||||
{
|
||||
return point1.x() == point2.x() && point1.y() == point2.y();
|
||||
}
|
||||
|
||||
bool GetPointValid(SWRealPoint penPoint)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
CGPoint ConvertToCGPoint(SWPointcut cPoint)
|
||||
{
|
||||
return CGPointMake(cPoint.x, cPoint.y);
|
||||
}
|
||||
|
||||
void AddStartPathElement(QList<Element> &elementList)
|
||||
{
|
||||
Element ele(StartFigure);
|
||||
elementList.append(ele);
|
||||
}
|
||||
|
||||
void AddMoveToElement(QList<Element> &elementList, QPointF point)
|
||||
{
|
||||
// qDebug() << __FUNCTION__ << point;
|
||||
// SW_Log::Get()->info(QString("====AddMoveToElement x: %1 y: %2====").arg(point.x()).arg(point.y()));
|
||||
|
||||
Element ele(MoveToElement);
|
||||
ele.AddEndPoint(point);
|
||||
elementList.append(ele);
|
||||
}
|
||||
|
||||
void AddCurveToElement(QList<Element> &elementList, QPointF control, QPointF control2, QPointF end)
|
||||
{
|
||||
// SW_Log::Get()->info(QString("====AddCurveToElement cx: %1 cy: %2 c2x: %3 c2y: %4 ex: %5 ey: %6====")
|
||||
// .arg(control.x()).arg(control.y()).arg(control2.x()).arg(control2.y()).arg(end.x()).arg(end.y()));
|
||||
Element ele(CurveToElement);
|
||||
ele.AddEndPoint(end);
|
||||
ele.AddControlPoint(control);
|
||||
ele.AddControlPoint2(control2);
|
||||
elementList.append(ele);
|
||||
}
|
||||
|
||||
void AddCurveToElement(QList<Element> &elementList, qreal ctrlPt1x, qreal ctrlPt1y, qreal ctrlPt2x, qreal ctrlPt2y, qreal endPtx, qreal endPty)
|
||||
{
|
||||
// SW_Log::Get()->info(QString("====AddCurveToElement cx: %1 cy: %2 c2x: %3 c2y: %4 ex: %5 ey: %6====")
|
||||
// .arg(ctrlPt1x).arg(ctrlPt1y).arg(ctrlPt2x).arg(ctrlPt2y).arg(endPtx).arg(endPty));
|
||||
AddCurveToElement(elementList,QPointF(ctrlPt1x,ctrlPt1y),QPointF(ctrlPt2x,ctrlPt2y),QPointF(endPtx,endPty));
|
||||
}
|
||||
|
||||
void AddQuadToElement(QList<Element> &elementList, QPointF control, QPointF end)
|
||||
{
|
||||
// SW_Log::Get()->info(QString("====AddQuadToElement cx: %1 cy: %2 ex: %5 ey: %6====")
|
||||
// .arg(control.x()).arg(control.y()).arg(end.x()).arg(end.y()));
|
||||
Element ele(QuadToElement);
|
||||
ele.AddEndPoint(end);
|
||||
ele.AddControlPoint(control);
|
||||
elementList.append(ele);
|
||||
}
|
||||
@ -0,0 +1,18 @@
|
||||
#ifndef SIGNUTILS_H
|
||||
#define SIGNUTILS_H
|
||||
#include "signpenstructs.h"
|
||||
|
||||
extern QPointF CGPointZero;
|
||||
extern bool CGPointEqualToPoint(const CGPoint &point1, const CGPoint &point2);
|
||||
extern void CalculatePointcutWihtPoint(SWAnnotPath *curAnnotPath,CGPoint point, float radius, bool stroke, bool circle,qint64 ts);
|
||||
extern bool GetPointValid(SWRealPoint penPoint);
|
||||
extern CGPoint ConvertToCGPoint(SWPointcut cPoint);
|
||||
extern float GetDistanceBetweenPoint(QPointF start, QPointF end);
|
||||
|
||||
extern void AddStartPathElement(QList<Element>& elementList);
|
||||
extern void AddMoveToElement(QList<Element>& elementList,QPointF point);
|
||||
extern void AddCurveToElement(QList<Element>& elementList,QPointF control,QPointF control2,QPointF end);
|
||||
extern void AddCurveToElement(QList<Element>& elementList,qreal ctrlPt1x, qreal ctrlPt1y, qreal ctrlPt2x, qreal ctrlPt2y,
|
||||
qreal endPtx, qreal endPty);
|
||||
extern void AddQuadToElement(QList<Element>& elementList,QPointF control,QPointF end);
|
||||
#endif // SIGNUTILS_H
|
||||
@ -0,0 +1,36 @@
|
||||
#ifndef SW_LOG_H
|
||||
#define SW_LOG_H
|
||||
|
||||
#include <QString>
|
||||
#include <QtDebug>
|
||||
|
||||
class SW_Log
|
||||
{
|
||||
public:
|
||||
static void Create(const QString& appPath,const QString appInfo="");
|
||||
static SW_Log* Get();
|
||||
static void Destroy();
|
||||
|
||||
void error(const char *message);
|
||||
void error(const QString &message);
|
||||
void warning(const char *message);
|
||||
void warning(const QString &message);
|
||||
void debug(const char *message);
|
||||
void debug(const QString &message);
|
||||
void info(const char *message);
|
||||
void info(const QString &message);
|
||||
|
||||
QString GetUserDir();
|
||||
QString GetConfFile();
|
||||
QString GetEnvUserDir();
|
||||
|
||||
protected:
|
||||
SW_Log();
|
||||
~SW_Log();
|
||||
private:
|
||||
static QString m_appInfo;
|
||||
QString m_userDir;
|
||||
QString m_envUserDir;
|
||||
QString m_confFile;
|
||||
};
|
||||
#endif // SW_LOG_H
|
||||
@ -0,0 +1,97 @@
|
||||
/*----------------------------------------------------------------------------
|
||||
|
||||
NAME
|
||||
Utils.h
|
||||
|
||||
PURPOSE
|
||||
Defines for the general-purpose functions for the WinTab demos.
|
||||
|
||||
COPYRIGHT
|
||||
Copyright (c) Wacom Company, Ltd. 2014 All Rights Reserved
|
||||
All rights reserved.
|
||||
|
||||
The text and information contained in this file may be freely used,
|
||||
copied, or distributed without compensation or licensing restrictions.
|
||||
|
||||
---------------------------------------------------------------------------- */
|
||||
#pragma once
|
||||
|
||||
#include <windows.h>
|
||||
#include <stdio.h>
|
||||
#include <assert.h>
|
||||
#include <stdarg.h>
|
||||
|
||||
#include "wintab.h" // NOTE: get from wactab header package
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
#define WACOM_DEBUG
|
||||
|
||||
// Ignore warnings about using unsafe string functions.
|
||||
#pragma warning( disable : 4996 )
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
// Function pointers to Wintab functions exported from wintab32.dll.
|
||||
typedef UINT ( API * WTINFOW ) ( UINT, UINT, LPVOID );
|
||||
typedef UINT(API * WTINFOA) (UINT, UINT, LPVOID);
|
||||
typedef HCTX ( API * WTOPENW )( HWND, LPLOGCONTEXTW, BOOL );
|
||||
typedef BOOL ( API * WTGETW ) ( HCTX, LPLOGCONTEXT );
|
||||
typedef BOOL ( API * WTSETW ) ( HCTX, LPLOGCONTEXT );
|
||||
typedef BOOL ( API * WTCLOSE ) ( HCTX );
|
||||
typedef BOOL ( API * WTENABLE ) ( HCTX, BOOL );
|
||||
typedef BOOL ( API * WTPACKET ) ( HCTX, UINT, LPVOID );
|
||||
typedef BOOL ( API * WTOVERLAP ) ( HCTX, BOOL );
|
||||
typedef BOOL ( API * WTSAVE ) ( HCTX, LPVOID );
|
||||
typedef BOOL ( API * WTCONFIG ) ( HCTX, HWND );
|
||||
typedef HCTX ( API * WTRESTORE ) ( HWND, LPVOID, BOOL );
|
||||
typedef BOOL ( API * WTEXTSET ) ( HCTX, UINT, LPVOID );
|
||||
typedef BOOL ( API * WTEXTGET ) ( HCTX, UINT, LPVOID );
|
||||
typedef BOOL ( API * WTQUEUESIZESET ) ( HCTX, int );
|
||||
typedef BOOL(API * WTQUEUESIZEGET) (HCTX);
|
||||
typedef int ( API * WTDATAPEEK ) ( HCTX, UINT, UINT, int, LPVOID, LPINT);
|
||||
typedef int ( API * WTPACKETSGET ) (HCTX, int, LPVOID);
|
||||
|
||||
// TODO - add more wintab32 function defs as needed
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
// Loaded Wintab32 API functions.
|
||||
extern HINSTANCE ghWintab;
|
||||
|
||||
extern WTINFOW gpWTInfoW;
|
||||
extern WTINFOA gpWTInfoA;
|
||||
extern WTOPENW gpWTOpenW;
|
||||
extern WTGETW gpWTGetW;
|
||||
extern WTSETW gpWTSetW;
|
||||
extern WTCLOSE gpWTClose;
|
||||
extern WTPACKET gpWTPacket;
|
||||
extern WTENABLE gpWTEnable;
|
||||
extern WTOVERLAP gpWTOverlap;
|
||||
extern WTSAVE gpWTSave;
|
||||
extern WTCONFIG gpWTConfig;
|
||||
extern WTRESTORE gpWTRestore;
|
||||
extern WTEXTSET gpWTExtSet;
|
||||
extern WTEXTGET gpWTExtGet;
|
||||
extern WTQUEUESIZESET gpWTQueueSizeSet;
|
||||
extern WTQUEUESIZEGET gpWTQueueSizeGet;
|
||||
extern WTDATAPEEK gpWTDataPeek;
|
||||
extern WTPACKETSGET gpWTPacketsGet;
|
||||
|
||||
// TODO - add more wintab32 function pointers as needed
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
BOOL LoadWintab( void );
|
||||
void UnloadWintab( void );
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
#ifdef WACOM_DEBUG
|
||||
|
||||
void WacomTrace( char *lpszFormat, ...);
|
||||
|
||||
#define WACOM_ASSERT( x ) assert( x )
|
||||
#define WACOM_TRACE(...) WacomTrace(__VA_ARGS__)
|
||||
#else
|
||||
#define WACOM_TRACE(...)
|
||||
#define WACOM_ASSERT( x )
|
||||
|
||||
#endif // WACOM_DEBUG
|
||||
|
||||
@ -0,0 +1,930 @@
|
||||
/* -------------------------------- 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 (c) Wacom Company, Ltd. 2010 All Rights Reserved
|
||||
with portions copyright 1991-1998 by LCS/Telegraphics.
|
||||
------------------------------------------------------------------------------*/
|
||||
|
||||
#ifndef _INC_WINTAB /* prevent multiple includes */
|
||||
#define _INC_WINTAB
|
||||
#include <windows.h>
|
||||
#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_PACKETEXT(b) ((b)+8) /* 1.4 */
|
||||
#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_PACKETEXT _WT_PACKETEXT(WT_DEFBASE) /* 1.4 */
|
||||
#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;
|
||||
|
||||
tagAXIS()
|
||||
{
|
||||
axMin = 0;
|
||||
axMax = 0;
|
||||
axUnits = 0;
|
||||
axResolution = 0;
|
||||
}
|
||||
} 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_TYPE 20 /* 1.2 */
|
||||
#define CSR_MAX 20
|
||||
|
||||
#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_DEVICES 110 /* Allow 100 cursors */
|
||||
#define EXT_MAX 210 /* Allow 100 devices */
|
||||
|
||||
#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 */
|
||||
#define WTX_EXPKEYS 5 /* ExpressKeys; 1.3 - DEPRECATED: see WTX_EXPKEYS2 */
|
||||
#define WTX_TOUCHSTRIP 6 /* TouchStrips; 1.4 */
|
||||
#define WTX_TOUCHRING 7 /* TouchRings; 1.4 */
|
||||
#define WTX_EXPKEYS2 8 /* ExpressKeys; 1.4 */
|
||||
|
||||
typedef struct tagXBTNMASK {
|
||||
BYTE xBtnDnMask[32];
|
||||
BYTE xBtnUpMask[32];
|
||||
} XBTNMASK;
|
||||
|
||||
typedef struct tagTILT { /* 1.1 */
|
||||
int tiltX;
|
||||
int tiltY;
|
||||
} TILT;
|
||||
|
||||
typedef struct tagEXTENSIONBASE { /* 1.4 */
|
||||
HCTX nContext;
|
||||
UINT nStatus;
|
||||
DWORD nTime;
|
||||
UINT nSerialNumber;
|
||||
} EXTENSIONBASE;
|
||||
|
||||
typedef struct tagEXPKEYSDATA { /* 1.4 */
|
||||
BYTE nTablet;
|
||||
BYTE nControl;
|
||||
BYTE nLocation;
|
||||
BYTE nReserved;
|
||||
DWORD nState;
|
||||
} EXPKEYSDATA;
|
||||
|
||||
typedef struct tagSLIDERDATA { /* 1.4 */
|
||||
BYTE nTablet;
|
||||
BYTE nControl;
|
||||
BYTE nMode;
|
||||
BYTE nReserved;
|
||||
DWORD nPosition;
|
||||
} SLIDERDATA;
|
||||
|
||||
typedef struct tagEXTPROPERTY { /* 1.4 */
|
||||
BYTE version; // Structure version, 0 for now
|
||||
BYTE tabletIndex; // 0-based index for tablet
|
||||
BYTE controlIndex; // 0-based index for control
|
||||
BYTE functionIndex; // 0-based index for control's sub-function
|
||||
WORD propertyID; // property ID
|
||||
WORD reserved; // DWORD-alignment filler
|
||||
DWORD dataSize; // number of bytes in data[] buffer
|
||||
BYTE data[1]; // raw data
|
||||
} EXTPROPERTY;
|
||||
|
||||
#define TABLET_PROPERTY_CONTROLCOUNT 0 // UINT32: number of physical controls on tablet
|
||||
#define TABLET_PROPERTY_FUNCCOUNT 1 // UINT32: number of functions of control
|
||||
#define TABLET_PROPERTY_AVAILABLE 2 // BOOL: control/mode is available for override
|
||||
#define TABLET_PROPERTY_MIN 3 // UINT32: minimum value
|
||||
#define TABLET_PROPERTY_MAX 4 // UINT32: maximum value
|
||||
#define TABLET_PROPERTY_OVERRIDE 5 // BOOL: control is overridden
|
||||
#define TABLET_PROPERTY_OVERRIDE_NAME 6 // UTF-8: Displayable name when control is overridden
|
||||
#define TABLET_PROPERTY_LOCATION 11 // UINT32: Physical location of control (see TABLET_LOC_*)
|
||||
|
||||
#define TABLET_LOC_LEFT 0
|
||||
#define TABLET_LOC_RIGHT 1
|
||||
#define TABLET_LOC_TOP 2
|
||||
#define TABLET_LOC_BOTTOM 3
|
||||
#define TABLET_LOC_TRANSDUCER 4
|
||||
|
||||
#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 */
|
||||
|
||||
Loading…
Reference in new issue