add wacom support on Windows
This commit is contained in:
@@ -71,22 +71,22 @@
|
||||
<PropertyGroup Label="UserMacros" />
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
<LinkIncremental>true</LinkIncremental>
|
||||
<IncludePath>libs\glm;libs\glew-2.0.0\include;libs\stb;libs\tinyxml2;libs\yoga;libs\curl-win\include;$(IncludePath)</IncludePath>
|
||||
<IncludePath>libs\glm;libs\glew-2.0.0\include;libs\stb;libs\tinyxml2;libs\yoga;libs\curl-win\include;libs\jpeg;libs\wacom;$(IncludePath)</IncludePath>
|
||||
<LibraryPath>libs\curl-win\lib\dll-$(Configuration)-$(PlatformShortName);libs\glew-2.0.0\lib\Release\$(Platform);$(LibraryPath)</LibraryPath>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
|
||||
<LinkIncremental>true</LinkIncremental>
|
||||
<IncludePath>libs\glm;libs\glew-2.0.0\include;libs\stb;libs\tinyxml2;libs\yoga;libs\curl-win\include;$(IncludePath)</IncludePath>
|
||||
<IncludePath>libs\glm;libs\glew-2.0.0\include;libs\stb;libs\tinyxml2;libs\yoga;libs\curl-win\include;libs\jpeg;libs\wacom;$(IncludePath)</IncludePath>
|
||||
<LibraryPath>libs\curl-win\lib\dll-$(Configuration)-$(PlatformShortName);libs\glew-2.0.0\lib\Release\$(Platform);$(LibraryPath)</LibraryPath>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
<IncludePath>libs\glm;libs\glew-2.0.0\include;libs\stb;libs\tinyxml2;libs\yoga;libs\curl-win\include;$(IncludePath)</IncludePath>
|
||||
<IncludePath>libs\glm;libs\glew-2.0.0\include;libs\stb;libs\tinyxml2;libs\yoga;libs\curl-win\include;libs\jpeg;libs\wacom;$(IncludePath)</IncludePath>
|
||||
<LibraryPath>libs\curl-win\lib\dll-$(Configuration)-$(PlatformShortName);libs\glew-2.0.0\lib\Release\$(Platform);$(LibraryPath)</LibraryPath>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
|
||||
<LinkIncremental>false</LinkIncremental>
|
||||
<IncludePath>libs\glm;libs\glew-2.0.0\include;libs\stb;libs\tinyxml2;libs\yoga;libs\curl-win\include;$(IncludePath)</IncludePath>
|
||||
<IncludePath>libs\glm;libs\glew-2.0.0\include;libs\stb;libs\tinyxml2;libs\yoga;libs\curl-win\include;libs\jpeg;libs\wacom;$(IncludePath)</IncludePath>
|
||||
<LibraryPath>libs\curl-win\lib\dll-$(Configuration)-$(PlatformShortName);libs\glew-2.0.0\lib\Release\$(Platform);$(LibraryPath)</LibraryPath>
|
||||
</PropertyGroup>
|
||||
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
|
||||
@@ -201,12 +201,31 @@
|
||||
<ClCompile Include="engine\shape.cpp" />
|
||||
<ClCompile Include="engine\texture.cpp" />
|
||||
<ClCompile Include="engine\util.cpp" />
|
||||
<ClCompile Include="engine\wacom.cpp" />
|
||||
<ClCompile Include="libs\jpeg\jpgd.cpp">
|
||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">NotUsing</PrecompiledHeader>
|
||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">NotUsing</PrecompiledHeader>
|
||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">NotUsing</PrecompiledHeader>
|
||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">NotUsing</PrecompiledHeader>
|
||||
</ClCompile>
|
||||
<ClCompile Include="libs\jpeg\jpge.cpp">
|
||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">NotUsing</PrecompiledHeader>
|
||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">NotUsing</PrecompiledHeader>
|
||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">NotUsing</PrecompiledHeader>
|
||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">NotUsing</PrecompiledHeader>
|
||||
</ClCompile>
|
||||
<ClCompile Include="libs\tinyxml2\tinyxml2.cpp">
|
||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">NotUsing</PrecompiledHeader>
|
||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">NotUsing</PrecompiledHeader>
|
||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">NotUsing</PrecompiledHeader>
|
||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">NotUsing</PrecompiledHeader>
|
||||
</ClCompile>
|
||||
<ClCompile Include="libs\wacom\WinTab\Utils.cpp">
|
||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Use</PrecompiledHeader>
|
||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Use</PrecompiledHeader>
|
||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Use</PrecompiledHeader>
|
||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Use</PrecompiledHeader>
|
||||
</ClCompile>
|
||||
<ClCompile Include="libs\yoga\yoga\YGNodeList.c">
|
||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">NotUsing</PrecompiledHeader>
|
||||
<PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">NotUsing</PrecompiledHeader>
|
||||
@@ -264,6 +283,18 @@
|
||||
<ClInclude Include="engine\shape.h" />
|
||||
<ClInclude Include="engine\texture.h" />
|
||||
<ClInclude Include="engine\util.h" />
|
||||
<ClInclude Include="engine\wacom.h" />
|
||||
<ClInclude Include="libs\jpeg\jpgd.h" />
|
||||
<ClInclude Include="libs\jpeg\jpge.h" />
|
||||
<ClInclude Include="libs\tinyxml2\tinyxml2.h" />
|
||||
<ClInclude Include="libs\wacom\WinTab\MSGPACK.H" />
|
||||
<ClInclude Include="libs\wacom\WinTab\PKTDEF.H" />
|
||||
<ClInclude Include="libs\wacom\WinTab\Utils.h" />
|
||||
<ClInclude Include="libs\wacom\WinTab\WINTAB.H" />
|
||||
<ClInclude Include="libs\yoga\yoga\YGEnums.h" />
|
||||
<ClInclude Include="libs\yoga\yoga\YGMacros.h" />
|
||||
<ClInclude Include="libs\yoga\yoga\YGNodeList.h" />
|
||||
<ClInclude Include="libs\yoga\yoga\Yoga.h" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
|
||||
<ImportGroup Label="ExtensionTargets">
|
||||
|
||||
@@ -19,6 +19,21 @@
|
||||
<Filter Include="Header Files\ui">
|
||||
<UniqueIdentifier>{2c3e7ce5-d3f4-4731-b05f-5e288c7e6e63}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Source Files\libs">
|
||||
<UniqueIdentifier>{6d64b115-02d1-43e0-86c8-c8212f51162d}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Source Files\libs\jpeg">
|
||||
<UniqueIdentifier>{dc178d53-6a6d-4a18-a93c-d4994340515f}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Source Files\libs\WinTab">
|
||||
<UniqueIdentifier>{54dc9f46-d2e0-466c-90d2-eb5d72d5799d}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Source Files\libs\yoga">
|
||||
<UniqueIdentifier>{a4a12057-835e-47ff-be4d-ce58b36cecf5}</UniqueIdentifier>
|
||||
</Filter>
|
||||
<Filter Include="Source Files\libs\tinyxml2">
|
||||
<UniqueIdentifier>{6fe315aa-e2b9-4f01-8291-683a5fda123b}</UniqueIdentifier>
|
||||
</Filter>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="engine\app.cpp">
|
||||
@@ -42,15 +57,6 @@
|
||||
<ClCompile Include="engine\pch.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="libs\tinyxml2\tinyxml2.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="libs\yoga\yoga\YGNodeList.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="libs\yoga\yoga\Yoga.c">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="engine\font.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
@@ -168,6 +174,27 @@
|
||||
<ClCompile Include="engine\app_events.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="libs\jpeg\jpgd.cpp">
|
||||
<Filter>Source Files\libs\jpeg</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="libs\jpeg\jpge.cpp">
|
||||
<Filter>Source Files\libs\jpeg</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="libs\yoga\yoga\YGNodeList.c">
|
||||
<Filter>Source Files\libs\yoga</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="libs\yoga\yoga\Yoga.c">
|
||||
<Filter>Source Files\libs\yoga</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="libs\tinyxml2\tinyxml2.cpp">
|
||||
<Filter>Source Files\libs\tinyxml2</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="engine\wacom.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="libs\wacom\WinTab\Utils.cpp">
|
||||
<Filter>Source Files\libs\WinTab</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="engine\app.h">
|
||||
@@ -299,5 +326,41 @@
|
||||
<ClInclude Include="engine\node_scroll.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="libs\jpeg\jpgd.h">
|
||||
<Filter>Source Files\libs\jpeg</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="libs\jpeg\jpge.h">
|
||||
<Filter>Source Files\libs\jpeg</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="libs\yoga\yoga\YGMacros.h">
|
||||
<Filter>Source Files\libs\yoga</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="libs\yoga\yoga\YGNodeList.h">
|
||||
<Filter>Source Files\libs\yoga</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="libs\yoga\yoga\Yoga.h">
|
||||
<Filter>Source Files\libs\yoga</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="libs\yoga\yoga\YGEnums.h">
|
||||
<Filter>Source Files\libs\yoga</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="libs\tinyxml2\tinyxml2.h">
|
||||
<Filter>Source Files\libs\tinyxml2</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="engine\wacom.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="libs\wacom\WinTab\PKTDEF.H">
|
||||
<Filter>Source Files\libs\WinTab</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="libs\wacom\WinTab\Utils.h">
|
||||
<Filter>Source Files\libs\WinTab</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="libs\wacom\WinTab\WINTAB.H">
|
||||
<Filter>Source Files\libs\WinTab</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="libs\wacom\WinTab\MSGPACK.H">
|
||||
<Filter>Source Files\libs\WinTab</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
@@ -369,7 +369,8 @@ HGLRC hRC;
|
||||
wchar_t* className;
|
||||
bool keys[256];
|
||||
|
||||
#include <WbemCli.h>
|
||||
#include <WbemCli.h>
|
||||
#include "wacom.h"
|
||||
|
||||
int read_WMI_info()
|
||||
{
|
||||
@@ -585,6 +586,7 @@ int main()
|
||||
App::I.init();
|
||||
|
||||
ShowWindow(hWnd, SW_NORMAL);
|
||||
WacomTablet::I.init(hWnd);
|
||||
|
||||
MSG msg;
|
||||
bool running = true;
|
||||
@@ -618,6 +620,7 @@ int main()
|
||||
}
|
||||
|
||||
// Clean up
|
||||
WacomTablet::I.terminate();
|
||||
DestroyWindow(hWnd);
|
||||
UnregisterClass(className, hInst);
|
||||
}
|
||||
@@ -635,6 +638,15 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)
|
||||
App::I.update(0.f);
|
||||
SwapBuffers(hDC);
|
||||
break;
|
||||
case WM_ACTIVATE:
|
||||
{
|
||||
int active = GET_WM_ACTIVATE_STATE(wp, lp);
|
||||
WacomTablet::I.set_focus(active);
|
||||
break;
|
||||
}
|
||||
case WT_PACKET:
|
||||
WacomTablet::I.handle_message(hWnd, msg, wp, lp);
|
||||
break;
|
||||
case WM_KEYDOWN:
|
||||
keys[wp] = true;
|
||||
App::I.key_down(convert_key((int)wp));
|
||||
@@ -647,10 +659,10 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)
|
||||
App::I.key_char((int)wp);
|
||||
break;
|
||||
case WM_MOUSEMOVE:
|
||||
App::I.mouse_move((float)GET_X_LPARAM(lp), (float)GET_Y_LPARAM(lp));
|
||||
App::I.mouse_move((float)GET_X_LPARAM(lp), (float)GET_Y_LPARAM(lp), WacomTablet::I.get_pressure());
|
||||
break;
|
||||
case WM_LBUTTONDOWN:
|
||||
App::I.mouse_down(0, (float)GET_X_LPARAM(lp), (float)GET_Y_LPARAM(lp));
|
||||
App::I.mouse_down(0, (float)GET_X_LPARAM(lp), (float)GET_Y_LPARAM(lp), WacomTablet::I.get_pressure());
|
||||
SetCapture(hWnd);
|
||||
break;
|
||||
case WM_LBUTTONUP:
|
||||
@@ -658,7 +670,7 @@ LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp)
|
||||
ReleaseCapture();
|
||||
break;
|
||||
case WM_RBUTTONDOWN:
|
||||
App::I.mouse_down(1, (float)GET_X_LPARAM(lp), (float)GET_Y_LPARAM(lp));
|
||||
App::I.mouse_down(1, (float)GET_X_LPARAM(lp), (float)GET_Y_LPARAM(lp), 1.f);
|
||||
SetCapture(hWnd);
|
||||
break;
|
||||
case WM_RBUTTONUP:
|
||||
|
||||
182
engine/wacom.cpp
Normal file
182
engine/wacom.cpp
Normal file
@@ -0,0 +1,182 @@
|
||||
#include "pch.h"
|
||||
#include "log.h"
|
||||
#include "wacom.h"
|
||||
|
||||
WacomTablet WacomTablet::I;
|
||||
|
||||
void WacomTablet::set_focus(int activate)
|
||||
{
|
||||
/* if switching in the middle, disable the region */
|
||||
if (g_hCtx)
|
||||
{
|
||||
gpWTEnable(g_hCtx, activate);
|
||||
if (g_hCtx && activate)
|
||||
{
|
||||
gpWTOverlap(g_hCtx, TRUE);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
HCTX WacomTablet::TabletInit(HWND hWnd)
|
||||
{
|
||||
HCTX hctx = NULL;
|
||||
UINT wDevice = 0;
|
||||
UINT wExtX = 0;
|
||||
UINT wExtY = 0;
|
||||
UINT wWTInfoRetVal = 0;
|
||||
AXIS TabletX = { 0 };
|
||||
AXIS TabletY = { 0 };
|
||||
|
||||
// Set option to move system cursor before getting default system context.
|
||||
glogContext.lcOptions |= CXO_SYSTEM;
|
||||
|
||||
// Open default system context so that we can get tablet data
|
||||
// in screen coordinates (not tablet coordinates).
|
||||
wWTInfoRetVal = gpWTInfoA(WTI_DEFSYSCTX, 0, &glogContext);
|
||||
assert(wWTInfoRetVal == sizeof(LOGCONTEXTA));
|
||||
|
||||
assert(glogContext.lcOptions & CXO_SYSTEM);
|
||||
|
||||
// modify the digitizing region
|
||||
sprintf_s(glogContext.lcName, "PanoPainter Digitizing %x", (unsigned int)GetModuleHandle(0));
|
||||
|
||||
// We process WT_PACKET (CXO_MESSAGES) messages.
|
||||
glogContext.lcOptions |= CXO_MESSAGES;
|
||||
|
||||
// What data items we want to be included in the tablet packets
|
||||
glogContext.lcPktData = PACKETDATA;
|
||||
|
||||
// Which packet items should show change in value since the last
|
||||
// packet (referred to as 'relative' data) and which items
|
||||
// should be 'absolute'.
|
||||
glogContext.lcPktMode = PACKETMODE;
|
||||
|
||||
// This bitfield determines whether or not this context will receive
|
||||
// a packet when a value for each packet field changes. This is not
|
||||
// supported by the Intuos Wintab. Your context will always receive
|
||||
// packets, even if there has been no change in the data.
|
||||
glogContext.lcMoveMask = PACKETDATA;
|
||||
|
||||
// Which buttons events will be handled by this context. lcBtnMask
|
||||
// is a bitfield with one bit per button.
|
||||
glogContext.lcBtnUpMask = glogContext.lcBtnDnMask;
|
||||
|
||||
// Set the entire tablet as active
|
||||
wWTInfoRetVal = gpWTInfoA(WTI_DEVICES, DVC_X, &TabletX);
|
||||
assert(wWTInfoRetVal == sizeof(AXIS));
|
||||
|
||||
wWTInfoRetVal = gpWTInfoA(WTI_DEVICES, DVC_Y, &TabletY);
|
||||
assert(wWTInfoRetVal == sizeof(AXIS));
|
||||
|
||||
// Pressure resolution
|
||||
wWTInfoRetVal = gpWTInfoA(WTI_DEVICES, DVC_NPRESSURE, &TabletPressure);
|
||||
assert(wWTInfoRetVal == sizeof(AXIS));
|
||||
LOG("Tablet pressure: %d", TabletPressure.axMin);
|
||||
|
||||
wWTInfoRetVal = gpWTInfoA(WTI_DEVICES, DVC_NAME, 0);
|
||||
if (wWTInfoRetVal > 0)
|
||||
{
|
||||
CHAR* TabletName = new CHAR[wWTInfoRetVal];
|
||||
wWTInfoRetVal = gpWTInfoA(WTI_DEVICES, DVC_NAME, TabletName);
|
||||
LOG("Tablet: %s", TabletName);
|
||||
delete TabletName;
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
glogContext.lcInOrgX = 0;
|
||||
glogContext.lcInOrgY = 0;
|
||||
glogContext.lcInExtX = TabletX.axMax;
|
||||
glogContext.lcInExtY = TabletY.axMax;
|
||||
|
||||
// Guarantee the output coordinate space to be in screen coordinates.
|
||||
glogContext.lcOutOrgX = GetSystemMetrics( SM_XVIRTUALSCREEN );
|
||||
glogContext.lcOutOrgY = GetSystemMetrics( SM_YVIRTUALSCREEN );
|
||||
glogContext.lcOutExtX = GetSystemMetrics( SM_CXSCREEN / *SM_CXVIRTUALSCREEN* / ); //SM_CXSCREEN );
|
||||
|
||||
// In Wintab, the tablet origin is lower left. Move origin to upper left
|
||||
// so that it coincides with screen origin.
|
||||
glogContext.lcOutExtY = -GetSystemMetrics( SM_CYSCREEN / *SM_CYVIRTUALSCREEN* / ); //SM_CYSCREEN );
|
||||
|
||||
*/
|
||||
// Leave the system origin and extents as received:
|
||||
// lcSysOrgX, lcSysOrgY, lcSysExtX, lcSysExtY
|
||||
|
||||
// open the region
|
||||
// The Wintab spec says we must open the context disabled if we are
|
||||
// using cursor masks.
|
||||
hctx = gpWTOpenA(hWnd, &glogContext, FALSE);
|
||||
|
||||
LOG("HCTX: %i", (int)hctx);
|
||||
|
||||
return hctx;
|
||||
}
|
||||
|
||||
bool WacomTablet::init(HWND hWnd)
|
||||
{
|
||||
// Init WinTab
|
||||
if (LoadWintab())
|
||||
{
|
||||
/* check if WinTab available. */
|
||||
if (gpWTInfoA(0, 0, NULL))
|
||||
{
|
||||
g_hCtx = TabletInit(hWnd);
|
||||
if (!g_hCtx)
|
||||
{
|
||||
LOG("Could Not Open Tablet Context.");
|
||||
return false;
|
||||
}
|
||||
else
|
||||
{
|
||||
set_focus(true);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
LOG("WinTab Services Not Available.");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
LOG("Unable to initialize Wacom WinTab");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
void WacomTablet::terminate()
|
||||
{
|
||||
UnloadWintab();
|
||||
}
|
||||
|
||||
void WacomTablet::handle_message(HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
PACKET pkt;
|
||||
static POINT ptOld, ptNew;
|
||||
static UINT prsOld, prsNew;
|
||||
|
||||
if (gpWTPacket((HCTX)lParam, wParam, &pkt))
|
||||
{
|
||||
if (HIWORD(pkt.pkButtons) == TBN_DOWN)
|
||||
m_pen_down = true;
|
||||
if (HIWORD(pkt.pkButtons) == TBN_UP)
|
||||
m_pen_down = false;
|
||||
|
||||
ptOld = ptNew;
|
||||
prsOld = prsNew;
|
||||
|
||||
ptNew.x = pkt.pkX;
|
||||
ptNew.y = pkt.pkY;
|
||||
|
||||
prsNew = pkt.pkNormalPressure;
|
||||
|
||||
m_pen_pos = { pkt.pkX, pkt.pkX };
|
||||
m_pen_pres = (float)pkt.pkNormalPressure / (float)TabletPressure.axMax;
|
||||
}
|
||||
}
|
||||
|
||||
float WacomTablet::get_pressure() const
|
||||
{
|
||||
return m_pen_down ? m_pen_pres : 1.f;
|
||||
}
|
||||
29
engine/wacom.h
Normal file
29
engine/wacom.h
Normal file
@@ -0,0 +1,29 @@
|
||||
#pragma once
|
||||
|
||||
#include "WinTab/msgpack.h"
|
||||
#include "WinTab/wintab.h"
|
||||
#define PACKETDATA (PK_X | PK_Y | PK_BUTTONS | PK_NORMAL_PRESSURE)
|
||||
#define PACKETMODE PK_BUTTONS
|
||||
#include "WinTab/pktdef.h"
|
||||
#include "WinTab/Utils.h"
|
||||
|
||||
class WacomTablet
|
||||
{
|
||||
HCTX g_hCtx = NULL;
|
||||
AXIS TabletPressure = { 0 };
|
||||
LOGCONTEXTA glogContext = { 0 };
|
||||
glm::vec2 m_pen_pos{ 0 };
|
||||
float m_pen_pres{ 1 };
|
||||
bool m_pen_down = false;
|
||||
int m_pen_idle = 0;
|
||||
bool m_mouse_down = false;
|
||||
|
||||
HCTX TabletInit(HWND hWnd);
|
||||
public:
|
||||
static WacomTablet I;
|
||||
bool init(HWND hWnd);
|
||||
void terminate();
|
||||
void handle_message(HWND hwnd, UINT Msg, WPARAM wParam, LPARAM lParam);
|
||||
void set_focus(int activate);
|
||||
float get_pressure() const;
|
||||
};
|
||||
28
libs/wacom/WinTab/MSGPACK.H
Normal file
28
libs/wacom/WinTab/MSGPACK.H
Normal file
@@ -0,0 +1,28 @@
|
||||
/* ------------------------------- msgpack.h -------------------------------- */
|
||||
/*------------------------------------------------------------------------------
|
||||
Selected message unpacking macros from windowsx.h
|
||||
to circumvent compile-time memory headaches.
|
||||
|
||||
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.
|
||||
------------------------------------------------------------------------------*/
|
||||
#ifdef WIN32
|
||||
#define GET_WM_ACTIVATE_STATE(wp, lp) LOWORD(wp)
|
||||
#define GET_WM_COMMAND_ID(wp, lp) LOWORD(wp)
|
||||
#define GET_WM_COMMAND_HWND(wp, lp) (HWND)(lp)
|
||||
#define GET_WM_COMMAND_CMD(wp, lp) HIWORD(wp)
|
||||
#define FORWARD_WM_COMMAND(hwnd, id, hwndCtl, codeNotify, fn) \
|
||||
(void)(fn)((hwnd), WM_COMMAND, MAKEWPARAM((UINT)(id),(UINT)(codeNotify)), (LPARAM)(HWND)(hwndCtl))
|
||||
/* -------------------------------------------------------------------------- */
|
||||
#else
|
||||
#define GET_WM_ACTIVATE_STATE(wp, lp) (wp)
|
||||
#define GET_WM_COMMAND_ID(wp, lp) (wp)
|
||||
#define GET_WM_COMMAND_HWND(wp, lp) (HWND)LOWORD(lp)
|
||||
#define GET_WM_COMMAND_CMD(wp, lp) HIWORD(lp)
|
||||
#define FORWARD_WM_COMMAND(hwnd, id, hwndCtl, codeNotify, fn) \
|
||||
(void)(fn)((hwnd), WM_COMMAND, (WPARAM)(int)(id), MAKELPARAM((UINT)(hwndCtl), (codeNotify)))
|
||||
/* -------------------------------------------------------------------------- */
|
||||
#endif
|
||||
262
libs/wacom/WinTab/PKTDEF.H
Normal file
262
libs/wacom/WinTab/PKTDEF.H
Normal file
@@ -0,0 +1,262 @@
|
||||
/* -------------------------------- 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 (c) Wacom Company, Ltd. 2010 All Rights Reserved
|
||||
with portions 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 data for extensions that report thier data in the packet,
|
||||
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.
|
||||
5. If using extension data for extensions that report thier data in the extensions packet,
|
||||
do the following additional steps for each extension:
|
||||
a. Before including pktdef.h, define <PACKETNAME>PACKET<EXTENSION> as PKEXT_ABSOLUTE.
|
||||
b. The generated extension structure typedef will contain a field for the
|
||||
extension data.
|
||||
c. Call WTExtSet to activate the extention. Use the context id in the WT_PACKETEXT
|
||||
message to retrieve the extension data <PACKETNAME>PACKETEXT.
|
||||
|
||||
|
||||
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 __TAGE __IFX(tag,PACKETEXT)
|
||||
#define __TYPESE __PFX(PACKETEXT), * __IFX(P,PACKETEXT), NEAR * __IFX(NP,PACKETEXT), FAR * __IFX(LP,PACKETEXT)
|
||||
|
||||
#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 ;
|
||||
|
||||
#ifndef NOWTEXTENSIONS
|
||||
typedef struct __TAGE {
|
||||
EXTENSIONBASE pkBase;
|
||||
|
||||
#if (__EXT(EXPKEYS) == PKEXT_RELATIVE) || (__EXT(EXPKEYS) == PKEXT_ABSOLUTE)
|
||||
EXPKEYSDATA pkExpKeys; /* 1.4 */
|
||||
#endif
|
||||
#if (__EXT(TOUCHSTRIP) == PKEXT_RELATIVE) || (__EXT(TOUCHSTRIP) == PKEXT_ABSOLUTE)
|
||||
SLIDERDATA pkTouchStrip; /* 1.4 */
|
||||
#endif
|
||||
#if (__EXT(TOUCHRING) == PKEXT_RELATIVE) || (__EXT(TOUCHRING) == PKEXT_ABSOLUTE)
|
||||
SLIDERDATA pkTouchRing; /* 1.4 */
|
||||
#endif
|
||||
|
||||
} __TYPESE ;
|
||||
#endif
|
||||
|
||||
#undef PACKETNAME
|
||||
#undef __TAG
|
||||
#undef __TAGE
|
||||
#undef __TAG2
|
||||
#undef __TYPES
|
||||
#undef __TYPESE
|
||||
#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 */
|
||||
141
libs/wacom/WinTab/Utils.cpp
Normal file
141
libs/wacom/WinTab/Utils.cpp
Normal file
@@ -0,0 +1,141 @@
|
||||
/*----------------------------------------------------------------------------
|
||||
|
||||
NAME
|
||||
Utils.c
|
||||
|
||||
PURPOSE
|
||||
Some 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.
|
||||
|
||||
---------------------------------------------------------------------------- */
|
||||
#include "pch.h"
|
||||
#include "..\..\engine\log.h"
|
||||
#include "Utils.h"
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
HINSTANCE ghWintab = NULL;
|
||||
|
||||
WTINFOA gpWTInfoA = NULL;
|
||||
WTOPENA gpWTOpenA = NULL;
|
||||
WTGETA gpWTGetA = NULL;
|
||||
WTSETA gpWTSetA = NULL;
|
||||
WTCLOSE gpWTClose = NULL;
|
||||
WTPACKET gpWTPacket = NULL;
|
||||
WTENABLE gpWTEnable = NULL;
|
||||
WTOVERLAP gpWTOverlap = NULL;
|
||||
WTSAVE gpWTSave = NULL;
|
||||
WTCONFIG gpWTConfig = NULL;
|
||||
WTRESTORE gpWTRestore = NULL;
|
||||
WTEXTSET gpWTExtSet = NULL;
|
||||
WTEXTGET gpWTExtGet = NULL;
|
||||
WTQUEUESIZESET gpWTQueueSizeSet = NULL;
|
||||
WTDATAPEEK gpWTDataPeek = NULL;
|
||||
WTPACKETSGET gpWTPacketsGet = NULL;
|
||||
WTMGROPEN gpWTMgrOpen = NULL;
|
||||
WTMGRCLOSE gpWTMgrClose = NULL;
|
||||
WTMGRDEFCONTEXT gpWTMgrDefContext = NULL;
|
||||
WTMGRDEFCONTEXTEX gpWTMgrDefContextEx = NULL;
|
||||
|
||||
// TODO - add more wintab32 function pointers as needed
|
||||
|
||||
#define GETPROCADDRESS(type, func) \
|
||||
gp##func = (type)GetProcAddress(ghWintab, #func); \
|
||||
if (!gp##func){ LOG("Error finding function "#func); UnloadWintab(); return FALSE; }
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
// Purpose
|
||||
// Find wintab32.dll and load it.
|
||||
// Find the exported functions we need from it.
|
||||
//
|
||||
// Returns
|
||||
// TRUE on success.
|
||||
// FALSE on failure.
|
||||
//
|
||||
BOOL LoadWintab( void )
|
||||
{
|
||||
// ghWintab = LoadLibraryA( "C:\\dev\\mainline\\Wacom\\Win\\Win32\\Debug\\Wacom_Tablet.dll" );
|
||||
// ghWintab = LoadLibraryA( "C:\\dev\\mainline\\Wacom\\Win\\Win32\\Debug\\Wintab32.dll" );
|
||||
ghWintab = LoadLibraryA( "Wintab32.dll" );
|
||||
|
||||
if ( !ghWintab )
|
||||
{
|
||||
DWORD err = GetLastError();
|
||||
LOG("LoadLibrary error: %i", err);
|
||||
LOG("Could not load Wintab32.dll");
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
// Explicitly find the exported Wintab functions in which we are interested.
|
||||
// We are using the ASCII, not unicode versions (where applicable).
|
||||
GETPROCADDRESS( WTOPENA, WTOpenA );
|
||||
GETPROCADDRESS( WTINFOA, WTInfoA );
|
||||
GETPROCADDRESS( WTGETA, WTGetA );
|
||||
GETPROCADDRESS( WTSETA, WTSetA );
|
||||
GETPROCADDRESS( WTPACKET, WTPacket );
|
||||
GETPROCADDRESS( WTCLOSE, WTClose );
|
||||
GETPROCADDRESS( WTENABLE, WTEnable );
|
||||
GETPROCADDRESS( WTOVERLAP, WTOverlap );
|
||||
GETPROCADDRESS( WTSAVE, WTSave );
|
||||
GETPROCADDRESS( WTCONFIG, WTConfig );
|
||||
GETPROCADDRESS( WTRESTORE, WTRestore );
|
||||
GETPROCADDRESS( WTEXTSET, WTExtSet );
|
||||
GETPROCADDRESS( WTEXTGET, WTExtGet );
|
||||
GETPROCADDRESS( WTQUEUESIZESET, WTQueueSizeSet );
|
||||
GETPROCADDRESS( WTDATAPEEK, WTDataPeek );
|
||||
GETPROCADDRESS( WTPACKETSGET, WTPacketsGet );
|
||||
GETPROCADDRESS( WTMGROPEN, WTMgrOpen );
|
||||
GETPROCADDRESS( WTMGRCLOSE, WTMgrClose );
|
||||
GETPROCADDRESS( WTMGRDEFCONTEXT, WTMgrDefContext );
|
||||
GETPROCADDRESS( WTMGRDEFCONTEXTEX, WTMgrDefContextEx );
|
||||
|
||||
|
||||
// TODO - don't forget to NULL out pointers in UnloadWintab().
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
// Purpose
|
||||
// Uninitializes use of wintab32.dll
|
||||
//
|
||||
// Returns
|
||||
// Nothing.
|
||||
//
|
||||
void UnloadWintab( void )
|
||||
{
|
||||
LOG( "UnloadWintab()" );
|
||||
|
||||
if ( ghWintab )
|
||||
{
|
||||
FreeLibrary( ghWintab );
|
||||
ghWintab = NULL;
|
||||
}
|
||||
|
||||
gpWTOpenA = NULL;
|
||||
gpWTClose = NULL;
|
||||
gpWTInfoA = NULL;
|
||||
gpWTPacket = NULL;
|
||||
gpWTEnable = NULL;
|
||||
gpWTOverlap = NULL;
|
||||
gpWTSave = NULL;
|
||||
gpWTConfig = NULL;
|
||||
gpWTGetA = NULL;
|
||||
gpWTSetA = NULL;
|
||||
gpWTRestore = NULL;
|
||||
gpWTExtSet = NULL;
|
||||
gpWTExtGet = NULL;
|
||||
gpWTQueueSizeSet = NULL;
|
||||
gpWTDataPeek = NULL;
|
||||
gpWTPacketsGet = NULL;
|
||||
gpWTMgrOpen = NULL;
|
||||
gpWTMgrClose = NULL;
|
||||
gpWTMgrDefContext = NULL;
|
||||
gpWTMgrDefContextEx = NULL;
|
||||
}
|
||||
88
libs/wacom/WinTab/Utils.h
Normal file
88
libs/wacom/WinTab/Utils.h
Normal file
@@ -0,0 +1,88 @@
|
||||
/*----------------------------------------------------------------------------
|
||||
|
||||
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 * WTINFOA ) ( UINT, UINT, LPVOID );
|
||||
typedef HCTX ( API * WTOPENA )( HWND, LPLOGCONTEXTA, BOOL );
|
||||
typedef BOOL ( API * WTGETA ) ( HCTX, LPLOGCONTEXT );
|
||||
typedef BOOL ( API * WTSETA ) ( 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 int ( API * WTDATAPEEK ) ( HCTX, UINT, UINT, int, LPVOID, LPINT);
|
||||
typedef int ( API * WTPACKETSGET ) (HCTX, int, LPVOID);
|
||||
typedef HMGR ( API * WTMGROPEN ) ( HWND, UINT );
|
||||
typedef BOOL ( API * WTMGRCLOSE ) ( HMGR );
|
||||
typedef HCTX ( API * WTMGRDEFCONTEXT ) ( HMGR, BOOL );
|
||||
typedef HCTX ( API * WTMGRDEFCONTEXTEX ) ( HMGR, UINT, BOOL );
|
||||
|
||||
// TODO - add more wintab32 function defs as needed
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
// Loaded Wintab32 API functions.
|
||||
extern HINSTANCE ghWintab;
|
||||
|
||||
extern WTINFOA gpWTInfoA;
|
||||
extern WTOPENA gpWTOpenA;
|
||||
extern WTGETA gpWTGetA;
|
||||
extern WTSETA gpWTSetA;
|
||||
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 WTDATAPEEK gpWTDataPeek;
|
||||
extern WTPACKETSGET gpWTPacketsGet;
|
||||
extern WTMGROPEN gpWTMgrOpen;
|
||||
extern WTMGRCLOSE gpWTMgrClose;
|
||||
extern WTMGRDEFCONTEXT gpWTMgrDefContext;
|
||||
extern WTMGRDEFCONTEXTEX gpWTMgrDefContextEx;
|
||||
|
||||
// TODO - add more wintab32 function pointers as needed
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////////
|
||||
BOOL LoadWintab( void );
|
||||
void UnloadWintab( void );
|
||||
920
libs/wacom/WinTab/WINTAB.H
Normal file
920
libs/wacom/WinTab/WINTAB.H
Normal file
@@ -0,0 +1,920 @@
|
||||
/* -------------------------------- 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
|
||||
|
||||
#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;
|
||||
} 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 */
|
||||
|
||||
Reference in New Issue
Block a user