[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [41181] trunk/blender/intern/ghost/intern/ GHOST_SystemWin32.cpp: UTF8 input support for Windows.

Alexander Kuznetsov kuzsasha at gmail.com
Fri Oct 21 19:40:35 CEST 2011


Revision: 41181
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=41181
Author:   alexk
Date:     2011-10-21 17:40:35 +0000 (Fri, 21 Oct 2011)
Log Message:
-----------
UTF8 input support for Windows.

ToDo:
* add support for dead keys
* other input methods (for hieroglyphs)

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

Modified: trunk/blender/intern/ghost/intern/GHOST_SystemWin32.cpp
===================================================================
--- trunk/blender/intern/ghost/intern/GHOST_SystemWin32.cpp	2011-10-21 17:37:38 UTC (rev 41180)
+++ trunk/blender/intern/ghost/intern/GHOST_SystemWin32.cpp	2011-10-21 17:40:35 UTC (rev 41181)
@@ -712,22 +712,22 @@
 	GHOST_SystemWin32 * system = (GHOST_SystemWin32 *)getSystem();
 	GHOST_TKey key = system->hardKey(window, raw, &keyDown, &vk);
 	GHOST_EventKey* event;
+
 	if (key != GHOST_kKeyUnknown) {
-		char ascii = '\0';
+		char utf8_char[6] = {0} ;
 
-		unsigned short utf16[2]={0};
+		wchar_t utf16[2]={0};
 		BYTE state[256];
-		GetKeyboardState((PBYTE)state);
+		GetKeyboardState((PBYTE)state);  
 
-		if(ToAsciiEx(vk, 0, state, utf16, 0, system->m_keylayout))
-				WideCharToMultiByte(CP_ACP, 0x00000400, 
+		if(ToUnicodeEx(vk, 0, state, utf16, 2, 0, system->m_keylayout))
+			WideCharToMultiByte(CP_UTF8, 0, 
 									(wchar_t*)utf16, 1,
-									(LPSTR) &ascii, 1,
-									NULL,NULL);
-
-		/* TODO, last arg is utf8, need to pass utf8 arg */
-		event = new GHOST_EventKey(system->getMilliSeconds(), keyDown ? GHOST_kEventKeyDown: GHOST_kEventKeyUp, window, key, ascii, NULL);
+									(LPSTR) utf8_char, 5,
+									NULL,NULL); else *utf8_char = 0;
 		
+		event = new GHOST_EventKey(system->getMilliSeconds(), keyDown ? GHOST_kEventKeyDown: GHOST_kEventKeyUp, window, key, (*utf8_char & 0x80)?'?':*utf8_char, utf8_char);
+		
 #ifdef GHOST_DEBUG
 		std::cout << ascii << std::endl;
 #endif




More information about the Bf-blender-cvs mailing list