Exemple #1
0
 public bool IsKeyDown(SkiVirtualKey key)
 {
     lock (_downKeys)
     {
         return(_downKeys.Contains(key));
     }
 }
Exemple #2
0
        public void OnKeyDown(SkiVirtualKey key)
        {
            lock (_downKeys)
            {
                if (!_downKeys.Add(key))
                {
                    return;
                }
            }

            lock (_keyBindingsMap)
            {
                if (_keyBindingsMap.TryGetValue(key, out var keyBindings))
                {
                    var isInputViewFocused = IsInputViewFocused;

                    var matchedKeyBindings = keyBindings
                                             .Where(b => !isInputViewFocused || b.BehaviorWhenInputViewFocused == BehaviorWhenInputViewFocused.Active)
                                             .Where(b => b.KeyCombination.Modifiers.All(IsKeyDown))
                                             .Where(b => b.Predicate.Invoke())
                                             .OrderByDescending(b => b.KeyCombination.Modifiers.Count);

                    var maxModifierCount = 0;
                    foreach (var matchedKeyBinding in matchedKeyBindings)
                    {
                        var keyCombinationModifierCount = matchedKeyBinding.KeyCombination.Modifiers.Count;
                        if (maxModifierCount > keyCombinationModifierCount)
                        {
                            break;
                        }

                        maxModifierCount = keyCombinationModifierCount;
                        matchedKeyBinding.OnPressed();
                    }
                }
            }

            KeyDown.Invoke(key);
        }
Exemple #3
0
        public void OnKeyUp(SkiVirtualKey key)
        {
            lock (_downKeys)
            {
                if (!_downKeys.Remove(key))
                {
                    return;
                }
            }

            lock (_keyBindingsMap)
            {
                if (_keyBindingsMap.TryGetValue(key, out var keyBindings))
                {
                    var matchedKeyBindings = keyBindings.Where(b => b.IsPressed);
                    foreach (var matchedKeyBinding in matchedKeyBindings)
                    {
                        matchedKeyBinding.OnReleased();
                    }
                }
            }

            KeyUp.Invoke(key);
        }
Exemple #4
0
 public bool IsKeyUp(SkiVirtualKey key)
 {
     return(!IsKeyDown(key));
 }
Exemple #5
0
 public SkiKeyCombination(SkiVirtualKey key, IReadOnlyCollection <SkiVirtualKey> modifiers = null)
 {
     Key       = key;
     Modifiers = modifiers ?? new SkiVirtualKey[0];
 }