diff options
-rw-r--r-- | intern/ghost/intern/GHOST_Wintab.cpp | 19 | ||||
-rw-r--r-- | intern/ghost/intern/GHOST_Wintab.h | 2 |
2 files changed, 9 insertions, 12 deletions
diff --git a/intern/ghost/intern/GHOST_Wintab.cpp b/intern/ghost/intern/GHOST_Wintab.cpp index 974a07db9c3..b136acbe098 100644 --- a/intern/ghost/intern/GHOST_Wintab.cpp +++ b/intern/ghost/intern/GHOST_Wintab.cpp @@ -310,7 +310,7 @@ void GHOST_Wintab::getInput(std::vector<GHOST_WintabInfoWin32> &outWintabInfo) outWintabInfo.reserve(numPackets); for (int i = 0; i < numPackets; i++) { - PACKET pkt = m_pkts[i]; + const PACKET pkt = m_pkts[i]; GHOST_WintabInfoWin32 out; /* % 3 for multiple devices ("DualTrack"). */ @@ -367,11 +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; + /* We only needed the prior button state to compare to current, so we can overwrite it now. */ + m_buttons = pkt.pkButtons; - while (buttonsChanged) { + /* Iterate over button flag indices until all flags are clear. */ + for (WORD buttonIndex = 0; buttonsChanged; buttonIndex++, buttonsChanged >>= 1) { if (buttonsChanged & 1) { - /* Find the index for the changed button from the button map. */ GHOST_TButtonMask button = mapWintabToGhostButton(pkt.pkCursor, buttonIndex); if (button != GHOST_kButtonMaskNone) { @@ -381,15 +382,11 @@ void GHOST_Wintab::getInput(std::vector<GHOST_WintabInfoWin32> &outWintabInfo) } out.button = button; - out.type = buttonsChanged & pkt.pkButtons ? GHOST_kEventButtonDown : - GHOST_kEventButtonUp; - } - m_buttons ^= 1 << buttonIndex; + DWORD buttonFlag = 1 << buttonIndex; + out.type = pkt.pkButtons & buttonFlag ? GHOST_kEventButtonDown : GHOST_kEventButtonUp; + } } - - 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 { |