Browse Source

Make KeyGestures with +,-,. in them match with both the non-numpad keys and the matching numpad keys.

Fixes #225
pull/1319/head
Jeremy Koritzinsky 8 years ago
parent
commit
b463d04e9f
  1. 17
      src/Avalonia.Input/KeyGesture.cs
  2. 28
      tests/Avalonia.Input.UnitTests/KeyGestureParseTests.cs
  3. 44
      tests/Avalonia.Input.UnitTests/KeyGestureTests.cs

17
src/Avalonia.Input/KeyGesture.cs

@ -111,6 +111,21 @@ namespace Avalonia.Input
return string.Join(" + ", parts);
}
public bool Matches(KeyEventArgs keyEvent) => keyEvent.Key == Key && keyEvent.Modifiers == Modifiers;
public bool Matches(KeyEventArgs keyEvent) => ResolveNumPadOperationKey(keyEvent.Key) == Key && keyEvent.Modifiers == Modifiers;
private Key ResolveNumPadOperationKey(Key key)
{
switch (key)
{
case Key.Add:
return Key.OemPlus;
case Key.Subtract:
return Key.OemMinus;
case Key.Decimal:
return Key.OemPeriod;
default:
return key;
}
}
}
}

28
tests/Avalonia.Input.UnitTests/KeyGestureParseTests.cs

@ -1,28 +0,0 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Xunit;
namespace Avalonia.Input.UnitTests
{
public class KeyGestureParseTests
{
private static readonly Dictionary<string, KeyGesture> SampleData = new Dictionary<string, KeyGesture>
{
{"Ctrl+A", new KeyGesture {Key = Key.A, Modifiers = InputModifiers.Control}},
{" \tShift\t+Alt +B", new KeyGesture {Key = Key.B, Modifiers = InputModifiers.Shift|InputModifiers.Alt} },
{"Control++", new KeyGesture {Key = Key.OemPlus, Modifiers = InputModifiers.Control} }
};
[Fact]
public void Key_Gesture_Is_Able_To_Parse_Sample_Data()
{
foreach (var d in SampleData)
Assert.Equal(d.Value, KeyGesture.Parse(d.Key));
}
}
}

44
tests/Avalonia.Input.UnitTests/KeyGestureTests.cs

@ -0,0 +1,44 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Xunit;
namespace Avalonia.Input.UnitTests
{
public class KeyGestureTests
{
public static readonly IEnumerable<object[]> SampleData = new object[][]
{
new object[]{"Ctrl+A", new KeyGesture {Key = Key.A, Modifiers = InputModifiers.Control}},
new object[]{" \tShift\t+Alt +B", new KeyGesture {Key = Key.B, Modifiers = InputModifiers.Shift|InputModifiers.Alt} },
new object[]{"Control++", new KeyGesture {Key = Key.OemPlus, Modifiers = InputModifiers.Control} }
};
[Theory]
[MemberData(nameof(SampleData))]
public void Key_Gesture_Is_Able_To_Parse_Sample_Data(string text, KeyGesture gesture)
{
Assert.Equal(gesture, KeyGesture.Parse(text));
}
[Theory]
[InlineData(Key.OemMinus, Key.Subtract)]
[InlineData(Key.OemPlus, Key.Add)]
[InlineData(Key.OemPeriod, Key.Decimal)]
public void Key_Gesture_Matches_NumPad_To_Regular_Digit(Key gestureKey, Key pressedKey)
{
var keyGesture = new KeyGesture
{
Key = gestureKey
};
Assert.True(keyGesture.Matches(new KeyEventArgs
{
Key = pressedKey
}));
}
}
}
Loading…
Cancel
Save