aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorjohnsonj <devnull@localhost>2016-02-09 23:27:08 +1100
committerjohnsonj <devnull@localhost>2016-02-09 23:27:08 +1100
commit99800d1c26d344983cd27bdf10f71d3572d3d2b8 (patch)
tree6797a02740acc860564054166178ba7a77699029
parent9bbb5c03d3ebb0f927e60baa9f2ab57d784780ef (diff)
downloadscintilla-mirror-99800d1c26d344983cd27bdf10f71d3572d3d2b8.tar.gz
Simplified IME caret position discovery.
-rw-r--r--win32/ScintillaWin.cxx20
1 files changed, 8 insertions, 12 deletions
diff --git a/win32/ScintillaWin.cxx b/win32/ScintillaWin.cxx
index d8506f50d..c9a712df2 100644
--- a/win32/ScintillaWin.cxx
+++ b/win32/ScintillaWin.cxx
@@ -1077,31 +1077,27 @@ sptr_t ScintillaWin::HandleCompositionInline(uptr_t, sptr_t lParam) {
std::vector<int> imeIndicator = MapImeIndicators(imc.GetImeAttributes());
- // Display character by character.
- int numBytes = 0;
- int imeCharPos[maxLenInputIME + 1] = { 0 };
-
bool tmpRecordingMacro = recordingMacro;
recordingMacro = false;
+ int codePage = CodePageOfDocument();
for (size_t i = 0; i < wcs.size(); ) {
const size_t ucWidth = UTF16CharLength(wcs[i]);
const std::wstring uniChar(wcs, i, ucWidth);
- std::string docChar = StringEncode(uniChar, CodePageOfDocument());
+ std::string docChar = StringEncode(uniChar, codePage);
AddCharUTF(docChar.c_str(), static_cast<unsigned int>(docChar.size()));
- // Record compstr character positions for moving IME carets.
- numBytes += static_cast<unsigned int>(docChar.size());
- imeCharPos[i + ucWidth] = numBytes;
-
DrawImeIndicator(imeIndicator[i], static_cast<unsigned int>(docChar.size()));
i += ucWidth;
}
recordingMacro = tmpRecordingMacro;
- // Move IME caret position.
- unsigned int imeCursorPos = imc.GetImeCaretPos();
- MoveImeCarets(-imeCharPos[wcs.size()] + imeCharPos[imeCursorPos]);
+ // Move IME caret from current last position to imeCaretPos.
+ int toImeStart = static_cast<unsigned int>(StringEncode(wcs, codePage).size());
+ std::string imeCaret(StringEncode(wcs.substr(0, imc.GetImeCaretPos()), codePage));
+ int toImeCaret = static_cast<unsigned int>(imeCaret.size());
+ MoveImeCarets(- toImeStart + toImeCaret);
+
if (KoreanIME()) {
view.imeCaretBlockOverride = true;
}