void GameView::keyPressEvent( QKeyEvent *event) { if (m_pGameEditor != nullptr) { CasaEngine::SystemEvent Evt; Evt.Type = CasaEngine::SystemEvent::KeyPressed; Evt.Key.Alt = (Qt::AltModifier & event->nativeModifiers()) != 0;//enum KeyboardModifier Evt.Key.Control = (Qt::ControlModifier & event->nativeModifiers()) != 0; Evt.Key.Shift = (Qt::ShiftModifier & event->nativeModifiers()) != 0; Evt.Key.Code = VirtualKeyCodeToSF(event->key()); // VirtualKeyCodeToSF(WParam, LParam); /*Logging.Log(CasaEngine::Trace, "mdf=%d, code=%d, key=%d\n", event->nativeModifiers(), event->nativeScanCode(), event->nativeVirtualKey());*/ m_pGameEditor->GetInput().OnEvent(Evt); } }
//////////////////////////////////////////////////////////// /// Process a Win32 event //////////////////////////////////////////////////////////// void WindowImplWin32::ProcessEvent(UINT Message, WPARAM WParam, LPARAM LParam) { // Don't process any message until window is created if (myHandle == NULL) return; switch (Message) { // Destroy event case WM_DESTROY : { // Here we must cleanup resources ! Cleanup(); break; } // Set cursor event case WM_SETCURSOR : { // The mouse has moved, if the cursor is in our window we must refresh the cursor if (LOWORD(LParam) == HTCLIENT) SetCursor(myCursor); break; } // Close event case WM_CLOSE : { Event Evt; Evt.Type = Event::Closed; SendEvent(Evt); break; } // Resize event case WM_SIZE : { // Update window size RECT Rect; GetClientRect(myHandle, &Rect); myWidth = Rect.right - Rect.left; myHeight = Rect.bottom - Rect.top; Event Evt; Evt.Type = Event::Resized; Evt.Size.Width = myWidth; Evt.Size.Height = myHeight; SendEvent(Evt); break; } // Gain focus event case WM_SETFOCUS : { Event Evt; Evt.Type = Event::GainedFocus; SendEvent(Evt); break; } // Lost focus event case WM_KILLFOCUS : { Event Evt; Evt.Type = Event::LostFocus; SendEvent(Evt); break; } // Text event case WM_CHAR : { if (myKeyRepeatEnabled || ((LParam & (1 << 30)) == 0)) { Event Evt; Evt.Type = Event::TextEntered; Evt.Text.Unicode = static_cast<Uint32>(WParam); SendEvent(Evt); } break; } // Keydown event case WM_KEYDOWN : case WM_SYSKEYDOWN : { if (myKeyRepeatEnabled || ((HIWORD(LParam) & KF_REPEAT) == 0)) { Event Evt; Evt.Type = Event::KeyPressed; Evt.Key.Alt = HIWORD(GetAsyncKeyState(VK_MENU)) != 0; Evt.Key.Control = HIWORD(GetAsyncKeyState(VK_CONTROL)) != 0; Evt.Key.Shift = HIWORD(GetAsyncKeyState(VK_SHIFT)) != 0; Evt.Key.Code = VirtualKeyCodeToSF(WParam, LParam); SendEvent(Evt); } break; } // Keyup event case WM_KEYUP : case WM_SYSKEYUP : { Event Evt; Evt.Type = Event::KeyReleased; Evt.Key.Alt = HIWORD(GetAsyncKeyState(VK_MENU)) != 0; Evt.Key.Control = HIWORD(GetAsyncKeyState(VK_CONTROL)) != 0; Evt.Key.Shift = HIWORD(GetAsyncKeyState(VK_SHIFT)) != 0; Evt.Key.Code = VirtualKeyCodeToSF(WParam, LParam); SendEvent(Evt); break; } // Mouse wheel event case WM_MOUSEWHEEL : { Event Evt; Evt.Type = Event::MouseWheelMoved; Evt.MouseWheel.Delta = static_cast<Int16>(HIWORD(WParam)) / 120; SendEvent(Evt); break; } // Mouse left button down event case WM_LBUTTONDOWN : { Event Evt; Evt.Type = Event::MouseButtonPressed; Evt.MouseButton.Button = Mouse::Left; Evt.MouseButton.X = LOWORD(LParam); Evt.MouseButton.Y = HIWORD(LParam); SendEvent(Evt); break; } // Mouse left button up event case WM_LBUTTONUP : { Event Evt; Evt.Type = Event::MouseButtonReleased; Evt.MouseButton.Button = Mouse::Left; Evt.MouseButton.X = LOWORD(LParam); Evt.MouseButton.Y = HIWORD(LParam); SendEvent(Evt); break; } // Mouse right button down event case WM_RBUTTONDOWN : { Event Evt; Evt.Type = Event::MouseButtonPressed; Evt.MouseButton.Button = Mouse::Right; Evt.MouseButton.X = LOWORD(LParam); Evt.MouseButton.Y = HIWORD(LParam); SendEvent(Evt); break; } // Mouse right button up event case WM_RBUTTONUP : { Event Evt; Evt.Type = Event::MouseButtonReleased; Evt.MouseButton.Button = Mouse::Right; Evt.MouseButton.X = LOWORD(LParam); Evt.MouseButton.Y = HIWORD(LParam); SendEvent(Evt); break; } // Mouse wheel button down event case WM_MBUTTONDOWN : { Event Evt; Evt.Type = Event::MouseButtonPressed; Evt.MouseButton.Button = Mouse::Middle; Evt.MouseButton.X = LOWORD(LParam); Evt.MouseButton.Y = HIWORD(LParam); SendEvent(Evt); break; } // Mouse wheel button up event case WM_MBUTTONUP : { Event Evt; Evt.Type = Event::MouseButtonReleased; Evt.MouseButton.Button = Mouse::Middle; Evt.MouseButton.X = LOWORD(LParam); Evt.MouseButton.Y = HIWORD(LParam); SendEvent(Evt); break; } // Mouse X button down event case WM_XBUTTONDOWN : { Event Evt; Evt.Type = Event::MouseButtonPressed; Evt.MouseButton.Button = HIWORD(WParam) == XBUTTON1 ? Mouse::XButton1 : Mouse::XButton2; Evt.MouseButton.X = LOWORD(LParam); Evt.MouseButton.Y = HIWORD(LParam); SendEvent(Evt); break; } // Mouse X button up event case WM_XBUTTONUP : { Event Evt; Evt.Type = Event::MouseButtonReleased; Evt.MouseButton.Button = HIWORD(WParam) == XBUTTON1 ? Mouse::XButton1 : Mouse::XButton2; Evt.MouseButton.X = LOWORD(LParam); Evt.MouseButton.Y = HIWORD(LParam); SendEvent(Evt); break; } // Mouse move event case WM_MOUSEMOVE : { // Check if we need to generate a MouseEntered event if (!myIsCursorIn) { TRACKMOUSEEVENT MouseEvent; MouseEvent.cbSize = sizeof(TRACKMOUSEEVENT); MouseEvent.hwndTrack = myHandle; MouseEvent.dwFlags = TME_LEAVE; TrackMouseEvent(&MouseEvent); myIsCursorIn = true; Event Evt; Evt.Type = Event::MouseEntered; SendEvent(Evt); } Event Evt; Evt.Type = Event::MouseMoved; Evt.MouseMove.X = LOWORD(LParam); Evt.MouseMove.Y = HIWORD(LParam); SendEvent(Evt); break; } // Mouse leave event case WM_MOUSELEAVE : { myIsCursorIn = false; Event Evt; Evt.Type = Event::MouseLeft; SendEvent(Evt); break; } } }