def _tablet_wheel_cb(self, instance, wheel_motion, buttons_state): self._tablet_buttons_cb(instance, buttons_state) if wheel_motion < 0: SpiceClientGLib.inputs_button_press(self._inputs_channel, MOUSE_UP, self._tablet_buttons_state) SpiceClientGLib.inputs_button_release(self._inputs_channel, MOUSE_UP, self._tablet_buttons_state) if wheel_motion > 0: SpiceClientGLib.inputs_button_press(self._inputs_channel, MOUSE_DOWN, self._tablet_buttons_state) SpiceClientGLib.inputs_button_release(self._inputs_channel, MOUSE_DOWN, self._tablet_buttons_state)
def _tablet_buttons_cb(self, instance, buttons_state): # TODO Need to swap middle and right buttons - why? buttons_state = ( buttons_state & ~6) | (buttons_state & 2) << 1 | (buttons_state & 4) >> 1 for button in (MOUSE_LEFT, MOUSE_MIDDLE, MOUSE_RIGHT): mask = 1 << (button - 1) if (buttons_state & mask) and not (self._tablet_buttons_state & mask): SpiceClientGLib.inputs_button_press(self._inputs_channel, button, mask) self._tablet_buttons_state = self._tablet_buttons_state | mask if (self._tablet_buttons_state & mask) and not (buttons_state & mask): SpiceClientGLib.inputs_button_release(self._inputs_channel, button, mask) self._tablet_buttons_state = self._tablet_buttons_state & ~mask