2 #if defined(USE_DIRECTX_RENDERER) || 0 3 #include "util/mutex.h" 4 #include "GrowableArray.h" 5 #include "GUIUniBuffer.h" 20 IMELanguage_ChineseSimplified,
21 IMELanguage_ChineseTraditional,
32 virtual bool GetShowImeReadingWindow() = 0;
34 virtual bool GetShowImeCandidateWindow() = 0;
36 virtual bool GetIsVerticalImeCandidate() = 0;
38 virtual bool GetIsHorizontalImeReading() = 0;
41 virtual void SetImeState(IMESTATE aState) = 0;
43 virtual IMESTATE GetImeState() = 0;
45 virtual IMELanguage GetImeLanguage() = 0;
47 virtual const char16_t* GetImeIndicator() = 0;
49 virtual int GetNumImeCandidates() = 0;
51 virtual int GetSelectedImeCandidate() = 0;
53 virtual const char16_t* GetImeCandidate(
int anIndex) = 0;
57 virtual void ImeFinalizeString(
bool bSend) = 0;
59 virtual const char16_t* GetImeString() = 0;
61 virtual int GetImeCursorPosition() = 0;
71 #define MAX_CANDLIST 10 72 #define MAX_COMPSTRING_SIZE 256 78 class CGUIIME :
public IIMESystem
85 virtual bool GetShowImeReadingWindow();
87 virtual bool GetShowImeCandidateWindow();
89 virtual bool GetIsVerticalImeCandidate();
91 virtual bool GetIsHorizontalImeReading();
94 virtual void SetImeState(IMESTATE aState);
96 virtual IMESTATE GetImeState();
98 virtual IMELanguage GetImeLanguage();
100 virtual const char16_t* GetImeIndicator();
102 virtual int GetNumImeCandidates();
104 virtual int GetSelectedImeCandidate();
106 virtual const char16_t* GetImeCandidate(
int anIndex);
110 virtual void ImeFinalizeString(
bool bSend);
112 virtual const char16_t* GetImeString();
114 virtual int GetImeCursorPosition();
117 static void Initialize();
118 static void Uninitialize();
120 static INPUTCONTEXT* WINAPI Dummy_ImmLockIMC( HIMC ) {
return NULL; }
121 static BOOL WINAPI Dummy_ImmUnlockIMC( HIMC ) {
return FALSE; }
122 static LPVOID WINAPI Dummy_ImmLockIMCC( HIMCC ) {
return NULL; }
123 static BOOL WINAPI Dummy_ImmUnlockIMCC( HIMCC ) {
return FALSE; }
124 static BOOL WINAPI Dummy_ImmDisableTextFrameService( DWORD ) {
return TRUE; }
125 static LONG WINAPI Dummy_ImmGetCompositionStringW( HIMC, DWORD, LPVOID, DWORD ) {
return IMM_ERROR_GENERAL; }
126 static DWORD WINAPI Dummy_ImmGetCandidateListW( HIMC, DWORD, LPCANDIDATELIST, DWORD ) {
return 0; }
128 static HIMC WINAPI Dummy_ImmCreateContext() {
return NULL;};
129 static BOOL WINAPI Dummy_ImmDestroyContext( HIMC hIMC) {
return FALSE;};
130 static HIMC WINAPI Dummy_ImmGetContext( HWND ) {
return NULL; }
131 static BOOL WINAPI Dummy_ImmReleaseContext( HWND, HIMC ) {
return FALSE; }
132 static HIMC WINAPI Dummy_ImmAssociateContext( HWND, HIMC ) {
return NULL; }
133 static BOOL WINAPI Dummy_ImmGetOpenStatus( HIMC ) {
return 0; }
134 static BOOL WINAPI Dummy_ImmSetOpenStatus( HIMC, BOOL ) {
return 0; }
135 static BOOL WINAPI Dummy_ImmGetConversionStatus( HIMC, LPDWORD, LPDWORD ) {
return 0; }
136 static HWND WINAPI Dummy_ImmGetDefaultIMEWnd( HWND ) {
return NULL; }
137 static UINT WINAPI Dummy_ImmGetIMEFileNameA( HKL, LPSTR, UINT ) {
return 0; }
138 static UINT WINAPI Dummy_ImmGetVirtualKey( HWND ) {
return 0; }
139 static BOOL WINAPI Dummy_ImmNotifyIME( HIMC, DWORD, DWORD, DWORD ) {
return FALSE; }
140 static BOOL WINAPI Dummy_ImmSetConversionStatus( HIMC, DWORD, DWORD ) {
return FALSE; }
141 static BOOL WINAPI Dummy_ImmSimulateHotKey( HWND, DWORD ) {
return FALSE; }
142 static BOOL WINAPI Dummy_ImmIsIME( HKL ) {
return FALSE; }
143 static BOOL WINAPI Dummy_ImmSetCandidateWindow(HIMC, LPCANDIDATEFORM) {
return FALSE;};
146 static UINT WINAPI Dummy_GetReadingString( HIMC, UINT, LPWSTR, PINT, BOOL*, PUINT ) {
return 0; }
147 static BOOL WINAPI Dummy_ShowReadingWindow( HIMC, BOOL ) {
return FALSE; }
150 static BOOL APIENTRY Dummy_VerQueryValueA(
const LPVOID, LPSTR, LPVOID *, PUINT ) {
return 0; }
151 static BOOL APIENTRY Dummy_GetFileVersionInfoA( LPSTR, DWORD, DWORD, LPVOID ) {
return 0; }
152 static DWORD APIENTRY Dummy_GetFileVersionInfoSizeA( LPSTR, LPDWORD ) {
return 0; }
155 static INPUTCONTEXT* (WINAPI * _ImmLockIMC)( HIMC );
156 static BOOL (WINAPI * _ImmUnlockIMC)( HIMC );
157 static LPVOID (WINAPI * _ImmLockIMCC)( HIMCC );
158 static BOOL (WINAPI * _ImmUnlockIMCC)( HIMCC );
159 static BOOL (WINAPI * _ImmDisableTextFrameService)( DWORD );
160 static LONG (WINAPI * _ImmGetCompositionStringW)( HIMC, DWORD, LPVOID, DWORD );
161 static DWORD (WINAPI * _ImmGetCandidateListW)( HIMC, DWORD, LPCANDIDATELIST, DWORD );
162 static HIMC (WINAPI* _ImmCreateContext)();
163 static BOOL (WINAPI* _ImmDestroyContext)( HIMC hIMC);
164 static HIMC (WINAPI * _ImmGetContext)( HWND );
165 static BOOL (WINAPI * _ImmReleaseContext)( HWND, HIMC );
166 static HIMC (WINAPI * _ImmAssociateContext)( HWND, HIMC );
167 static BOOL (WINAPI * _ImmGetOpenStatus)( HIMC );
168 static BOOL (WINAPI * _ImmSetOpenStatus)( HIMC, BOOL );
169 static BOOL (WINAPI * _ImmGetConversionStatus)( HIMC, LPDWORD, LPDWORD );
170 static HWND (WINAPI * _ImmGetDefaultIMEWnd)( HWND );
171 static UINT (WINAPI * _ImmGetIMEFileNameA)( HKL, LPSTR, UINT );
172 static UINT (WINAPI * _ImmGetVirtualKey)( HWND );
173 static BOOL (WINAPI * _ImmNotifyIME)( HIMC, DWORD, DWORD, DWORD );
174 static BOOL (WINAPI * _ImmSetConversionStatus)( HIMC, DWORD, DWORD );
175 static BOOL (WINAPI * _ImmSimulateHotKey)( HWND, DWORD );
176 static BOOL (WINAPI * _ImmIsIME)( HKL );
177 static BOOL (WINAPI * _ImmSetCandidateWindow)(HIMC, LPCANDIDATEFORM);
180 static UINT (WINAPI * _GetReadingString)( HIMC, UINT, LPWSTR, PINT, BOOL*, PUINT );
181 static BOOL (WINAPI * _ShowReadingWindow)( HIMC, BOOL );
184 static BOOL (APIENTRY * _VerQueryValueA)(
const LPVOID, LPSTR, LPVOID *, PUINT );
185 static BOOL (APIENTRY * _GetFileVersionInfoA)( LPSTR, DWORD, DWORD, LPVOID );
186 static DWORD (APIENTRY * _GetFileVersionInfoSizeA)( LPSTR, LPDWORD );
190 static HRESULT StaticOnCreateDevice();
193 static bool HandleWinThreadMsg(UINT uMsg, WPARAM wParam, LPARAM lParam);
196 static bool StaticMsgProc( UINT uMsg, WPARAM wParam, LPARAM lParam );
199 static void EnableImeSystem(
bool bEnable );
200 static bool IsEnableImeSystem();
208 static void SetIMEOpenStatus(
bool bOpen,
bool bForce=
true);
209 static void SetIMEOpenStatus_imp(
bool bOpen);
212 static bool SwitchIn();
215 static bool SwitchOut();
218 static bool OnFocusIn();
220 static bool OnFocusIn_imp();
223 static bool OnFocusOut();
225 static bool OnFocusOut_imp();
232 static bool GetIMEOpenStatus();
235 static bool WinMsgProc(UINT uMsg, WPARAM wParam, LPARAM lParam);
237 static void ResetCaretBlink();
240 static bool IMEHasFocus();
243 static IMESTATE GetImeStateS();
247 static void SendWinMsgChar(WCHAR c);
252 static std::wstring GetWinMsgChar(
bool bRemove =
true);
255 static void SetCompositionPosition(
int x,
int y);
260 static std::wstring GetLastCompString(
bool bRemove =
true);
261 static std::wstring GetCurrentCompString();
264 static WORD GetLanguage() {
return LOWORD( s_hklCurrent ); }
265 static WORD GetPrimaryLanguage() {
return PRIMARYLANGID( LOWORD( s_hklCurrent ) ); }
266 static WORD GetSubLanguage() {
return SUBLANGID( LOWORD( s_hklCurrent ) ); }
267 static void SendKey( BYTE nVirtKey );
268 static DWORD GetImeId( UINT uIndex = 0 );
269 static void CheckInputLocale();
270 static void CheckToggleState();
271 static void SetupImeApi();
272 static void ResetCompositionString();
273 static void TruncateCompString(
bool bUseBackSpace =
true,
int iNewStrLen = 0 );
274 static void FinalizeString(
bool bSend );
275 static void GetReadingWindowOrientation( DWORD dwId );
276 static void GetPrivateReadingString();
279 static void SendCompString();
282 enum { INDICATOR_NON_IME, INDICATOR_CHS, INDICATOR_CHT, INDICATOR_KOREAN, INDICATOR_JAPANESE };
286 WCHAR awszCandidate[MAX_CANDLIST][256];
289 int nHoriSelectedLen;
301 WCHAR m_wszLangAbb[3];
306 static HINSTANCE s_hDllImm32;
307 static HINSTANCE s_hDllVer;
308 static HIMC s_hImcDef;
310 static HKL s_hklCurrent;
311 static bool s_bVerticalCand;
312 static LPWSTR s_wszCurrIndicator;
313 static WCHAR s_aszIndicator[5][3];
314 static bool s_bInsertOnType;
315 static HINSTANCE s_hDllIme;
316 static IMESTATE s_ImeState;
317 static bool s_bEnableImeSystem;
318 static POINT s_ptCompString;
319 static int s_nCompCaret;
320 static int s_nFirstTargetConv;
321 static CUniBuffer s_CompString;
322 static BYTE s_abCompStringAttr[MAX_COMPSTRING_SIZE];
323 static DWORD s_adwCompStringClause[MAX_COMPSTRING_SIZE];
324 static WCHAR s_wszReadingString[32];
325 static CCandList s_CandList;
326 static bool s_bShowReadingWindow;
327 static bool s_bHorizontalReading;
328 static bool s_bChineseIME;
329 static CGrowableArray< CInputLocale > s_Locale;
332 static bool s_bHideCaret;
333 static bool s_bRenderLocaleIndicator;
334 static bool s_bIMETrap;
335 static bool s_bIMEHasFocus;
337 static bool m_bInsertMode;
338 static bool m_bCaretOn;
339 static double m_dfLastBlink;
341 static POINT m_nCompositionWindowPoint;
344 static bool s_bCreateIMEContext;
346 #if defined(DEBUG) | defined(_DEBUG) 347 static bool m_bIMEStaticMsgProcCalled;
350 static std::wstring s_sLastCompString;
352 static std::wstring s_sLastWindowsChars;
353 static std::wstring s_sCurrentCompString;
355 friend class CIMELock;
367 static void EnableImeSystem(
bool bEnable){};
368 static bool IsEnableImeSystem() {
return false;};
different physics engine has different winding order.
Definition: EventBinding.h:32
simple scoped lock function
Definition: mutex.h:12
Definition: PEtypes.h:116
Definition: ManagedDef.h:18
static void SetCompositionPosition(int x, int y)
when we use the default IME window to render, the application (EditBox control) should call this func...
Definition: GUIIME.h:371
static bool OnFocusIn()
To be called when a GUI virtual window gains focus.
Definition: GUIIME.h:374
static bool OnFocusOut()
To be called when a GUI virtual window loses focus.
Definition: GUIIME.h:377
cross platform mutex
Definition: mutex.h:95
GUI IME message system.
Definition: GUIIME.h:364