private void EmitButtonChange(bool prev, bool next, MouseButton button, MouseStatus nextStatus) { if (!prev && next) { MouseButtonDown?.Invoke(sender, new MouseButtonEvent(LastMouseStatus, nextStatus, button)); } else if (prev && !next) { var ev = new MouseButtonEvent(LastMouseStatus, nextStatus, button); MouseButtonUp?.Invoke(sender, ev); MouseClick?.Invoke(sender, ev); } }
public void OnMouseChange(MouseStatus nextStatus) { // compare the two mouse statuses and emit appropriate events // TODO ... this should be more clever. this could be handled easier with enum flags EmitButtonChange(LastMouseStatus.LeftButtonDown, nextStatus.LeftButtonDown, MouseButton.Left, nextStatus); EmitButtonChange(LastMouseStatus.MiddleButtonDown, nextStatus.MiddleButtonDown, MouseButton.Middle, nextStatus); EmitButtonChange(LastMouseStatus.RightButtonDown, nextStatus.RightButtonDown, MouseButton.Right, nextStatus); // move events if (LastMouseStatus.Position != nextStatus.Position) { MouseMove?.Invoke(sender, new MouseEvent(LastMouseStatus, nextStatus)); } LastMouseStatus = nextStatus; }
public void OnMouseWheel(MouseWheelDirection direction, MouseStatus nextStatus) { MouseWheel?.Invoke(sender, new MouseWheelEvent(LastMouseStatus, nextStatus, direction)); OnMouseChange(nextStatus); }