From fc693e0382eb5c6b28e80d43ff033c9792713644 Mon Sep 17 00:00:00 2001 From: Dan Walmsley Date: Sat, 15 Sep 2018 20:19:41 +0100 Subject: [PATCH] implement mouse wheel and mouse move when button is down. --- src/Avalonia.Native.OSX/window.mm | 50 +++++++++++++++++++++++++++ src/Avalonia.Native/WindowImplBase.cs | 9 +++-- 2 files changed, 56 insertions(+), 3 deletions(-) diff --git a/src/Avalonia.Native.OSX/window.mm b/src/Avalonia.Native.OSX/window.mm index b94bc21e6d..2be87178b1 100644 --- a/src/Avalonia.Native.OSX/window.mm +++ b/src/Avalonia.Native.OSX/window.mm @@ -170,6 +170,18 @@ protected: auto point = [self translateLocalPoint:avnPoint]; AvnVector delta; + if(type == Wheel) + { + delta.X = [event scrollingDeltaX] / 50; + delta.Y = [event scrollingDeltaY] / 50; + + if(delta.X == 0 && delta.Y == 0) + { + return; + } + } + + auto timestamp = [event timestamp] * 1000; auto modifiers = [self getModifiers:[event modifierFlags]]; @@ -237,6 +249,44 @@ protected: [super rightMouseUp:event]; } +- (void)mouseDragged:(NSEvent *)event +{ + [self mouseEvent:event withType:Move]; + [super mouseDragged:event]; +} + +- (void)otherMouseDragged:(NSEvent *)event +{ + [self mouseEvent:event withType:Move]; + [super otherMouseDragged:event]; +} + +- (void)rightMouseDragged:(NSEvent *)event +{ + [self mouseEvent:event withType:Move]; + [super rightMouseDragged:event]; +} + +- (void)scrollWheel:(NSEvent *)event +{ + [self mouseEvent:event withType:Wheel]; + [super scrollWheel:event]; +} + + +- (void)mouseEntered:(NSEvent *)event +{ + _isMouseOver = true; + [super mouseEntered:event]; +} + +- (void)mouseExited:(NSEvent *)event +{ + _isMouseOver = false; + [self mouseEvent:event withType:LeaveWindow]; + [super mouseExited:event]; +} + - (AvnInputModifiers)getModifiers:(NSEventModifierFlags)mod { unsigned int rv = 0; diff --git a/src/Avalonia.Native/WindowImplBase.cs b/src/Avalonia.Native/WindowImplBase.cs index 9b325b1016..a14c38b011 100644 --- a/src/Avalonia.Native/WindowImplBase.cs +++ b/src/Avalonia.Native/WindowImplBase.cs @@ -16,6 +16,7 @@ namespace Avalonia.Native IInputRoot _inputRoot; IAvnWindowBase _native; + private bool _deferredRendering = false; private readonly IMouseDevice _mouse; public WindowBaseImpl() @@ -112,14 +113,15 @@ namespace Avalonia.Native public void RawMouseEvent(AvnRawMouseEventType type, uint timeStamp, AvnInputModifiers modifiers, AvnPoint point, AvnVector delta) { - switch(type) + Dispatcher.UIThread.RunJobs(DispatcherPriority.Input + 1); + + switch (type) { - case AvnRawMouseEventType.LeaveWindow: case AvnRawMouseEventType.Wheel: + Input?.Invoke(new RawMouseWheelEventArgs(_mouse, timeStamp, _inputRoot, new Point(point.X, point.Y), new Vector(delta.X, delta.Y), (InputModifiers)modifiers)); break; default: - Dispatcher.UIThread.RunJobs(DispatcherPriority.Input + 1); Input?.Invoke(new RawMouseEventArgs(_mouse, timeStamp, _inputRoot, (RawMouseEventType)type, new Point(point.X, point.Y), (InputModifiers)modifiers)); break; } @@ -132,6 +134,7 @@ namespace Avalonia.Native public IRenderer CreateRenderer(IRenderRoot root) { + //_deferredRendering = true; //return new DeferredRenderer(root, AvaloniaLocator.Current.GetService()); return new ImmediateRenderer(root); }