diff options
Diffstat (limited to 'intern/ghost/intern/GHOST_Wintab.cpp')
-rw-r--r-- | intern/ghost/intern/GHOST_Wintab.cpp | 23 |
1 files changed, 10 insertions, 13 deletions
diff --git a/intern/ghost/intern/GHOST_Wintab.cpp b/intern/ghost/intern/GHOST_Wintab.cpp index 974a07db9c3..c75a39bb34b 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,12 +367,13 @@ 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); + GHOST_TButton button = mapWintabToGhostButton(pkt.pkCursor, buttonIndex); if (button != GHOST_kButtonMaskNone) { /* If this is not the first button found, push info for the prior Wintab button. */ @@ -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); @@ -400,7 +397,7 @@ void GHOST_Wintab::getInput(std::vector<GHOST_WintabInfoWin32> &outWintabInfo) } } -GHOST_TButtonMask GHOST_Wintab::mapWintabToGhostButton(UINT cursor, WORD physicalButton) +GHOST_TButton GHOST_Wintab::mapWintabToGhostButton(UINT cursor, WORD physicalButton) { const WORD numButtons = 32; BYTE logicalButtons[numButtons] = {0}; |