private bool HandleBlocks(Key key)
        {
            if (new[] {
                Key.W, Key.A, Key.S, Key.D
            }.Contains(key) == false)
            {
                return(false);
            }
            _blockPos = new Vector2();

            if (ActiveKeys[Key.W])
            {
                _blockPos.Y = 1;
            }
            if (ActiveKeys[Key.A])
            {
                _blockPos.X = 1;
            }
            if (ActiveKeys[Key.S])
            {
                _blockPos.Y = -1;
            }
            if (ActiveKeys[Key.D])
            {
                _blockPos.X = -1;
            }

            return(true);
        }
        public void OnKeyUp(Key key)
        {
            var hasChangd = false;

            if (key == Key.Q)
            {
                ChangeCase = false; hasChangd = true;
            }
            if (key == Key.E)
            {
                ChangeSymbols = false; hasChangd = true;
            }

            if (ActiveKeys.ContainsKey(key))
            {
                ActiveKeys[key] = false;
            }

            if (HandleBlocks(key))
            {
                hasChangd = true;
            }

            if (hasChangd && KeyChange != null)
            {
                KeyChange(this);
            }
        }
        public void OnKeyDown(Key key)
        {
            ResetButtons();

            var hasChangd = false;

            if (key == Key.Back)
            {
                Delete = true; hasChangd = true;
            }
            if (key == Key.Space)
            {
                Space = true; hasChangd = true;
            }
            if (key == Key.E)
            {
                ChangeSymbols = true; hasChangd = true;
            }
            if (key == Key.Q)
            {
                ChangeCase = true; hasChangd = true;
            }
            if (key == Key.Z)
            {
                MoveLeft = true; hasChangd = true;
            }
            if (key == Key.X)
            {
                MoveRight = true; hasChangd = true;
            }
            if (key == Key.F12)
            {
                OpenClose = true; hasChangd = true;
            }
            if (key == Key.Enter)
            {
                Enter = true; hasChangd = true;
            }

            _charPos = new Vector2();
            if (new[] {
                Key.Up, Key.Left, Key.Right, Key.Down
            }.Contains(key))
            {
                hasChangd = true;
                if (key == Key.Up)
                {
                    _charPos.Y = 1;
                }
                if (key == Key.Left)
                {
                    _charPos.X = 1;
                }
                if (key == Key.Down)
                {
                    _charPos.Y = -1;
                }
                if (key == Key.Right)
                {
                    _charPos.X = -1;
                }
            }

            if (ActiveKeys.ContainsKey(key))
            {
                ActiveKeys[key] = true;
            }

            if (HandleBlocks(key))
            {
                hasChangd = true;
            }

            if (hasChangd && KeyChange != null)
            {
                KeyChange(this);
            }
            _charPos = new Vector2();
            ResetButtons();
        }