[Bf-blender-cvs] [bf80dc2bd4a] master: Add debugging info for Wintab activated by argument `--debug-wintab`.

Nicholas Rishel noreply at git.blender.org
Mon Apr 18 00:27:58 CEST 2022


Commit: bf80dc2bd4ac9fab125982a08d616e248f329701
Author: Nicholas Rishel
Date:   Tue Jun 22 17:30:10 2021 -0700
Branches: master
https://developer.blender.org/rBbf80dc2bd4ac9fab125982a08d616e248f329701

Add debugging info for Wintab activated by argument `--debug-wintab`.

Bonus: Added docs for `--debug-ghost`.

Differential Revision: https://developer.blender.org/D14610

===================================================================

M	intern/ghost/GHOST_C-api.h
M	intern/ghost/GHOST_ISystem.h
M	intern/ghost/GHOST_Types.h
M	intern/ghost/intern/GHOST_C-api.cpp
M	intern/ghost/intern/GHOST_System.cpp
M	intern/ghost/intern/GHOST_System.h
M	intern/ghost/intern/GHOST_SystemWin32.cpp
M	intern/ghost/intern/GHOST_SystemWin32.h
M	intern/ghost/intern/GHOST_WindowWin32.cpp
M	intern/ghost/intern/GHOST_Wintab.cpp
M	intern/ghost/intern/GHOST_Wintab.h
M	release/datafiles/locale
M	release/scripts/addons
M	source/blender/blenkernel/BKE_global.h
M	source/blender/windowmanager/intern/wm_window.c
M	source/creator/creator_args.c
M	source/tools

===================================================================

diff --git a/intern/ghost/GHOST_C-api.h b/intern/ghost/GHOST_C-api.h
index a82f634183d..ec641938f1f 100644
--- a/intern/ghost/GHOST_C-api.h
+++ b/intern/ghost/GHOST_C-api.h
@@ -30,8 +30,10 @@ extern GHOST_SystemHandle GHOST_CreateSystem(void);
 
 /**
  * Specifies whether debug messages are to be enabled for the specific system handle.
+ * \param systemhandle: The handle to the system.
+ * \param debug: Flag for systems to debug.
  */
-extern void GHOST_SystemInitDebug(GHOST_SystemHandle systemhandle, int is_debug_enabled);
+extern void GHOST_SystemInitDebug(GHOST_SystemHandle systemhandle, GHOST_Debug debug);
 
 /**
  * Disposes the one and only system.
diff --git a/intern/ghost/GHOST_ISystem.h b/intern/ghost/GHOST_ISystem.h
index ed193ee7e5d..bb91abbadec 100644
--- a/intern/ghost/GHOST_ISystem.h
+++ b/intern/ghost/GHOST_ISystem.h
@@ -452,8 +452,9 @@ class GHOST_ISystem {
 
   /**
    * Specify whether debug messages are to be shown.
+   * \param debug: Flag for systems to debug.
    */
-  virtual void initDebug(bool is_debug_enabled) = 0;
+  virtual void initDebug(GHOST_Debug debug) = 0;
 
   /**
    * Check whether debug messages are to be shown.
diff --git a/intern/ghost/GHOST_Types.h b/intern/ghost/GHOST_Types.h
index c654367072f..85913fbd10c 100644
--- a/intern/ghost/GHOST_Types.h
+++ b/intern/ghost/GHOST_Types.h
@@ -573,6 +573,16 @@ typedef struct {
   uint32_t frequency;
 } GHOST_DisplaySetting;
 
+typedef enum {
+  /** Axis that cursor grab will wrap. */
+  GHOST_kDebugDefault = (1 << 1),
+  GHOST_kDebugWintab = (1 << 2),
+} GHOST_TDebugFlags;
+
+typedef struct {
+  int flags;
+} GHOST_Debug;
+
 #ifdef _WIN32
 typedef void *GHOST_TEmbedderWindowID;
 #endif  // _WIN32
diff --git a/intern/ghost/intern/GHOST_C-api.cpp b/intern/ghost/intern/GHOST_C-api.cpp
index e3d01c24283..93e94893162 100644
--- a/intern/ghost/intern/GHOST_C-api.cpp
+++ b/intern/ghost/intern/GHOST_C-api.cpp
@@ -30,11 +30,11 @@ GHOST_SystemHandle GHOST_CreateSystem(void)
   return (GHOST_SystemHandle)system;
 }
 
-void GHOST_SystemInitDebug(GHOST_SystemHandle systemhandle, int is_debug_enabled)
+void GHOST_SystemInitDebug(GHOST_SystemHandle systemhandle, GHOST_Debug debug)
 {
   GHOST_ISystem *system = (GHOST_ISystem *)systemhandle;
 
-  system->initDebug(is_debug_enabled);
+  system->initDebug(debug);
 }
 
 GHOST_TSuccess GHOST_DisposeSystem(GHOST_SystemHandle systemhandle)
