Browse Source

implement modifiers for keyboard and mouse events.

repro-window-close
Dan Walmsley 8 years ago
parent
commit
617462703e
  1. 4
      src/Avalonia.Windowing/Bindings/Events.cs
  2. 92
      src/Avalonia.Windowing/WindowImpl.cs

4
src/Avalonia.Windowing/Bindings/Events.cs

@ -22,6 +22,10 @@ namespace Avalonia.Windowing.Bindings
{ {
public MouseEventType EventType { get; set; } public MouseEventType EventType { get; set; }
public LogicalPosition Position { get; set; } public LogicalPosition Position { get; set; }
public byte Shift { get; set; }
public byte Control { get; set; }
public byte Alt { get; set; }
public byte Logo { get; set; }
} }
[StructLayout(LayoutKind.Sequential)] [StructLayout(LayoutKind.Sequential)]

92
src/Avalonia.Windowing/WindowImpl.cs

@ -196,15 +196,18 @@ namespace Avalonia.Windowing
Dispatcher.UIThread.RunJobs(DispatcherPriority.Input + 1); Dispatcher.UIThread.RunJobs(DispatcherPriority.Input + 1);
var timeStamp = (uint)Environment.TickCount; var timeStamp = (uint)Environment.TickCount;
Input if (evt.Character >= 32)
( {
new RawTextInputEventArgs Input
( (
KeyboardDevice, new RawTextInputEventArgs
timeStamp, (
evt.Character.ToString() KeyboardDevice,
) timeStamp,
); evt.Character.ToString()
)
);
}
} }
public void OnKeyboardEvent (KeyboardEvent evt) public void OnKeyboardEvent (KeyboardEvent evt)
@ -213,17 +216,44 @@ namespace Avalonia.Windowing
var eventType = evt.Pressed == 1 ? RawKeyEventType.KeyDown : RawKeyEventType.KeyUp; var eventType = evt.Pressed == 1 ? RawKeyEventType.KeyDown : RawKeyEventType.KeyUp;
var timeStamp = (uint)Environment.TickCount; var timeStamp = (uint)Environment.TickCount;
Input var modifiers = InputModifiers.None;
(
new RawKeyEventArgs if(evt.Control == 1)
{
modifiers |= InputModifiers.Control;
}
if (evt.Alt == 1)
{
modifiers |= InputModifiers.Alt;
}
if(evt.Shift == 1)
{
modifiers |= InputModifiers.Shift;
}
if (evt.Logo == 1)
{
modifiers |= InputModifiers.Windows;
}
var keyCode = KeyTransform.TransformKeyCode(evt.VirtualKeyCode);
if (keyCode.HasValue)
{
Input
( (
KeyboardDevice, new RawKeyEventArgs
timeStamp, (
eventType, KeyboardDevice,
KeyTransform.TransformKeyCode(evt.VirtualKeyCode).Value, timeStamp,
InputModifiers.None eventType,
) keyCode.Value,
); modifiers
)
);
}
} }
public void OnMouseEvent(MouseEvent evt) public void OnMouseEvent(MouseEvent evt)
@ -234,6 +264,28 @@ namespace Avalonia.Windowing
if (evt.EventType == MouseEventType.Move) if (evt.EventType == MouseEventType.Move)
_lastPosition = evt.Position; _lastPosition = evt.Position;
var modifiers = InputModifiers.None;
if (evt.Control == 1)
{
modifiers |= InputModifiers.Control;
}
if (evt.Alt == 1)
{
modifiers |= InputModifiers.Alt;
}
if (evt.Shift == 1)
{
modifiers |= InputModifiers.Shift;
}
if (evt.Logo == 1)
{
modifiers |= InputModifiers.Windows;
}
Input Input
( (
@ -245,7 +297,7 @@ namespace Avalonia.Windowing
_inputRoot, _inputRoot,
eventType, eventType,
new Point(_lastPosition.X, _lastPosition.Y), new Point(_lastPosition.X, _lastPosition.Y),
InputModifiers.None modifiers
) )
: :
new RawMouseWheelEventArgs new RawMouseWheelEventArgs
@ -255,7 +307,7 @@ namespace Avalonia.Windowing
_inputRoot, _inputRoot,
new Point(_lastPosition.X, _lastPosition.Y), new Point(_lastPosition.X, _lastPosition.Y),
new Point(evt.Position.X, evt.Position.Y), new Point(evt.Position.X, evt.Position.Y),
InputModifiers.None modifiers
) )
); );
} }

Loading…
Cancel
Save