[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [32683] trunk/blender/intern/ghost/intern: Make sure separation between modifier keys is communicated from GHOST upwards too (BGE at least uses this).

Nathan Letwory nathan at letworyinteractive.com
Sun Oct 24 14:45:48 CEST 2010


Revision: 32683
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=32683
Author:   jesterking
Date:     2010-10-24 14:45:47 +0200 (Sun, 24 Oct 2010)

Log Message:
-----------
Make sure separation between modifier keys is communicated from GHOST upwards too (BGE at least uses this).

Modified Paths:
--------------
    trunk/blender/intern/ghost/intern/GHOST_SystemWin32.cpp
    trunk/blender/intern/ghost/intern/GHOST_SystemWin32.h

Modified: trunk/blender/intern/ghost/intern/GHOST_SystemWin32.cpp
===================================================================
--- trunk/blender/intern/ghost/intern/GHOST_SystemWin32.cpp	2010-10-24 11:14:18 UTC (rev 32682)
+++ trunk/blender/intern/ghost/intern/GHOST_SystemWin32.cpp	2010-10-24 12:45:47 UTC (rev 32683)
@@ -289,16 +289,19 @@
 
 GHOST_TSuccess GHOST_SystemWin32::getModifierKeys(GHOST_ModifierKeys& keys) const
 {
-	bool down = HIBYTE(::GetKeyState(VK_SHIFT)) != 0;
+	bool down = HIBYTE(::GetKeyState(VK_LSHIFT)) != 0;
 	keys.set(GHOST_kModifierKeyLeftShift, down);
+	down = HIBYTE(::GetKeyState(VK_RSHIFT)) != 0;
 	keys.set(GHOST_kModifierKeyRightShift, down);
 	
-	down = HIBYTE(::GetKeyState(VK_MENU)) != 0;
+	down = HIBYTE(::GetKeyState(VK_LMENU)) != 0;
 	keys.set(GHOST_kModifierKeyLeftAlt, down);
+	down = HIBYTE(::GetKeyState(VK_RMENU)) != 0;
 	keys.set(GHOST_kModifierKeyRightAlt, down);
 	
-	down = HIBYTE(::GetKeyState(VK_CONTROL)) != 0;
+	down = HIBYTE(::GetKeyState(VK_LCONTROL)) != 0;
 	keys.set(GHOST_kModifierKeyLeftControl, down);
+	down = HIBYTE(::GetKeyState(VK_RCONTROL)) != 0;
 	keys.set(GHOST_kModifierKeyRightControl, down);
 	
 	bool lwindown = HIBYTE(::GetKeyState(VK_LWIN)) != 0;
@@ -407,6 +410,7 @@
 	system->retrieveModifierKeys(oldModifiers);
 	system->getModifierKeys(newModifiers);
 	
+	//std::cout << wParam << " " << system->m_curKeyStatus[wParam] << " shift pressed: " << system->shiftPressed() << std::endl;
 
 	if ((wParam >= '0') && (wParam <= '9')) {
 		// VK_0 thru VK_9 are the same as ASCII '0' thru '9' (0x30 - 0x39)
@@ -432,7 +436,14 @@
 		case VK_PRIOR:    key = GHOST_kKeyUpPage;			break;
 		case VK_NEXT:     key = GHOST_kKeyDownPage;			break;
 		case VK_END:      key = GHOST_kKeyEnd;				break;
-		case VK_HOME:     key = GHOST_kKeyHome;				break;
+		case VK_HOME:
+			{
+				if(system->m_curKeyStatus[VK_NUMPAD7] && system->shiftPressed())
+					key = GHOST_kKeyNumpad7;
+				else
+					key = GHOST_kKeyHome;
+			}
+			break;
 		case VK_INSERT:   key = GHOST_kKeyInsert;			break;
 		case VK_DELETE:   key = GHOST_kKeyDelete;			break;
 		case VK_LEFT:     key = GHOST_kKeyLeftArrow;		break;
@@ -672,23 +683,38 @@
 LRESULT CALLBACK GHOST_SystemWin32::s_llKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
 {
 	GHOST_SystemWin32* system = ((GHOST_SystemWin32*)getSystem());
+	
+	bool down = false;
+	if(wParam==WM_KEYDOWN || wParam==WM_SYSKEYDOWN ){
+		down = true;
+	}
+	
+	if(nCode!=HC_ACTION)
+		return CallNextHookEx(system->m_llKeyboardHook, nCode, wParam, lParam);
+		
 	KBDLLHOOKSTRUCT &keyb = *(PKBDLLHOOKSTRUCT)(lParam);
 	system->m_prevKeyStatus[keyb.vkCode] = system->m_curKeyStatus[keyb.vkCode];
+	//std::cout << "ll: " << keyb.vkCode << " " << down << " ";
 	if(keyb.flags) {
 		if((keyb.flags & LLKHF_EXTENDED) == LLKHF_EXTENDED) {
+			//std::cout << "extended ";
 		}
 		if((keyb.flags & LLKHF_ALTDOWN) == LLKHF_ALTDOWN) {
 		}
+		if((keyb.flags & LLKHF_INJECTED)== LLKHF_INJECTED) {
+			//std::cout << "injected ";
+		}
 		if((keyb.flags & LLKHF_UP) == LLKHF_UP) {
 			system->m_curKeyStatus[keyb.vkCode] = false;
+			//std::cout << "up" << std::endl;
 		} else {
 			system->m_curKeyStatus[keyb.vkCode] = true;
+			//std::cout << "down" << std::endl;
 		}
-		if((keyb.flags & LLKHF_INJECTED)== LLKHF_INJECTED) {
-		}
 	}
 	else {
 		system->m_curKeyStatus[keyb.vkCode] = true;
+		//std::cout << "down" << std::endl;
 	}
 	
 	return CallNextHookEx(system->m_llKeyboardHook, nCode, wParam, lParam);

Modified: trunk/blender/intern/ghost/intern/GHOST_SystemWin32.h
===================================================================
--- trunk/blender/intern/ghost/intern/GHOST_SystemWin32.h	2010-10-24 11:14:18 UTC (rev 32682)
+++ trunk/blender/intern/ghost/intern/GHOST_SystemWin32.h	2010-10-24 12:45:47 UTC (rev 32683)
@@ -248,7 +248,7 @@
 	 * events generated for both keys.
 	 * @param window	The window receiving the event (the active window).
 	 */
-	GHOST_EventKey* processModifierKeys(GHOST_IWindow *window);
+	//GHOST_EventKey* processModifierKeys(GHOST_IWindow *window);
 
 	/**
 	 * Creates mouse button event.
@@ -314,7 +314,7 @@
 	/**
 	 * Check current key layout for AltGr
 	 */
-	inline virtual void keyboardAltGr();
+	inline virtual void keyboardAltGr(void);
 
 	/**
 	 * Windows call back routine for our window class.
@@ -325,6 +325,11 @@
 	 * Low-level inspection of keyboard events
 	 */
 	static LRESULT CALLBACK s_llKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam);
+	
+	/**
+	 * Check if any shiftkey is pressed
+	 */
+	inline virtual bool shiftPressed(void);
 
 	/** The current state of the modifier keys. */
 	GHOST_ModifierKeys m_modifierKeys;
@@ -352,7 +357,7 @@
 	m_modifierKeys = keys;
 }
 
-inline void GHOST_SystemWin32::keyboardAltGr()
+inline void GHOST_SystemWin32::keyboardAltGr(void)
 {
 	HKL keylayout = GetKeyboardLayout(0); // get keylayout for current thread
 	int i;
@@ -369,5 +374,10 @@
 	}
 }
 
+inline bool GHOST_SystemWin32::shiftPressed(void)
+{
+	return (m_curKeyStatus[VK_SHIFT] || m_curKeyStatus[VK_RSHIFT] || m_curKeyStatus[VK_LSHIFT]);
+}
+
 #endif // _GHOST_SYSTEM_WIN32_H_
 





More information about the Bf-blender-cvs mailing list