public bool ShouldActivate(ExtendedModifierKeys modifiers)
 {
     if (modifiers != ExtendedModifierKeys.Control && modifiers != ExtendedModifierKeys.ControlAlt && modifiers != ExtendedModifierKeys.ControlShift)
     {
         return(modifiers == ExtendedModifierKeys.ControlAltShift);
     }
     return(true);
 }
        private ExtendedModifierKeys ComputeExtendedModifierKeys()
        {
            ExtendedModifierKeys extendedModifierKeys = (ExtendedModifierKeys)Keyboard.Modifiers;

            if (Keyboard.IsKeyDown(Key.Space))
            {
                extendedModifierKeys |= ExtendedModifierKeys.Space;
            }
            return(extendedModifierKeys);
        }
        public void TrySwitchModifierKeyBehavior(KeyEventArgs args)
        {
            if (this.eventRouter.ActiveBehavior == null || this.eventRouter.IsDragging || (this.eventRouter.IsButtonDown || !this.eventRouter.ActiveBehavior.ToolBehaviorContext.View.Artboard.IsMouseOver) || this.eventRouter.IsEditingText)
            {
                return;
            }
            if (this.activeModifierKeyBehavior != null && !this.eventRouter.ContainsBehavior(this.activeModifierKeyBehavior))
            {
                this.activeModifierKeyBehavior        = (ToolBehavior)null;
                this.activeModifierKeyBehaviorFactory = (IModifierKeyBehaviorFactory)null;
            }
            ExtendedModifierKeys extendedModifierKeys = this.ComputeExtendedModifierKeys();

            if (this.activeModifierKeyBehaviorFactory != null && !this.activeModifierKeyBehaviorFactory.ShouldActivate(extendedModifierKeys))
            {
                this.RemoveActiveModifierKeyBehavior();
            }
            if (args != null && !this.eventRouter.IsDragging)
            {
                Key key = args.Key == Key.System ? args.SystemKey : args.Key;
                if (extendedModifierKeys == ExtendedModifierKeys.None)
                {
                    this.suspendingMode = false;
                    return;
                }
                if (!this.modifierKeys.Contains(key) && key != Key.ImeProcessed)
                {
                    this.RemoveActiveModifierKeyBehavior();
                    this.suspendingMode = true;
                }
                if (this.suspendingMode)
                {
                    return;
                }
            }
            if (this.activeModifierKeyBehaviorFactory != null)
            {
                return;
            }
            foreach (IModifierKeyBehaviorFactory keyBehaviorFactory in this.behaviorFactories)
            {
                if (keyBehaviorFactory.ShouldActivate(extendedModifierKeys))
                {
                    ToolBehavior instance = keyBehaviorFactory.CreateInstance(this.eventRouter.ActiveBehavior.ToolBehaviorContext);
                    if (instance != null)
                    {
                        this.activeModifierKeyBehavior        = instance;
                        this.activeModifierKeyBehaviorFactory = keyBehaviorFactory;
                        this.eventRouter.PushBehavior(this.activeModifierKeyBehavior);
                        break;
                    }
                }
            }
        }
 public bool ShouldActivate(ExtendedModifierKeys modifiers)
 {
     return(modifiers == ExtendedModifierKeys.Space);
 }