Browse Source

implement mouse wheel and mouse move when

button is down.
pull/1977/head
Dan Walmsley 8 years ago
parent
commit
fc693e0382
  1. 50
      src/Avalonia.Native.OSX/window.mm
  2. 9
      src/Avalonia.Native/WindowImplBase.cs

50
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;

9
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<IRenderLoop>());
return new ImmediateRenderer(root);
}

Loading…
Cancel
Save