예제 #1
0
        void OnKeyChar(InputEventKeyboard e)
        {
            // Control key sends a strange wm_char message ...
            if (e.Control && !e.Alt)
            {
                return;
            }
            InputEventKeyboard ek = LastKeyPressEvent;

            if (ek == null)
            {
                Tracer.Warn("No corresponding KeyPress event for a WM_CHAR message.");
            }
            else
            {
                ek.OverrideKeyChar(e.KeyCode);
            }
        }
예제 #2
0
        private void onKeyChar(InputEventKeyboard e)
        {
            // Control key sends a strange wm_char message ...
            if(e.Control && !e.Alt)
            {
                return;
            }

            InputEventKeyboard pressEvent = LastKeyPressEvent;
            if(pressEvent == null)
            {
                Tracer.Critical("No corresponding KeyPress event for this WM_CHAR message.");
            }
            else
            {
                pressEvent.OverrideKeyChar(e.KeyCode);
            }
        }
예제 #3
0
        public void Update(double totalTime, double frameTime)
        {
            m_MouseEvents.Clear();
            m_KeyboardEvents.Clear();

            var mouseState = Mouse.GetState();
            var keyState   = Keyboard.GetState();

            if (mouseState.X != m_MouseState.X || mouseState.Y != m_MouseState.Y)
            {
                m_LastMouseMove = totalTime;
            }

            if (mouseState.LeftButton != m_MouseState.LeftButton)
            {
                var buttonState = mouseState.LeftButton == ButtonState.Pressed ? MouseEvent.Down : MouseEvent.Up;
                m_MouseEvents.Add(new InputEventMouse(buttonState, WinMouseButtons.Left, 0, m_MouseState.X, m_MouseState.Y, 0, 0));
            }

            if (mouseState.RightButton != m_MouseState.RightButton)
            {
                var buttonState = mouseState.RightButton == ButtonState.Pressed ? MouseEvent.Down : MouseEvent.Up;
                m_MouseEvents.Add(new InputEventMouse(buttonState, WinMouseButtons.Right, 0, m_MouseState.X, m_MouseState.Y, 0, 0));
            }

            if (mouseState.MiddleButton != m_MouseState.RightButton)
            {
                var buttonState = mouseState.MiddleButton == ButtonState.Pressed ? MouseEvent.Down : MouseEvent.Up;
                m_MouseEvents.Add(new InputEventMouse(buttonState, WinMouseButtons.Middle, 0, m_MouseState.X, m_MouseState.Y, 0, 0));
            }

            var oldKeys = new List <Keys>(m_KeyboardState.GetPressedKeys());
            var newKeys = new List <Keys>(keyState.GetPressedKeys());

            m_Modifiers = 0;

            if (keyState.IsKeyDown(Keys.LeftShift) || keyState.IsKeyDown(Keys.RightShift))
            {
                m_Modifiers |= (int)WinKeys.Shift;
            }

            if (keyState.IsKeyDown(Keys.LeftAlt) || keyState.IsKeyDown(Keys.RightAlt))
            {
                m_Modifiers |= (int)WinKeys.Alt;
            }

            if (keyState.IsKeyDown(Keys.LeftControl) || keyState.IsKeyDown(Keys.RightControl))
            {
                m_Modifiers |= (int)WinKeys.Control;
            }

            foreach (var k in oldKeys)
            {
                if (!newKeys.Contains(k))
                {
                    m_KeyboardEvents.Add(new InputEventKeyboard(KeyboardEvent.Up, TranslateToWinKey(k), m_Modifiers));
                }
            }

            foreach (var k in newKeys)
            {
                if (!oldKeys.Contains(k))
                {
                    m_KeyboardEvents.Add(new InputEventKeyboard(KeyboardEvent.Down, TranslateToWinKey(k), m_Modifiers));
                    var press = new InputEventKeyboard(KeyboardEvent.Press, TranslateToWinKey(k), m_Modifiers);
                    press.OverrideKeyChar(TranslateToPrintableChar(k, keyState));
                    m_KeyboardEvents.Add(press);
                }
            }

            m_MouseState     = mouseState;
            m_KeyboardState  = keyState;
            m_LastUpdateTime = totalTime;
        }