From 6cb692f48ebe0f68c86a7de710b0b682cf868b4f Mon Sep 17 00:00:00 2001 From: Mike Erwin Date: Thu, 26 Feb 2015 19:53:55 -0500 Subject: cleanup: ghost Win32 event processing functions Removed window arg from key conversion functions. Removed processModifierKeys declaration since that function was apparently never implemented. Using Win32-specific classes instead of their generic superclass -- this helps in a few cases like WinTab. --- intern/ghost/intern/GHOST_SystemWin32.cpp | 43 +++++++++++++++---------------- intern/ghost/intern/GHOST_SystemWin32.h | 36 ++++++++++---------------- 2 files changed, 34 insertions(+), 45 deletions(-) (limited to 'intern') diff --git a/intern/ghost/intern/GHOST_SystemWin32.cpp b/intern/ghost/intern/GHOST_SystemWin32.cpp index 650107ed181..e6cdda10c87 100644 --- a/intern/ghost/intern/GHOST_SystemWin32.cpp +++ b/intern/ghost/intern/GHOST_SystemWin32.cpp @@ -235,7 +235,7 @@ GHOST_IWindow *GHOST_SystemWin32::createWindow( const bool exclusive, const GHOST_TEmbedderWindowID parentWindow) { - GHOST_Window *window = + GHOST_WindowWin32 *window = new GHOST_WindowWin32( this, title, @@ -432,7 +432,7 @@ GHOST_TSuccess GHOST_SystemWin32::exit() return GHOST_System::exit(); } -GHOST_TKey GHOST_SystemWin32::hardKey(GHOST_IWindow *window, RAWINPUT const &raw, int *keyDown, char *vk) +GHOST_TKey GHOST_SystemWin32::hardKey(RAWINPUT const &raw, int *keyDown, char *vk) { GHOST_SystemWin32 *system = (GHOST_SystemWin32 *)getSystem(); GHOST_TKey key = GHOST_kKeyUnknown; @@ -444,7 +444,7 @@ GHOST_TKey GHOST_SystemWin32::hardKey(GHOST_IWindow *window, RAWINPUT const &raw unsigned int msg = raw.data.keyboard.Message; *keyDown = !(raw.data.keyboard.Flags & RI_KEY_BREAK) && msg != WM_KEYUP && msg != WM_SYSKEYUP; - key = this->convertKey(window, raw.data.keyboard.VKey, raw.data.keyboard.MakeCode, (raw.data.keyboard.Flags & (RI_KEY_E1 | RI_KEY_E0))); + key = this->convertKey(raw.data.keyboard.VKey, raw.data.keyboard.MakeCode, (raw.data.keyboard.Flags & (RI_KEY_E1 | RI_KEY_E0))); // extra handling of modifier keys: don't send repeats out from GHOST if (key >= GHOST_kKeyLeftShift && key <= GHOST_kKeyRightAlt) { @@ -509,7 +509,7 @@ GHOST_TKey GHOST_SystemWin32::hardKey(GHOST_IWindow *window, RAWINPUT const &raw //! note: this function can be extended to include other exotic cases as they arise. // This function was added in response to bug [#25715] // This is going to be a long list [T42426] -GHOST_TKey GHOST_SystemWin32::processSpecialKey(GHOST_IWindow *window, short vKey, short scanCode) const +GHOST_TKey GHOST_SystemWin32::processSpecialKey(short vKey, short scanCode) const { GHOST_TKey key = GHOST_kKeyUnknown; switch (PRIMARYLANGID(m_langId)) { @@ -525,7 +525,7 @@ GHOST_TKey GHOST_SystemWin32::processSpecialKey(GHOST_IWindow *window, short vKe return key; } -GHOST_TKey GHOST_SystemWin32::convertKey(GHOST_IWindow *window, short vKey, short scanCode, short extend) const +GHOST_TKey GHOST_SystemWin32::convertKey(short vKey, short scanCode, short extend) const { GHOST_TKey key; @@ -633,7 +633,7 @@ GHOST_TKey GHOST_SystemWin32::convertKey(GHOST_IWindow *window, short vKey, shor case VK_SCROLL: key = GHOST_kKeyScrollLock; break; case VK_CAPITAL: key = GHOST_kKeyCapsLock; break; case VK_OEM_8: - key = ((GHOST_SystemWin32 *)getSystem())->processSpecialKey(window, vKey, scanCode); + key = ((GHOST_SystemWin32 *)getSystem())->processSpecialKey(vKey, scanCode); break; case VK_MEDIA_PLAY_PAUSE: key = GHOST_kKeyMediaPlay; break; case VK_MEDIA_STOP: key = GHOST_kKeyMediaStop; break; @@ -650,18 +650,17 @@ GHOST_TKey GHOST_SystemWin32::convertKey(GHOST_IWindow *window, short vKey, shor GHOST_EventButton *GHOST_SystemWin32::processButtonEvent( GHOST_TEventType type, - GHOST_IWindow *window, + GHOST_WindowWin32 *window, GHOST_TButtonMask mask) { return new GHOST_EventButton(getSystem()->getMilliSeconds(), type, window, mask); } -GHOST_EventCursor *GHOST_SystemWin32::processCursorEvent(GHOST_TEventType type, GHOST_IWindow *Iwindow) +GHOST_EventCursor *GHOST_SystemWin32::processCursorEvent(GHOST_TEventType type, GHOST_WindowWin32 *window) { GHOST_TInt32 x_screen, y_screen; GHOST_SystemWin32 *system = (GHOST_SystemWin32 *) getSystem(); - GHOST_WindowWin32 *window = (GHOST_WindowWin32 *) Iwindow; system->getCursorPosition(x_screen, y_screen); @@ -713,7 +712,7 @@ GHOST_EventCursor *GHOST_SystemWin32::processCursorEvent(GHOST_TEventType type, } -GHOST_EventWheel *GHOST_SystemWin32::processWheelEvent(GHOST_IWindow *window, WPARAM wParam, LPARAM lParam) +GHOST_EventWheel *GHOST_SystemWin32::processWheelEvent(GHOST_WindowWin32 *window, WPARAM wParam, LPARAM lParam) { // short fwKeys = LOWORD(wParam); // key flags int zDelta = (short) HIWORD(wParam); // wheel rotation @@ -728,12 +727,12 @@ GHOST_EventWheel *GHOST_SystemWin32::processWheelEvent(GHOST_IWindow *window, WP } -GHOST_EventKey *GHOST_SystemWin32::processKeyEvent(GHOST_IWindow *window, RAWINPUT const &raw) +GHOST_EventKey *GHOST_SystemWin32::processKeyEvent(GHOST_WindowWin32 *window, RAWINPUT const &raw) { int keyDown = 0; char vk; GHOST_SystemWin32 *system = (GHOST_SystemWin32 *)getSystem(); - GHOST_TKey key = system->hardKey(window, raw, &keyDown, &vk); + GHOST_TKey key = system->hardKey(raw, &keyDown, &vk); GHOST_EventKey *event; if (key != GHOST_kKeyUnknown) { @@ -780,22 +779,22 @@ GHOST_EventKey *GHOST_SystemWin32::processKeyEvent(GHOST_IWindow *window, RAWINP } -GHOST_Event *GHOST_SystemWin32::processWindowEvent(GHOST_TEventType type, GHOST_IWindow *window) +GHOST_Event *GHOST_SystemWin32::processWindowEvent(GHOST_TEventType type, GHOST_WindowWin32 *window) { - GHOST_System *system = (GHOST_System *)getSystem(); + GHOST_SystemWin32 *system = (GHOST_SystemWin32 *)getSystem(); if (type == GHOST_kEventWindowActivate) { system->getWindowManager()->setActiveWindow(window); - ((GHOST_WindowWin32 *)window)->bringTabletContextToFront(); + window->bringTabletContextToFront(); } return new GHOST_Event(system->getMilliSeconds(), type, window); } #ifdef WITH_INPUT_IME -GHOST_Event *GHOST_SystemWin32::processImeEvent(GHOST_TEventType type, GHOST_IWindow *window, GHOST_TEventImeData *data) +GHOST_Event *GHOST_SystemWin32::processImeEvent(GHOST_TEventType type, GHOST_WindowWin32 *window, GHOST_TEventImeData *data) { - GHOST_System *system = (GHOST_System *)getSystem(); + GHOST_SystemWin32 *system = (GHOST_SystemWin32 *)getSystem(); return new GHOST_EventIME(system->getMilliSeconds(), type, window, data); } #endif @@ -804,11 +803,11 @@ GHOST_Event *GHOST_SystemWin32::processImeEvent(GHOST_TEventType type, GHOST_IWi GHOST_TSuccess GHOST_SystemWin32::pushDragDropEvent( GHOST_TEventType eventType, GHOST_TDragnDropTypes draggedObjectType, - GHOST_IWindow *window, + GHOST_WindowWin32 *window, int mouseX, int mouseY, void *data) { - GHOST_SystemWin32 *system = ((GHOST_SystemWin32 *)getSystem()); + GHOST_SystemWin32 *system = (GHOST_SystemWin32 *)getSystem(); return system->pushEvent(new GHOST_EventDragnDrop(system->getMilliSeconds(), eventType, draggedObjectType, @@ -912,7 +911,7 @@ LRESULT WINAPI GHOST_SystemWin32::s_wndProc(HWND hwnd, UINT msg, WPARAM wParam, bool eventHandled = false; LRESULT lResult = 0; - GHOST_SystemWin32 *system = ((GHOST_SystemWin32 *)getSystem()); + GHOST_SystemWin32 *system = (GHOST_SystemWin32 *)getSystem(); GHOST_EventManager *eventManager = system->getEventManager(); GHOST_ASSERT(system, "GHOST_SystemWin32::s_wndProc(): system not initialized"); @@ -1068,11 +1067,11 @@ LRESULT WINAPI GHOST_SystemWin32::s_wndProc(HWND hwnd, UINT msg, WPARAM wParam, // Tablet events, processed //////////////////////////////////////////////////////////////////////// case WT_PACKET: - ((GHOST_WindowWin32 *)window)->processWin32TabletEvent(wParam, lParam); + window->processWin32TabletEvent(wParam, lParam); break; case WT_CSRCHANGE: case WT_PROXIMITY: - ((GHOST_WindowWin32 *)window)->processWin32TabletInitEvent(); + window->processWin32TabletInitEvent(); break; //////////////////////////////////////////////////////////////////////// // Mouse events, processed diff --git a/intern/ghost/intern/GHOST_SystemWin32.h b/intern/ghost/intern/GHOST_SystemWin32.h index 3374b3999b4..e615ef164c8 100644 --- a/intern/ghost/intern/GHOST_SystemWin32.h +++ b/intern/ghost/intern/GHOST_SystemWin32.h @@ -53,6 +53,8 @@ class GHOST_EventWheel; class GHOST_EventWindow; class GHOST_EventDragnDrop; +class GHOST_WindowWin32; + /** * WIN32 Implementation of GHOST_System class. * \see GHOST_System. @@ -203,7 +205,7 @@ public: * \param window The window on which the event occurred * \return Indication whether the event was handled. */ - static GHOST_TSuccess pushDragDropEvent(GHOST_TEventType eventType, GHOST_TDragnDropTypes draggedObjectType, GHOST_IWindow *window, int mouseX, int mouseY, void *data); + static GHOST_TSuccess pushDragDropEvent(GHOST_TEventType eventType, GHOST_TDragnDropTypes draggedObjectType, GHOST_WindowWin32 *window, int mouseX, int mouseY, void *data); /** * Confirms quitting he program when there is just one window left open @@ -227,32 +229,21 @@ protected: /** * Converts raw WIN32 key codes from the wndproc to GHOST keys. - * \param window-> The window for this handling * \param vKey The virtual key from hardKey - * \param ScanCode The ScanCode of pressed key (simular to PS/2 Set 1) + * \param ScanCode The ScanCode of pressed key (similar to PS/2 Set 1) * \param extend Flag if key is not primly (left or right) * \return The GHOST key (GHOST_kKeyUnknown if no match). */ - GHOST_TKey convertKey(GHOST_IWindow *window, short vKey, short ScanCode, short extend) const; + GHOST_TKey convertKey(short vKey, short ScanCode, short extend) const; /** * Catches raw WIN32 key codes from WM_INPUT in the wndproc. - * \param window The window for this handling * \param raw RawInput structure with detailed info about the key event * \param keyDown Pointer flag that specify if a key is down * \param vk Pointer to virtual key * \return The GHOST key (GHOST_kKeyUnknown if no match). */ - GHOST_TKey hardKey(GHOST_IWindow *window, RAWINPUT const& raw, int *keyDown, char *vk); - - /** - * Creates modifier key event(s) and updates the key data stored locally (m_modifierKeys). - * With the modifier keys, we want to distinguish left and right keys. - * Sometimes this is not possible (Windows ME for instance). Then, we want - * events generated for both keys. - * \param window The window receiving the event (the active window). - */ - GHOST_EventKey *processModifierKeys(GHOST_IWindow *window); + GHOST_TKey hardKey(RAWINPUT const& raw, int *keyDown, char *vk); /** * Creates mouse button event. @@ -261,7 +252,7 @@ protected: * \param mask The button mask of this event. * \return The event created. */ - static GHOST_EventButton *processButtonEvent(GHOST_TEventType type, GHOST_IWindow *window, GHOST_TButtonMask mask); + static GHOST_EventButton *processButtonEvent(GHOST_TEventType type, GHOST_WindowWin32 *window, GHOST_TButtonMask mask); /** * Creates cursor event. @@ -269,7 +260,7 @@ protected: * \param window The window receiving the event (the active window). * \return The event created. */ - static GHOST_EventCursor *processCursorEvent(GHOST_TEventType type, GHOST_IWindow *Iwindow); + static GHOST_EventCursor *processCursorEvent(GHOST_TEventType type, GHOST_WindowWin32 *window); /** * Creates a mouse wheel event. @@ -277,7 +268,7 @@ protected: * \param wParam The wParam from the wndproc * \param lParam The lParam from the wndproc */ - static GHOST_EventWheel *processWheelEvent(GHOST_IWindow *window, WPARAM wParam, LPARAM lParam); + static GHOST_EventWheel *processWheelEvent(GHOST_WindowWin32 *window, WPARAM wParam, LPARAM lParam); /** * Creates a key event and updates the key data stored locally (m_modifierKeys). @@ -286,16 +277,15 @@ protected: * \param window The window receiving the event (the active window). * \param raw RawInput structure with detailed info about the key event */ - static GHOST_EventKey *processKeyEvent(GHOST_IWindow *window, RAWINPUT const& raw); + static GHOST_EventKey *processKeyEvent(GHOST_WindowWin32 *window, RAWINPUT const& raw); /** * Process special keys (VK_OEM_*), to see if current key layout * gives us anything special, like ! on french AZERTY. - * \param window The window receiving the event (the active window). * \param vKey The virtual key from hardKey * \param ScanCode The ScanCode of pressed key (simular to PS/2 Set 1) */ - GHOST_TKey processSpecialKey(GHOST_IWindow *window, short vKey, short scanCode) const; + GHOST_TKey processSpecialKey(short vKey, short scanCode) const; /** * Creates a window event. @@ -303,7 +293,7 @@ protected: * \param window The window receiving the event (the active window). * \return The event created. */ - static GHOST_Event *processWindowEvent(GHOST_TEventType type, GHOST_IWindow *window); + static GHOST_Event *processWindowEvent(GHOST_TEventType type, GHOST_WindowWin32 *window); #ifdef WITH_INPUT_IME /** @@ -313,7 +303,7 @@ protected: * \param data IME data. * \return The event created. */ - static GHOST_Event *processImeEvent(GHOST_TEventType type, GHOST_IWindow *window, GHOST_TEventImeData *data); + static GHOST_Event *processImeEvent(GHOST_TEventType type, GHOST_WindowWin32 *window, GHOST_TEventImeData *data); #endif // WITH_INPUT_IME /** -- cgit v1.2.3