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.
This commit is contained in:
parent
a6ebc9a813
commit
6cb692f48e
@ -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
|
||||
|
@ -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
|
||||
|
||||
/**
|
||||
|
Loading…
Reference in New Issue
Block a user