Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'intern/ghost/intern/GHOST_Wintab.cpp')
-rw-r--r--intern/ghost/intern/GHOST_Wintab.cpp160
1 files changed, 159 insertions, 1 deletions
diff --git a/intern/ghost/intern/GHOST_Wintab.cpp b/intern/ghost/intern/GHOST_Wintab.cpp
index 2547a38c0d1..be1a0a4b314 100644
--- a/intern/ghost/intern/GHOST_Wintab.cpp
+++ b/intern/ghost/intern/GHOST_Wintab.cpp
@@ -11,7 +11,6 @@
GHOST_Wintab *GHOST_Wintab::loadWintab(HWND hwnd)
{
/* Load Wintab library if available. */
-
auto handle = unique_hmodule(::LoadLibrary("Wintab32.dll"), &::FreeLibrary);
if (!handle) {
return nullptr;
@@ -116,6 +115,11 @@ GHOST_Wintab *GHOST_Wintab::loadWintab(HWND hwnd)
}
}
+ int sanityQueueSize = queueSizeGet(hctx.get());
+ WINTAB_PRINTF("HCTX %p %s queueSize: %d, queueSizeGet: %d\n", hctx.get(), __func__, queueSize, sanityQueueSize);
+
+ WINTAB_PRINTF("Loaded Wintab context %p\n", hctx.get());
+
return new GHOST_Wintab(std::move(handle),
info,
get,
@@ -183,7 +187,17 @@ GHOST_Wintab::GHOST_Wintab(unique_hmodule handle,
m_pkts{queueSize}
{
m_fpInfo(WTI_INTERFACE, IFC_NDEVICES, &m_numDevices);
+ WINTAB_PRINTF("Wintab Devices: %d\n", m_numDevices);
+
updateCursorInfo();
+
+ /* Debug info. */
+ printContextDebugInfo();
+}
+
+GHOST_Wintab::~GHOST_Wintab()
+{
+ WINTAB_PRINTF("Closing Wintab context %p\n", m_context.get());
}
void GHOST_Wintab::enable()
@@ -249,6 +263,7 @@ void GHOST_Wintab::updateCursorInfo()
BOOL pressureSupport = m_fpInfo(WTI_DEVICES, DVC_NPRESSURE, &Pressure);
m_maxPressure = pressureSupport ? Pressure.axMax : 0;
+ WINTAB_PRINTF("HCTX %p %s maxPressure: %d\n", m_context.get(), __func__, m_maxPressure);
BOOL tiltSupport = m_fpInfo(WTI_DEVICES, DVC_ORIENTATION, &Orientation);
/* Check if tablet supports azimuth [0] and altitude [1], encoded in axResolution. */
@@ -259,6 +274,7 @@ void GHOST_Wintab::updateCursorInfo()
else {
m_maxAzimuth = m_maxAltitude = 0;
}
+ WINTAB_PRINTF("HCTX %p %s maxAzimuth: %d, maxAltitude: %d\n", m_context.get(), __func__, m_maxAzimuth, m_maxAltitude);
}
void GHOST_Wintab::processInfoChange(LPARAM lParam)
@@ -266,6 +282,7 @@ void GHOST_Wintab::processInfoChange(LPARAM lParam)
/* Update number of connected Wintab digitizers. */
if (LOWORD(lParam) == WTI_INTERFACE && HIWORD(lParam) == IFC_NDEVICES) {
m_fpInfo(WTI_INTERFACE, IFC_NDEVICES, &m_numDevices);
+ WINTAB_PRINTF("HCTX %p %s numDevices: %d\n", m_context.get(), __func__, m_numDevices);
}
}
@@ -456,3 +473,144 @@ bool GHOST_Wintab::testCoordinates(int sysX, int sysY, int wtX, int wtY)
return false;
}
}
+
+bool GHOST_Wintab::m_debug = false;
+
+void GHOST_Wintab::setDebug(bool debug)
+{
+ m_debug = debug;
+}
+
+bool GHOST_Wintab::getDebug()
+{
+ return m_debug;
+}
+
+void GHOST_Wintab::printContextDebugInfo()
+{
+ if (!m_debug) {
+ return;
+ }
+
+ /* Print button maps. */
+ BYTE logicalButtons[32] = {0};
+ BYTE systemButtons[32] = {0};
+ for (int i = 0; i < 3; i++) {
+ printf("initializeWintab cursor %d buttons\n", i);
+ UINT lbut = m_fpInfo(WTI_CURSORS + i, CSR_BUTTONMAP, &logicalButtons);
+ if (lbut) {
+ printf("%d", logicalButtons[0]);
+ for (int j = 1; j < lbut; j++) {
+ printf(", %d", logicalButtons[j]);
+ }
+ printf("\n");
+ }
+ else {
+ printf("logical button error\n");
+ }
+ UINT sbut = m_fpInfo(WTI_CURSORS + i, CSR_SYSBTNMAP, &systemButtons);
+ if (sbut) {
+ printf("%d", systemButtons[0]);
+ for (int j = 1; j < sbut; j++) {
+ printf(", %d", systemButtons[j]);
+ }
+ printf("\n");
+ }
+ else {
+ printf("system button error\n");
+ }
+ }
+
+ /* Print context information. */
+
+ /* Print open context constraints. */
+ UINT maxcontexts, opencontexts;
+ m_fpInfo(WTI_INTERFACE, IFC_NCONTEXTS, &maxcontexts);
+ m_fpInfo(WTI_STATUS, STA_CONTEXTS, &opencontexts);
+ printf("%u max contexts, %u open contexts\n", maxcontexts, opencontexts);
+
+ /* Print system information. */
+ printf("left: %d, top: %d, width: %d, height: %d\n",
+ ::GetSystemMetrics(SM_XVIRTUALSCREEN),
+ ::GetSystemMetrics(SM_YVIRTUALSCREEN),
+ ::GetSystemMetrics(SM_CXVIRTUALSCREEN),
+ ::GetSystemMetrics(SM_CYVIRTUALSCREEN));
+
+ auto printContextRanges = [](LOGCONTEXT &lc) {
+ printf("lcInOrgX: %d, lcInOrgY: %d, lcInExtX: %d, lcInExtY: %d\n",
+ lc.lcInOrgX,
+ lc.lcInOrgY,
+ lc.lcInExtX,
+ lc.lcInExtY);
+ printf("lcOutOrgX: %d, lcOutOrgY: %d, lcOutExtX: %d, lcOutExtY: %d\n",
+ lc.lcOutOrgX,
+ lc.lcOutOrgY,
+ lc.lcOutExtX,
+ lc.lcOutExtY);
+ printf("lcSysOrgX: %d, lcSysOrgY: %d, lcSysExtX: %d, lcSysExtY: %d\n",
+ lc.lcSysOrgX,
+ lc.lcSysOrgY,
+ lc.lcSysExtX,
+ lc.lcSysExtY);
+ };
+
+ LOGCONTEXT lc;
+
+ /* Print system context. */
+ m_fpInfo(WTI_DEFSYSCTX, 0, &lc);
+ printf("WTI_DEFSYSCTX\n");
+ printContextRanges(lc);
+
+ /* Print system context, manually populated. */
+ m_fpInfo(WTI_DEFSYSCTX, CTX_INORGX, &lc.lcInOrgX);
+ m_fpInfo(WTI_DEFSYSCTX, CTX_INORGY, &lc.lcInOrgY);
+ m_fpInfo(WTI_DEFSYSCTX, CTX_INEXTX, &lc.lcInExtX);
+ m_fpInfo(WTI_DEFSYSCTX, CTX_INEXTY, &lc.lcInExtY);
+ m_fpInfo(WTI_DEFSYSCTX, CTX_OUTORGX, &lc.lcOutOrgX);
+ m_fpInfo(WTI_DEFSYSCTX, CTX_OUTORGY, &lc.lcOutOrgY);
+ m_fpInfo(WTI_DEFSYSCTX, CTX_OUTEXTX, &lc.lcOutExtX);
+ m_fpInfo(WTI_DEFSYSCTX, CTX_OUTEXTY, &lc.lcOutExtY);
+ m_fpInfo(WTI_DEFSYSCTX, CTX_SYSORGX, &lc.lcSysOrgX);
+ m_fpInfo(WTI_DEFSYSCTX, CTX_SYSORGY, &lc.lcSysOrgY);
+ m_fpInfo(WTI_DEFSYSCTX, CTX_SYSEXTX, &lc.lcSysExtX);
+ m_fpInfo(WTI_DEFSYSCTX, CTX_SYSEXTY, &lc.lcSysExtY);
+ printf("WTI_DEFSYSCTX CTX_*\n");
+ printContextRanges(lc);
+
+ for (unsigned int i = 0; i < m_numDevices; i++) {
+ /* Print individual device system context. */
+ m_fpInfo(WTI_DSCTXS + i, 0, &lc);
+ printf("WTI_DSCTXS %u\n", i);
+ printContextRanges(lc);
+
+ /* Print individual device system context, manually populated. */
+ m_fpInfo(WTI_DSCTXS + i, CTX_INORGX, &lc.lcInOrgX);
+ m_fpInfo(WTI_DSCTXS + i, CTX_INORGY, &lc.lcInOrgY);
+ m_fpInfo(WTI_DSCTXS + i, CTX_INEXTX, &lc.lcInExtX);
+ m_fpInfo(WTI_DSCTXS + i, CTX_INEXTY, &lc.lcInExtY);
+ m_fpInfo(WTI_DSCTXS + i, CTX_OUTORGX, &lc.lcOutOrgX);
+ m_fpInfo(WTI_DSCTXS + i, CTX_OUTORGY, &lc.lcOutOrgY);
+ m_fpInfo(WTI_DSCTXS + i, CTX_OUTEXTX, &lc.lcOutExtX);
+ m_fpInfo(WTI_DSCTXS + i, CTX_OUTEXTY, &lc.lcOutExtY);
+ m_fpInfo(WTI_DSCTXS + i, CTX_SYSORGX, &lc.lcSysOrgX);
+ m_fpInfo(WTI_DSCTXS + i, CTX_SYSORGY, &lc.lcSysOrgY);
+ m_fpInfo(WTI_DSCTXS + i, CTX_SYSEXTX, &lc.lcSysExtX);
+ m_fpInfo(WTI_DSCTXS + i, CTX_SYSEXTY, &lc.lcSysExtY);
+ printf("WTI_DSCTX %u CTX_*\n", i);
+ printContextRanges(lc);
+
+ /* Print device axis. */
+ AXIS axis_x, axis_y;
+ m_fpInfo(WTI_DEVICES + i, DVC_X, &axis_x);
+ m_fpInfo(WTI_DEVICES + i, DVC_Y, &axis_y);
+ printf("WTI_DEVICES %u axis_x org: %d, axis_y org: %d axis_x ext: %d, axis_y ext: %d\n",
+ i,
+ axis_x.axMin,
+ axis_y.axMin,
+ axis_x.axMax - axis_x.axMin + 1,
+ axis_y.axMax - axis_y.axMin + 1);
+ }
+
+ /* Other stuff while we have a logcontext. */
+ printf("sysmode %d\n", lc.lcSysMode);
+} \ No newline at end of file