[Bf-blender-cvs] [d7d68bcec2e] wintab-high-frequency: Dynamic api switching.
Nicholas Rishel
noreply at git.blender.org
Sat May 22 03:00:20 CEST 2021
Commit: d7d68bcec2ec4ac9aebfb1c8d67557532e515fbf
Author: Nicholas Rishel
Date: Fri May 21 12:46:55 2021 -0700
Branches: wintab-high-frequency
https://developer.blender.org/rBd7d68bcec2ec4ac9aebfb1c8d67557532e515fbf
Dynamic api switching.
===================================================================
M intern/ghost/intern/GHOST_SystemWin32.cpp
M intern/ghost/intern/GHOST_WindowWin32.cpp
M intern/ghost/intern/GHOST_Wintab.cpp
M intern/ghost/intern/GHOST_Wintab.h
===================================================================
diff --git a/intern/ghost/intern/GHOST_SystemWin32.cpp b/intern/ghost/intern/GHOST_SystemWin32.cpp
index 525c6016d31..4e82532de6e 100644
--- a/intern/ghost/intern/GHOST_SystemWin32.cpp
+++ b/intern/ghost/intern/GHOST_SystemWin32.cpp
@@ -1623,6 +1623,12 @@ LRESULT WINAPI GHOST_SystemWin32::s_wndProc(HWND hwnd, UINT msg, WPARAM wParam,
eventHandled = true;
break;
}
+ case WT_INFOCHANGE:
+ if (GHOST_WintabWin32 *wt = window->getWintab()) {
+ wt->processInfoChange(lParam);
+ }
+ eventHandled = true;
+ break;
case WT_PACKET:
processWintabEvent(window);
eventHandled = true;
diff --git a/intern/ghost/intern/GHOST_WindowWin32.cpp b/intern/ghost/intern/GHOST_WindowWin32.cpp
index a182eb2c75c..0aaa34e52c9 100644
--- a/intern/ghost/intern/GHOST_WindowWin32.cpp
+++ b/intern/ghost/intern/GHOST_WindowWin32.cpp
@@ -983,7 +983,7 @@ bool GHOST_WindowWin32::useTabletAPI(GHOST_TTabletAPI api) const
return true;
}
else if (m_system->getTabletAPI() == GHOST_kTabletAutomatic) {
- if (m_wintab.tablet)
+ if (m_wintab && m_wintab->devicesPresent())
return api == GHOST_kTabletWintab;
else
return api == GHOST_kTabletNative;
diff --git a/intern/ghost/intern/GHOST_Wintab.cpp b/intern/ghost/intern/GHOST_Wintab.cpp
index aa20119a2a7..44e897b666c 100644
--- a/intern/ghost/intern/GHOST_Wintab.cpp
+++ b/intern/ghost/intern/GHOST_Wintab.cpp
@@ -166,6 +166,7 @@ GHOST_WintabWin32::GHOST_WintabWin32(HWND hwnd,
m_context(std::move(hctx)),
m_pkts(queueSize)
{
+ m_fpInfo(WTI_INTERFACE, IFC_NDEVICES, &numDevices);
updateCursorInfo();
}
@@ -224,6 +225,23 @@ void GHOST_WintabWin32::updateCursorInfo()
}
}
+void GHOST_WintabWin32::processInfoChange(LPARAM lParam)
+{
+ /* Update number of connected Wintab digitizers */
+ if (LOWORD(lParam) == WTI_INTERFACE && HIWORD(lParam) == IFC_NDEVICES) {
+ m_fpInfo(WTI_INTERFACE, IFC_NDEVICES, &numDevices);
+ }
+}
+
+/**
+ * TODO
+ */
+bool GHOST_WintabWin32::devicesPresent()
+{
+ return numDevices;
+}
+
+
void GHOST_WintabWin32::getInput(std::vector<GHOST_WintabInfoWin32> &outWintabInfo)
{
const int numPackets = m_fpPacketsGet(m_context.get(), m_pkts.size(), m_pkts.data());
diff --git a/intern/ghost/intern/GHOST_Wintab.h b/intern/ghost/intern/GHOST_Wintab.h
index 60b88cee417..c27069454b0 100644
--- a/intern/ghost/intern/GHOST_Wintab.h
+++ b/intern/ghost/intern/GHOST_Wintab.h
@@ -87,6 +87,17 @@ class GHOST_WintabWin32 {
*/
void updateCursorInfo();
+ /**
+ * Handle Wintab info changes such as change in number of connected tablets.
+ * \param lParam: LPARAM of the event.
+ */
+ void processInfoChange(LPARAM lParam);
+
+ /**
+ * TODO
+ */
+ bool devicesPresent();
+
/**
* Translate Wintab packets into GHOST_WintabInfoWin32 structs.
* \param outWintabInfo: Storage to return resulting GHOST_WintabInfoWin32 structs.
@@ -112,6 +123,7 @@ class GHOST_WintabWin32 {
LONG m_maxPressure = 0;
LONG m_maxAzimuth = 0;
LONG m_maxAltitude = 0;
+ UINT numDevices;
/** Reusable buffer to read in Wintab packets. */
std::vector<PACKET> m_pkts;
More information about the Bf-blender-cvs
mailing list