mirror of
				https://github.com/libsdl-org/SDL.git
				synced 2025-10-26 12:27:44 +00:00 
			
		
		
		
	Added: Support for showing the IME Candidate Window on Windows
This commit is contained in:
		| @@ -557,6 +557,15 @@ extern "C" { | ||||
|  */ | ||||
| #define SDL_HINT_IME_INTERNAL_EDITING "SDL_IME_INTERNAL_EDITING" | ||||
|  | ||||
| /** | ||||
|  * \brief A variable to control whether certain IMEs should show native UI components (such as the Candidate List) instead of suppressing them. | ||||
|  * | ||||
|  * The variable can be set to the following values: | ||||
|  *   "0"       - Native UI components are not display. (default) | ||||
|  *   "1"       - Native UI components are displayed. | ||||
|  */ | ||||
| #define SDL_HINT_IME_SHOW_UI "SDL_IME_SHOW_UI" | ||||
|  | ||||
| /** | ||||
|  * \brief  A variable controlling whether the home indicator bar on iPhone X | ||||
|  *         should be hidden. | ||||
|   | ||||
| @@ -23,6 +23,7 @@ | ||||
| #if SDL_VIDEO_DRIVER_WINDOWS | ||||
|  | ||||
| #include "SDL_windowsvideo.h" | ||||
| #include "SDL_hints.h" | ||||
|  | ||||
| #include "../../events/SDL_keyboard_c.h" | ||||
| #include "../../events/scancodes_windows.h" | ||||
| @@ -245,15 +246,23 @@ WIN_SetTextInputRect(_THIS, SDL_Rect *rect) | ||||
|     himc = ImmGetContext(videodata->ime_hwnd_current); | ||||
|     if (himc) | ||||
|     { | ||||
|         COMPOSITIONFORM cf; | ||||
|         CANDIDATEFORM cf; | ||||
|         cf.dwIndex = 0; | ||||
|         cf.dwStyle = CFS_POINT; | ||||
|         cf.ptCurrentPos.x = videodata->ime_rect.x; | ||||
|         cf.ptCurrentPos.y = videodata->ime_rect.y; | ||||
|         cf.dwStyle = CFS_FORCE_POSITION; | ||||
|         ImmSetCompositionWindow(himc, &cf); | ||||
|          | ||||
|         ImmSetCandidateWindow(himc, &cf); | ||||
|         ImmReleaseContext(videodata->ime_hwnd_current, himc); | ||||
|     } | ||||
| } | ||||
|  | ||||
| static SDL_bool | ||||
| WIN_ShouldShowNativeUI() | ||||
| { | ||||
|     return SDL_GetHintBoolean(SDL_HINT_IME_SHOW_UI, SDL_FALSE); | ||||
| } | ||||
|  | ||||
| #ifdef SDL_DISABLE_WINDOWS_IME | ||||
|  | ||||
|  | ||||
| @@ -371,6 +380,9 @@ IME_Init(SDL_VideoData *videodata, HWND hwnd) | ||||
|     videodata->ime_available = SDL_TRUE; | ||||
|     IME_UpdateInputLocale(videodata); | ||||
|     IME_SetupAPI(videodata); | ||||
|     if (WIN_ShouldShowNativeUI()) | ||||
|         videodata->ime_uiless = SDL_FALSE; | ||||
|     else | ||||
|         videodata->ime_uiless = UILess_SetupSinks(videodata); | ||||
|     IME_UpdateInputLocale(videodata); | ||||
|     IME_Disable(videodata, hwnd); | ||||
|   | ||||
		Reference in New Issue
	
	Block a user
	 Zach Reedy
					Zach Reedy