diff --git a/intern/ghost/intern/GHOST_System.cpp b/intern/ghost/intern/GHOST_System.cpp
index 3df85e18bc7..0d0d41972fd 100644
--- a/intern/ghost/intern/GHOST_System.cpp
+++ b/intern/ghost/intern/GHOST_System.cpp
@@ -390,9 +390,9 @@ void GHOST_System::useWindowFocus(const bool use_focus)
   m_windowFocus = use_focus;
 }
 
-void GHOST_System::initDebug(bool is_debug_enabled)
+void GHOST_System::initDebug(GHOST_Debug debug)
 {
-  m_is_debug_enabled = is_debug_enabled;
+  m_is_debug_enabled = debug.flags & GHOST_kDebugDefault;
 }
 
 bool GHOST_System::isDebugEnabled()
diff --git a/intern/ghost/intern/GHOST_System.h b/intern/ghost/intern/GHOST_System.h
index 0e1e3f734ae..4a3cded1fbd 100644
--- a/intern/ghost/intern/GHOST_System.h
+++ b/intern/ghost/intern/GHOST_System.h
@@ -334,8 +334,9 @@ class GHOST_System : public GHOST_ISystem {
 
   /**
    * Specify whether debug messages are to be shown.
+   * \param debug: Flag for systems to debug.
    */
-  virtual void initDebug(bool is_debug_enabled);
+  virtual void initDebug(GHOST_Debug debug);
 
   /**
    * Check whether debug messages are to be shown.
diff --git a/intern/ghost/intern/GHOST_SystemWin32.cpp b/intern/ghost/intern/GHOST_SystemWin32.cpp
index e588c7485b4..83869188b65 100644
--- a/intern/ghost/intern/GHOST_SystemWin32.cpp
+++ b/intern/ghost/intern/GHOST_SystemWin32.cpp
@@ -872,6 +872,13 @@ GHOST_EventButton *GHOST_SystemWin32::processButtonEvent(GHOST_TEventType type,
     int msgPosY = GET_Y_LPARAM(msgPos);
     system->pushEvent(new GHOST_EventCursor(
         ::GetMessageTime(), GHOST_kEventCursorMove, window, msgPosX, msgPosY, td));
+
+    if (type == GHOST_kEventButtonDown) {
+      WINTAB_PRINTF("HWND %p OS button down\n", window->getHWND());
+    }
+    else if (type == GHOST_kEventButtonUp) {
+      WINTAB_PRINTF("HWND %p OS button up\n", window->getHWND());
+    }
   }
 
   window->updateMouseCapture(type == GHOST_kEventButtonDown ? MousePressed : MouseReleased);
@@ -914,6 +921,8 @@ void GHOST_SystemWin32::processWintabEvent(GHOST_WindowWin32 *window)
         break;
       }
       case GHOST_kEventButtonDown: {
+        WINTAB_PRINTF("HWND %p Wintab button down", window->getHWND());
+
         UINT message;
         switch (info.button) {
           case GHOST_kButtonMaskLeft:
@@ -939,9 +948,12 @@ void GHOST_SystemWin32::processWintabEvent(GHOST_WindowWin32 *window)
           /* Test for Win32/Wintab button down match. */
           useWintabPos = wt->testCoordinates(msg.pt.x, msg.pt.y, info.x, info.y);
           if (!useWintabPos) {
+            WINTAB_PRINTF(" ... but associated system button mismatched position\n");
             continue;
           }
 
+          WINTAB_PRINTF(" ... associated to system button\n");
+
           /* Steal the Win32 event which was previously peeked. */
           PeekMessage(&msg, window->getHWND(), message, message, PM_REMOVE | PM_NOYIELD);
 
@@ -958,9 +970,14 @@ void GHOST_SystemWin32::processWintabEvent(GHOST_WindowWin32 *window)
           mouseMoveHandled = true;
           break;
         }
+        else {
+          WINTAB_PRINTF(" ... but no system button\n");
+        }
       }
       case GHOST_kEventButtonUp: {
+        WINTAB_PRINTF("HWND %p Wintab button up", window->getHWND());
         if (!useWintabPos) {
+          WINTAB_PRINTF(" ... but Wintab position isn't trusted\n");
           continue;
         }
 
@@ -986,10 +1003,14 @@ void GHOST_SystemWin32::processWintabEvent(GHOST_WindowWin32 *window)
         if (PeekMessage(&msg, window->getHWND(), message, message, PM_REMOVE | PM_NOYIELD) &&
             msg.message != WM_QUIT) {
 
+          WINTAB_PRINTF(" ... associated to system button\n");
           window->updateMouseCapture(MouseReleased);
           system->pushEvent(
               new GHOST_EventButton(info.time, info.type, window, info.button, info.tabletData));
         }
+        else {
+          WINTAB_PRINTF(" ... but no system button\n");
+        }
         break;
       }
       default:
