mirror of https://github.com/encounter/SDL.git
Added: Support for showing the IME Candidate Window on Windows
This commit is contained in:
parent
183eb0673b
commit
6f97205229
|
@ -557,6 +557,15 @@ extern "C" {
|
||||||
*/
|
*/
|
||||||
#define SDL_HINT_IME_INTERNAL_EDITING "SDL_IME_INTERNAL_EDITING"
|
#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
|
* \brief A variable controlling whether the home indicator bar on iPhone X
|
||||||
* should be hidden.
|
* should be hidden.
|
||||||
|
|
|
@ -23,6 +23,7 @@
|
||||||
#if SDL_VIDEO_DRIVER_WINDOWS
|
#if SDL_VIDEO_DRIVER_WINDOWS
|
||||||
|
|
||||||
#include "SDL_windowsvideo.h"
|
#include "SDL_windowsvideo.h"
|
||||||
|
#include "SDL_hints.h"
|
||||||
|
|
||||||
#include "../../events/SDL_keyboard_c.h"
|
#include "../../events/SDL_keyboard_c.h"
|
||||||
#include "../../events/scancodes_windows.h"
|
#include "../../events/scancodes_windows.h"
|
||||||
|
@ -245,15 +246,23 @@ WIN_SetTextInputRect(_THIS, SDL_Rect *rect)
|
||||||
himc = ImmGetContext(videodata->ime_hwnd_current);
|
himc = ImmGetContext(videodata->ime_hwnd_current);
|
||||||
if (himc)
|
if (himc)
|
||||||
{
|
{
|
||||||
COMPOSITIONFORM cf;
|
CANDIDATEFORM cf;
|
||||||
|
cf.dwIndex = 0;
|
||||||
|
cf.dwStyle = CFS_POINT;
|
||||||
cf.ptCurrentPos.x = videodata->ime_rect.x;
|
cf.ptCurrentPos.x = videodata->ime_rect.x;
|
||||||
cf.ptCurrentPos.y = videodata->ime_rect.y;
|
cf.ptCurrentPos.y = videodata->ime_rect.y;
|
||||||
cf.dwStyle = CFS_FORCE_POSITION;
|
|
||||||
ImmSetCompositionWindow(himc, &cf);
|
ImmSetCandidateWindow(himc, &cf);
|
||||||
ImmReleaseContext(videodata->ime_hwnd_current, himc);
|
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
|
#ifdef SDL_DISABLE_WINDOWS_IME
|
||||||
|
|
||||||
|
|
||||||
|
@ -371,7 +380,10 @@ IME_Init(SDL_VideoData *videodata, HWND hwnd)
|
||||||
videodata->ime_available = SDL_TRUE;
|
videodata->ime_available = SDL_TRUE;
|
||||||
IME_UpdateInputLocale(videodata);
|
IME_UpdateInputLocale(videodata);
|
||||||
IME_SetupAPI(videodata);
|
IME_SetupAPI(videodata);
|
||||||
videodata->ime_uiless = UILess_SetupSinks(videodata);
|
if (WIN_ShouldShowNativeUI())
|
||||||
|
videodata->ime_uiless = SDL_FALSE;
|
||||||
|
else
|
||||||
|
videodata->ime_uiless = UILess_SetupSinks(videodata);
|
||||||
IME_UpdateInputLocale(videodata);
|
IME_UpdateInputLocale(videodata);
|
||||||
IME_Disable(videodata, hwnd);
|
IME_Disable(videodata, hwnd);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue