Browse Source

[Avalonia.Native] Replace manual input tracking with NSEvent (#19101)

release/11.3.3
Tim Miller 1 year ago
committed by Julien Lebosquain
parent
commit
a1d5d17ea5
  1. 34
      native/Avalonia.Native/src/OSX/AvnView.mm

34
native/Avalonia.Native/src/OSX/AvnView.mm

@ -13,7 +13,6 @@
{ {
ComObjectWeakPtr<TopLevelImpl> _parent; ComObjectWeakPtr<TopLevelImpl> _parent;
NSTrackingArea* _area; NSTrackingArea* _area;
bool _isLeftPressed, _isMiddlePressed, _isRightPressed, _isXButton1Pressed, _isXButton2Pressed;
AvnInputModifiers _modifierState; AvnInputModifiers _modifierState;
NSEvent* _lastMouseDownEvent; NSEvent* _lastMouseDownEvent;
AvnPixelSize _lastPixelSize; AvnPixelSize _lastPixelSize;
@ -446,7 +445,6 @@ static void ConvertTilt(NSPoint tilt, float* xTilt, float* yTilt)
- (void)mouseDown:(NSEvent *)event - (void)mouseDown:(NSEvent *)event
{ {
_isLeftPressed = true;
_lastMouseDownEvent = event; _lastMouseDownEvent = event;
[self mouseEvent:event withType:LeftButtonDown]; [self mouseEvent:event withType:LeftButtonDown];
} }
@ -459,15 +457,12 @@ static void ConvertTilt(NSPoint tilt, float* xTilt, float* yTilt)
{ {
case 2: case 2:
case 3: case 3:
_isMiddlePressed = true;
[self mouseEvent:event withType:MiddleButtonDown]; [self mouseEvent:event withType:MiddleButtonDown];
break; break;
case 4: case 4:
_isXButton1Pressed = true;
[self mouseEvent:event withType:XButton1Down]; [self mouseEvent:event withType:XButton1Down];
break; break;
case 5: case 5:
_isXButton2Pressed = true;
[self mouseEvent:event withType:XButton2Down]; [self mouseEvent:event withType:XButton2Down];
break; break;
@ -478,14 +473,12 @@ static void ConvertTilt(NSPoint tilt, float* xTilt, float* yTilt)
- (void)rightMouseDown:(NSEvent *)event - (void)rightMouseDown:(NSEvent *)event
{ {
_isRightPressed = true;
_lastMouseDownEvent = event; _lastMouseDownEvent = event;
[self mouseEvent:event withType:RightButtonDown]; [self mouseEvent:event withType:RightButtonDown];
} }
- (void)mouseUp:(NSEvent *)event - (void)mouseUp:(NSEvent *)event
{ {
_isLeftPressed = false;
[self mouseEvent:event withType:LeftButtonUp]; [self mouseEvent:event withType:LeftButtonUp];
} }
@ -495,15 +488,12 @@ static void ConvertTilt(NSPoint tilt, float* xTilt, float* yTilt)
{ {
case 2: case 2:
case 3: case 3:
_isMiddlePressed = false;
[self mouseEvent:event withType:MiddleButtonUp]; [self mouseEvent:event withType:MiddleButtonUp];
break; break;
case 4: case 4:
_isXButton1Pressed = false;
[self mouseEvent:event withType:XButton1Up]; [self mouseEvent:event withType:XButton1Up];
break; break;
case 5: case 5:
_isXButton2Pressed = false;
[self mouseEvent:event withType:XButton2Up]; [self mouseEvent:event withType:XButton2Up];
break; break;
@ -514,7 +504,6 @@ static void ConvertTilt(NSPoint tilt, float* xTilt, float* yTilt)
- (void)rightMouseUp:(NSEvent *)event - (void)rightMouseUp:(NSEvent *)event
{ {
_isRightPressed = false;
[self mouseEvent:event withType:RightButtonUp]; [self mouseEvent:event withType:RightButtonUp];
} }
@ -597,15 +586,6 @@ static void ConvertTilt(NSPoint tilt, float* xTilt, float* yTilt)
_modifierState = [self getModifiers:modifierFlags]; _modifierState = [self getModifiers:modifierFlags];
} }
- (void)resetPressedMouseButtons
{
_isLeftPressed = false;
_isRightPressed = false;
_isMiddlePressed = false;
_isXButton1Pressed = false;
_isXButton2Pressed = false;
}
- (void)flagsChanged:(NSEvent *)event - (void)flagsChanged:(NSEvent *)event
{ {
auto newModifierState = [self getModifiers:[event modifierFlags]]; auto newModifierState = [self getModifiers:[event modifierFlags]];
@ -752,15 +732,17 @@ static void ConvertTilt(NSPoint tilt, float* xTilt, float* yTilt)
if (mod & NSEventModifierFlagCommand) if (mod & NSEventModifierFlagCommand)
rv |= Windows; rv |= Windows;
if (_isLeftPressed) NSUInteger pressedButtons = [NSEvent pressedMouseButtons];
if (pressedButtons & (1 << 0)) // Left mouse button
rv |= LeftMouseButton; rv |= LeftMouseButton;
if (_isMiddlePressed) if (pressedButtons & (1 << 1)) // Right mouse button
rv |= MiddleMouseButton;
if (_isRightPressed)
rv |= RightMouseButton; rv |= RightMouseButton;
if (_isXButton1Pressed) if (pressedButtons & (1 << 2)) // Middle mouse button
rv |= MiddleMouseButton;
if (pressedButtons & (1 << 3)) // X1 button
rv |= XButton1MouseButton; rv |= XButton1MouseButton;
if (_isXButton2Pressed) if (pressedButtons & (1 << 4)) // X2 button
rv |= XButton2MouseButton; rv |= XButton2MouseButton;
return (AvnInputModifiers)rv; return (AvnInputModifiers)rv;

Loading…
Cancel
Save