@@ -1318,6 +1339,12 @@ void GHOST_SystemWin32::setTabletAPI(GHOST_TTabletAPI api)
   }
 }
 
+void GHOST_SystemWin32::initDebug(GHOST_Debug debug)
+{
+  GHOST_System::initDebug(debug);
+  GHOST_Wintab::setDebug(debug.flags & GHOST_kDebugWintab);
+}
+
 void GHOST_SystemWin32::processMinMaxInfo(MINMAXINFO *minmax)
 {
   minmax->ptMinTrackSize.x = 320;
@@ -1593,6 +1620,7 @@ LRESULT WINAPI GHOST_SystemWin32::s_wndProc(HWND hwnd, UINT msg, WPARAM wParam,
         // Wintab events, processed
         ////////////////////////////////////////////////////////////////////////
         case WT_CSRCHANGE: {
+          WINTAB_PRINTF("HWND %p HCTX %p WT_CSRCHANGE\n", window->getHWND(), (void *)lParam);
           GHOST_Wintab *wt = window->getWintab();
           if (wt) {
             wt->updateCursorInfo();
@@ -1601,6 +1629,20 @@ LRESULT WINAPI GHOST_SystemWin32::s_wndProc(HWND hwnd, UINT msg, WPARAM wParam,
           break;
         }
         case WT_PROXIMITY: {
+          WINTAB_PRINTF("HWND %p HCTX %p WT_PROXIMITY\n", window->getHWND(), (void *)wParam);
+          if (LOWORD(lParam)) {
+            WINTAB_PRINTF(" Cursor entering context.\n");
+          }
+          else {
+            WINTAB_PRINTF(" Cursor leaving context.\n");
+          }
+          if (HIWORD(lParam)) {
+            WINTAB_PRINTF(" Cursor entering or leaving hardware proximity.\n");
+          }
+          else {
+            WINTAB_PRINTF(" Cursor neither entering nor leaving hardware proximity.\n");
+          }
+
           GHOST_Wintab *wt = window->getWintab();
           if (wt) {
             bool inRange = LOWORD(lParam);
@@ -1616,6 +1658,7 @@ LRESULT WINAPI GHOST_SystemWin32::s_wndProc(HWND hwnd, UINT msg, WPARAM wParam,
           break;
         }
         case WT_INFOCHANGE: {
+          WINTAB_PRINTF("HWND %p HCTX %p WT_INFOCHANGE\n", window->getHWND(), (void *)wParam);
           GHOST_Wintab *wt = window->getWintab();
           if (wt) {
             wt->processInfoChange(lParam);
@@ -1632,6 +1675,32 @@ LRESULT WINAPI GHOST_SystemWin32::s_wndProc(HWND hwnd, UINT msg, WPARAM wParam,
           eventHandled = true;
           break;
         ////////////////////////////////////////////////////////////////////////
+        // Wintab events, debug
+        ////////////////////////////////////////////////////////////////////////
+        case WT_CTXOPEN:
+          WINTAB_PRINTF("HWND %p HCTX %p WT_CTXOPEN\n", window->getHWND(), (void *)wParam);
+          break;
+        case WT_CTXCLOSE:
+          WINTAB_PRINTF("HWND %p HCTX %p WT_CTXCLOSE\n", window->getHWND(), (void *)wParam);
+          break;
+        case WT_CTXUPDATE:
+          WINTAB_PRINTF("HWND %p HCTX %p WT_CTXUPDATE\n", window->getHWND(), (void *)wParam);
+          break;
+        case WT_CTXOVERLAP:
+          WINTAB_PRINTF("HWND %p HCTX %p WT_CTXOVERLAP", window->getHWND(), (void *)wParam);
+          switch (lParam) {
+            case CXS_DISABLED:
+              WINTAB_PRINTF(" CXS_DISABLED\n");
+              break;
+            case CXS_OBSCURED:
+              WINTAB_PRINTF(" CXS_OBSCURED\n");
+              break;
+            case CXS_ONTOP:
+              WINTAB_PRINTF(" CXS_ONTOP\n");
+              break;
+          }
+          break;
+        ////////////////////////////////////////////////////////////////////////
         // Pointer events, processed
         ////////////////////////////////////////////////////////////////////////
         case WM_POINTERUPDATE:
@@ -1692,6 +1761,7 @@ LRESULT WINAPI GHOST_SystemWin32::s_wndProc(HWND hwnd, UINT msg, WPARAM wParam,
           break;
         case WM_MOUSEMOVE:
           if (!window->m_mousePresent) {
+            WINTAB_PRINTF("HWND %p mouse enter\n", window->getHWND());
             TRACKMOUSEEVENT tme = {sizeof(tme)};
             tme.dwFlags = TME_LEAVE;
             

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list