Browse Source

Added KeyUp event.

pull/58/head
Steven Kirk 11 years ago
parent
commit
3ac8bdcf37
  1. 16
      Perspex.Input/InputElement.cs
  2. 6
      Perspex.Input/KeyboardDevice.cs
  3. 11
      Windows/Perspex.Win32/WindowImpl.cs

16
Perspex.Input/InputElement.cs

@ -46,6 +46,11 @@ namespace Perspex.Input
"KeyDown", "KeyDown",
RoutingStrategies.Tunnel | RoutingStrategies.Bubble); RoutingStrategies.Tunnel | RoutingStrategies.Bubble);
public static readonly RoutedEvent<KeyEventArgs> KeyUpEvent =
RoutedEvent.Register<InputElement, KeyEventArgs>(
"KeyUp",
RoutingStrategies.Tunnel | RoutingStrategies.Bubble);
public static readonly RoutedEvent<PointerEventArgs> PointerEnterEvent = public static readonly RoutedEvent<PointerEventArgs> PointerEnterEvent =
RoutedEvent.Register<InputElement, PointerEventArgs>("PointerEnter", RoutingStrategies.Direct); RoutedEvent.Register<InputElement, PointerEventArgs>("PointerEnter", RoutingStrategies.Direct);
@ -79,6 +84,7 @@ namespace Perspex.Input
GotFocusEvent.AddClassHandler<InputElement>(x => x.OnGotFocus); GotFocusEvent.AddClassHandler<InputElement>(x => x.OnGotFocus);
LostFocusEvent.AddClassHandler<InputElement>(x => x.OnLostFocus); LostFocusEvent.AddClassHandler<InputElement>(x => x.OnLostFocus);
KeyDownEvent.AddClassHandler<InputElement>(x => x.OnKeyDown); KeyDownEvent.AddClassHandler<InputElement>(x => x.OnKeyDown);
KeyDownEvent.AddClassHandler<InputElement>(x => x.OnKeyUp);
PointerEnterEvent.AddClassHandler<InputElement>(x => x.OnPointerEnter); PointerEnterEvent.AddClassHandler<InputElement>(x => x.OnPointerEnter);
PointerLeaveEvent.AddClassHandler<InputElement>(x => x.OnPointerLeave); PointerLeaveEvent.AddClassHandler<InputElement>(x => x.OnPointerLeave);
PointerMovedEvent.AddClassHandler<InputElement>(x => x.OnPointerMoved); PointerMovedEvent.AddClassHandler<InputElement>(x => x.OnPointerMoved);
@ -105,6 +111,12 @@ namespace Perspex.Input
remove { this.RemoveHandler(KeyDownEvent, value); } remove { this.RemoveHandler(KeyDownEvent, value); }
} }
public event EventHandler<KeyEventArgs> KeyUp
{
add { this.AddHandler(KeyUpEvent, value); }
remove { this.RemoveHandler(KeyUpEvent, value); }
}
public event EventHandler<PointerEventArgs> PointerEnter public event EventHandler<PointerEventArgs> PointerEnter
{ {
add { this.AddHandler(PointerEnterEvent, value); } add { this.AddHandler(PointerEnterEvent, value); }
@ -243,6 +255,10 @@ namespace Perspex.Input
} }
} }
protected virtual void OnKeyUp(KeyEventArgs e)
{
}
protected virtual void OnPointerEnter(PointerEventArgs e) protected virtual void OnPointerEnter(PointerEventArgs e)
{ {
this.IsPointerOver = true; this.IsPointerOver = true;

6
Perspex.Input/KeyboardDevice.cs

@ -83,9 +83,13 @@ namespace Perspex.Input
switch (e.Type) switch (e.Type)
{ {
case RawKeyEventType.KeyDown: case RawKeyEventType.KeyDown:
case RawKeyEventType.KeyUp:
var routedEvent = e.Type == RawKeyEventType.KeyDown ?
InputElement.KeyDownEvent : InputElement.KeyUpEvent;
KeyEventArgs ev = new KeyEventArgs KeyEventArgs ev = new KeyEventArgs
{ {
RoutedEvent = InputElement.KeyDownEvent, RoutedEvent = routedEvent,
Device = this, Device = this,
Key = e.Key, Key = e.Key,
Text = e.Text, Text = e.Text,

11
Windows/Perspex.Win32/WindowImpl.cs

@ -256,6 +256,17 @@ namespace Perspex.Win32
WindowsKeyboardDevice.Instance.StringFromVirtualKey((uint)wParam)); WindowsKeyboardDevice.Instance.StringFromVirtualKey((uint)wParam));
break; break;
case UnmanagedMethods.WindowsMessage.WM_KEYUP:
case UnmanagedMethods.WindowsMessage.WM_SYSKEYUP:
WindowsKeyboardDevice.Instance.UpdateKeyStates();
e = new RawKeyEventArgs(
WindowsKeyboardDevice.Instance,
timestamp,
RawKeyEventType.KeyUp,
KeyInterop.KeyFromVirtualKey((int)wParam),
WindowsKeyboardDevice.Instance.StringFromVirtualKey((uint)wParam));
break;
case UnmanagedMethods.WindowsMessage.WM_LBUTTONDOWN: case UnmanagedMethods.WindowsMessage.WM_LBUTTONDOWN:
e = new RawMouseEventArgs( e = new RawMouseEventArgs(
WindowsMouseDevice.Instance, WindowsMouseDevice.Instance,

Loading…
Cancel
Save