[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