private void HandlePacket(ISynPacket packet) { var(x, y, z) = packet.GetDelta(); if (x != 0 || y != 0 || z != 0) { // If movement is detected, disarm the button state so we don't trigger // middle click events when button is released. middleButtonDown = false; } else { var buttonState = packet.GetButtonState(); // When set to scrolling, reports ButtonVirtualMiddle | ButtonMiddle // When set to middle-click, reports ButtonReportedMiddle | ButtonMiddle // Checking no motion between down and up when in scrolling mode, and // emit a middle click event on release. bool currentMiddleDown = (buttonState & SynButtonFlags.ButtonVirtualMiddle) != 0; if (middleButtonDown && !currentMiddleDown) { // middle button was released with no other movement. middleButtonDown = false; if (middleButtonDownStopwatch.ElapsedMilliseconds < 250) { SendMiddleClick(); } } else if (!middleButtonDown && currentMiddleDown) { middleButtonDown = true; middleButtonDownStopwatch.Restart(); } } }
public static (int, int, int) GetDelta(this ISynPacket packet) { int x = GetProperty(packet, PacketProperty.XDelta); int y = GetProperty(packet, PacketProperty.YDelta); int z = GetProperty(packet, PacketProperty.ZDelta); return(x, y, z); }
public void Enqueue(ISynPacket transportPacket) { throw new NotImplementedException(); }
public static SynButtonFlags GetButtonState(this ISynPacket packet) { return((SynButtonFlags)GetProperty(packet, PacketProperty.ButtonState)); }
public static int GetProperty(this ISynPacket packet, PacketProperty property) { packet.GetProperty((int)property, out int value); return(value); }