示例#1
0
        void SetInputMode(SetInputModeEvent e)
        {
            if (e.Mode == null)
            {
                Raise(new LogEvent(LogEvent.Level.Info,
                                   $"InputMode: {InputMode} (Stack: {string.Join(", ", _inputModeStack)})"));
                return;
            }

            _inputModes.TryGetValue(e.Mode.Value, out var activeMode);
            if (InputMode == e.Mode && activeMode?.IsActive == true)
            {
                return;
            }

            foreach (var mode in _inputModes.Values)
            {
                mode.IsActive = false;
            }

            if (activeMode != null)
            {
                activeMode.IsActive = true;
            }

            InputMode = e.Mode.Value;
        }
示例#2
0
        public InputManager()
        {
            On <SetInputModeEvent>(SetInputMode);
            On <MouseModeEvent>(SetMouseMode);
            On <PushMouseModeEvent>(e =>
            {
                var inputManager = Resolve <IInputManager>();
                _mouseModeStack.Push(inputManager.MouseMode);
                var setEvent = new MouseModeEvent(e.Mode);
                SetMouseMode(setEvent);
                Raise(setEvent);
            });
            On <PopMouseModeEvent>(e =>
            {
                if (_mouseModeStack.Count == 0)
                {
                    return;
                }

                var setEvent = new MouseModeEvent(_mouseModeStack.Pop());
                SetMouseMode(setEvent);
                Raise(setEvent);
            });
            On <PushInputModeEvent>(e =>
            {
                var inputManager = Resolve <IInputManager>();
                _inputModeStack.Push(inputManager.InputMode);
                var setEvent = new SetInputModeEvent(e.Mode);
                SetInputMode(setEvent);
                Raise(setEvent);
            });
            On <PopInputModeEvent>(e =>
            {
                if (_inputModeStack.Count == 0)
                {
                    return;
                }

                var setEvent = new SetInputModeEvent(_inputModeStack.Pop());
                SetInputMode(setEvent);
                Raise(setEvent);
            });
        }
示例#3
0
        void SetInputMode(SetInputModeEvent e)
        {
            if (InputMode == e.Mode)
            {
                return;
            }

            foreach (var mode in _inputModes)
            {
                if (mode.Key == e.Mode)
                {
                    Exchange.Attach(mode.Value);
                }
                else
                {
                    mode.Value.Detach();
                }
            }

            InputMode = e.Mode;
        }