[Bf-blender-cvs] [1c9211443ea] wintab: Fix Wintab button tracking logic.

Nicholas Rishel noreply at git.blender.org
Sat May 7 08:39:00 CEST 2022


Commit: 1c9211443ea2b781c39f913813c523f880b5eefa
Author: Nicholas Rishel
Date:   Fri May 6 23:33:59 2022 -0700
Branches: wintab
https://developer.blender.org/rB1c9211443ea2b781c39f913813c523f880b5eefa

Fix Wintab button tracking logic.

Shifted flag for buttons changed was incorrectly compared with
unshifted packet flag to determine button press state.

Also fix button tracking storage; button flags are 32 bits whereas the
member variable was 8.

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

M	intern/ghost/intern/GHOST_Wintab.cpp
M	intern/ghost/intern/GHOST_Wintab.h

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

diff --git a/intern/ghost/intern/GHOST_Wintab.cpp b/intern/ghost/intern/GHOST_Wintab.cpp
index 974a07db9c3..9be4bd4c974 100644
--- a/intern/ghost/intern/GHOST_Wintab.cpp
+++ b/intern/ghost/intern/GHOST_Wintab.cpp
@@ -367,10 +367,12 @@ void GHOST_Wintab::getInput(std::vector<GHOST_WintabInfoWin32> &outWintabInfo)
     /* Some Wintab libraries don't handle relative button input, so we track button presses
      * manually. */
     DWORD buttonsChanged = m_buttons ^ pkt.pkButtons;
-    WORD buttonIndex = 0;
+    m_buttons = pkt.pkButtons;
 
-    while (buttonsChanged) {
-      if (buttonsChanged & 1) {
+    for (WORD buttonIndex = 0; buttonsChanged; buttonIndex++) {
+      DWORD buttonFlag = 1 << buttonIndex;
+
+      if (buttonsChanged & buttonFlag) {
         /* Find the index for the changed button from the button map. */
         GHOST_TButtonMask button = mapWintabToGhostButton(pkt.pkCursor, buttonIndex);
 
@@ -381,15 +383,12 @@ void GHOST_Wintab::getInput(std::vector<GHOST_WintabInfoWin32> &outWintabInfo)
           }
 
           out.button = button;
-          out.type = buttonsChanged & pkt.pkButtons ? GHOST_kEventButtonDown :
-                                                      GHOST_kEventButtonUp;
+          out.type = pkt.pkButtons & buttonFlag ? GHOST_kEventButtonDown : GHOST_kEventButtonUp;
         }
 
-        m_buttons ^= 1 << buttonIndex;
+        /* Remove checked button flag from the set of changed buttons. */
+        buttonsChanged &= ~buttonFlag;
       }
-
-      buttonsChanged >>= 1;
-      buttonIndex++;
     }
 
     outWintabInfo.push_back(out);
diff --git a/intern/ghost/intern/GHOST_Wintab.h b/intern/ghost/intern/GHOST_Wintab.h
index 86a0143ecc0..80eacf1f3fa 100644
--- a/intern/ghost/intern/GHOST_Wintab.h
+++ b/intern/ghost/intern/GHOST_Wintab.h
@@ -187,7 +187,7 @@ class GHOST_Wintab {
   bool m_focused = false;
 
   /** Pressed button map. */
-  uint8_t m_buttons = 0;
+  DWORD m_buttons = 0;
 
   /** Range of a coordinate space. */
   struct Range {



More information about the Bf-blender-cvs mailing list