Changeset View
Changeset View
Standalone View
Standalone View
intern/ghost/intern/GHOST_ImeWin32.cpp
| Show All 13 Lines | |||||
| /* ISO_639-1 2-Letter Abbreviations. */ | /* ISO_639-1 2-Letter Abbreviations. */ | ||||
| # define IMELANG_ENGLISH "en" | # define IMELANG_ENGLISH "en" | ||||
| # define IMELANG_CHINESE "zh" | # define IMELANG_CHINESE "zh" | ||||
| # define IMELANG_JAPANESE "ja" | # define IMELANG_JAPANESE "ja" | ||||
| # define IMELANG_KOREAN "ko" | # define IMELANG_KOREAN "ko" | ||||
| GHOST_ImeWin32::GHOST_ImeWin32() | GHOST_ImeWin32::GHOST_ImeWin32() | ||||
| : is_composing_(false), | : evt_ImeNotHandledEventCandidate(NULL), | ||||
| is_composing_(false), | |||||
| language_(IMELANG_ENGLISH), | language_(IMELANG_ENGLISH), | ||||
| conversion_modes_(IME_CMODE_ALPHANUMERIC), | conversion_modes_(IME_CMODE_ALPHANUMERIC), | ||||
| sentence_mode_(IME_SMODE_NONE), | sentence_mode_(IME_SMODE_NONE), | ||||
| system_caret_(false), | system_caret_(false), | ||||
| caret_rect_(-1, -1, 0, 0), | caret_rect_(-1, -1, 0, 0), | ||||
| is_first(true), | is_first(true), | ||||
| is_enable(true) | is_enable(true) | ||||
| { | { | ||||
| ▲ Show 20 Lines • Show All 42 Lines • ▼ Show 20 Lines | |||||
| } | } | ||||
| bool GHOST_ImeWin32::IsEnglishMode() | bool GHOST_ImeWin32::IsEnglishMode() | ||||
| { | { | ||||
| return (conversion_modes_ & IME_CMODE_NOCONVERSION) || | return (conversion_modes_ & IME_CMODE_NOCONVERSION) || | ||||
| !(conversion_modes_ & (IME_CMODE_NATIVE | IME_CMODE_FULLSHAPE)); | !(conversion_modes_ & (IME_CMODE_NATIVE | IME_CMODE_FULLSHAPE)); | ||||
| } | } | ||||
| bool GHOST_ImeWin32::IsImeKeyEvent(char ascii, GHOST_TKey key) | bool GHOST_ImeWin32::IsImeKeyEventCandidateToForward(bool keyDown, GHOST_TKey key) | ||||
| { | { | ||||
| if (!(IsEnglishMode())) { | if (!(IsEnglishMode()) && keyDown) { | ||||
| /* In Chinese, Japanese, Korean, all alpha keys are processed by IME. */ | if ((GHOST_kKey0 <= key && key <= GHOST_kKey9) || | ||||
| if ((ascii >= 'A' && ascii <= 'Z') || (ascii >= 'a' && ascii <= 'z')) { | (GHOST_kKeyNumpad0 <= key && key <= GHOST_kKeyNumpadSlash) || | ||||
| (GHOST_kKeyA <= key && key <= GHOST_kKeyZ)) { | |||||
| return true; | return true; | ||||
| } | } | ||||
| if (IsLanguage(IMELANG_JAPANESE) && (ascii >= ' ' && ascii <= '~')) { | switch (key) { | ||||
| case GHOST_kKeyBackSpace: | |||||
| case GHOST_kKeyTab: | |||||
| case GHOST_kKeyEnter: | |||||
| case GHOST_kKeyEsc: | |||||
| case GHOST_kKeySpace: | |||||
| case GHOST_kKeyQuote: | |||||
| case GHOST_kKeyComma: | |||||
| case GHOST_kKeyMinus: | |||||
| case GHOST_kKeyPlus: | |||||
| case GHOST_kKeyPeriod: | |||||
| case GHOST_kKeySlash: | |||||
| case GHOST_kKeySemicolon: | |||||
| case GHOST_kKeyEqual: | |||||
| case GHOST_kKeyLeftBracket: | |||||
| case GHOST_kKeyRightBracket: | |||||
| case GHOST_kKeyBackslash: | |||||
| case GHOST_kKeyAccentGrave: | |||||
| case GHOST_kKeyGrLess: | |||||
| return true; | return true; | ||||
| } | default: | ||||
| if (IsLanguage(IMELANG_CHINESE)) { | return false; | ||||
| if (ascii && strchr("!\"$'(),.:;<>?[\\]^_`/", ascii) && !(key == GHOST_kKeyNumpadPeriod)) { | |||||
| return true; | |||||
| } | |||||
| if (conversion_modes_ & IME_CMODE_FULLSHAPE && (ascii >= '0' && ascii <= '9')) { | |||||
| /* When in Full Width mode the number keys are also converted. */ | |||||
| return true; | |||||
| } | |||||
| } | } | ||||
| } | } | ||||
| return false; | return false; | ||||
| } | } | ||||
| void GHOST_ImeWin32::CreateImeWindow(HWND window_handle) | void GHOST_ImeWin32::CreateImeWindow(HWND window_handle) | ||||
| { | { | ||||
| /** | /** | ||||
| ▲ Show 20 Lines • Show All 409 Lines • Show Last 20 Lines | |||||