src/video/wincommon/SDL_sysevents.c
changeset 1253 7c7ddaf195bf
parent 1251 86d0d01290ea
child 1272 94c0709f8856
equal deleted inserted replaced
1252:57be1c741b8b 1253:7c7ddaf195bf
    76 LONG (*HandleMessage)(_THIS, HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)=NULL;
    76 LONG (*HandleMessage)(_THIS, HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)=NULL;
    77 void (*WIN_RealizePalette)(_THIS);
    77 void (*WIN_RealizePalette)(_THIS);
    78 void (*WIN_PaletteChanged)(_THIS, HWND window);
    78 void (*WIN_PaletteChanged)(_THIS, HWND window);
    79 void (*WIN_WinPAINT)(_THIS, HDC hdc);
    79 void (*WIN_WinPAINT)(_THIS, HDC hdc);
    80 extern void DIB_SwapGamma(_THIS);
    80 extern void DIB_SwapGamma(_THIS);
       
    81 
       
    82 /* Variables and support functions for SDL_ToUnicode() */
       
    83 static int codepage;
       
    84 static int Is9xME();
       
    85 static int GetCodePage();
       
    86 static int WINAPI ToUnicode9xME(UINT vkey, UINT scancode, BYTE *keystate, Uint16 *wchars, int wsize, UINT flags);
       
    87 
       
    88 ToUnicodeFN SDL_ToUnicode = ToUnicode9xME;
       
    89 
    81 
    90 
    82 #if defined(_WIN32_WCE)
    91 #if defined(_WIN32_WCE)
    83 
    92 
    84 // dynamically load aygshell dll because we want SDL to work on HPC and be300
    93 // dynamically load aygshell dll because we want SDL to work on HPC and be300
    85 HINSTANCE aygshell = NULL;
    94 HINSTANCE aygshell = NULL;
   620 		case WM_DESTROY: {
   629 		case WM_DESTROY: {
   621 			PostQuitMessage(0);
   630 			PostQuitMessage(0);
   622 		}
   631 		}
   623 		return(0);
   632 		return(0);
   624 
   633 
       
   634 		case WM_INPUTLANGCHANGE: {
       
   635 			codepage = GetCodePage();
       
   636 		}
       
   637 		return(TRUE);
       
   638 
   625 		default: {
   639 		default: {
   626 			/* Special handling by the video driver */
   640 			/* Special handling by the video driver */
   627 			if (HandleMessage) {
   641 			if (HandleMessage) {
   628 				return(HandleMessage(current_video,
   642 				return(HandleMessage(current_video,
   629 			                     hwnd, msg, wParam, lParam));
   643 			                     hwnd, msg, wParam, lParam));
   726 #endif /* WM_MOUSELEAVE */
   740 #endif /* WM_MOUSELEAVE */
   727 
   741 
   728 	/* Check for SDL_WINDOWID hack */
   742 	/* Check for SDL_WINDOWID hack */
   729 	SDL_windowid = getenv("SDL_WINDOWID");
   743 	SDL_windowid = getenv("SDL_WINDOWID");
   730 
   744 
       
   745 	/* Initialise variables for SDL_ToUnicode() */
       
   746 	codepage = GetCodePage();
       
   747 	SDL_ToUnicode = Is9xME() ? ToUnicode9xME : ToUnicode;
       
   748 
   731 	app_registered = 1;
   749 	app_registered = 1;
   732 	return(0);
   750 	return(0);
   733 }
   751 }
   734 
   752 
   735 /*
   753 /*
   749 		}
   767 		}
   750 	}
   768 	}
   751 	app_registered = 0;
   769 	app_registered = 0;
   752 }
   770 }
   753 
   771 
       
   772 /* JFP: Implementation of ToUnicode() that works on 9x/ME/2K/XP */
       
   773 
       
   774 static int Is9xME()
       
   775 {
       
   776 	OSVERSIONINFO   info;
       
   777 
       
   778 	memset(&info, 0, sizeof(info));
       
   779 	info.dwOSVersionInfoSize = sizeof(info);
       
   780 	if (!GetVersionEx(&info)) {
       
   781 		return 0;
       
   782 	}
       
   783 	return (info.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS);
       
   784 }
       
   785 
       
   786 static int GetCodePage()
       
   787 {
       
   788 	char	buff[8];
       
   789 	int	lcid = MAKELCID(LOWORD(GetKeyboardLayout(0)), SORT_DEFAULT);
       
   790 	int	cp = GetACP();
       
   791 
       
   792 	if (GetLocaleInfo(lcid, LOCALE_IDEFAULTANSICODEPAGE, buff, sizeof(buff))) {
       
   793 		cp = atoi(buff);
       
   794 	}
       
   795 	return cp;
       
   796 }
       
   797 
       
   798 static int WINAPI ToUnicode9xME(UINT vkey, UINT scancode, PBYTE keystate, LPWSTR wchars, int wsize, UINT flags)
       
   799 {
       
   800 	BYTE	chars[2];
       
   801 
       
   802 	if (ToAsciiEx(vkey, scancode, keystate, (WORD*)chars, 0, GetKeyboardLayout(0)) == 1) {
       
   803 		return MultiByteToWideChar(codepage, 0, chars, 1, wchars, wsize);
       
   804 	}
       
   805 	return 0;
       
   806 }
       
   807