Skip to content

Commit 5efce96

Browse files
authored
Merge pull request #38 from Howlaind/master
Fix IME window position issue #23
2 parents 9bb4686 + 65953a6 commit 5efce96

File tree

2 files changed

+21
-0
lines changed

2 files changed

+21
-0
lines changed

CMakeLists.txt

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ target_link_libraries(Nvy PUBLIC
4242
dwrite.lib
4343
Shcore.lib
4444
Dwmapi.lib
45+
imm32.lib
4546
)
4647

4748
target_precompile_headers(Nvy PUBLIC
@@ -56,6 +57,7 @@ target_precompile_headers(Nvy PUBLIC
5657
<dwrite_3.h>
5758
<shellscalingapi.h>
5859
<dwmapi.h>
60+
<imm.h>
5961

6062
"src/third_party/mpack/mpack.h"
6163

src/renderer/renderer.cpp

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -686,6 +686,24 @@ void UpdateCursorPos(Renderer *renderer, mpack_node_t cursor_goto) {
686686
renderer->cursor.col = MPackIntFromArray(cursor_goto_params, 2);
687687
}
688688

689+
void UpdateImePos(Renderer* renderer) {
690+
HIMC hIMC = ImmGetContext(renderer->hwnd);
691+
COMPOSITIONFORM cf = { 0 };
692+
693+
cf.dwStyle = CFS_POINT;
694+
cf.ptCurrentPos.x = renderer->cursor.col * renderer->font_width;
695+
cf.ptCurrentPos.y = renderer->cursor.row * renderer->font_height;
696+
697+
if (ImmSetCompositionWindow(hIMC, &cf)) {
698+
LOGFONTW lf = { 0 };
699+
lf.lfHeight = static_cast<LONG>(renderer->font_height);
700+
wcscpy_s(lf.lfFaceName, LF_FACESIZE, renderer->font);
701+
ImmSetCompositionFontW(hIMC, &lf);
702+
}
703+
704+
ImmReleaseContext(renderer->hwnd, hIMC);
705+
}
706+
689707
void UpdateCursorMode(Renderer *renderer, mpack_node_t mode_change) {
690708
mpack_node_t mode_change_params = mpack_node_array_at(mode_change, 1);
691709
renderer->cursor.mode_info = &renderer->cursor_mode_infos[mpack_node_array_at(mode_change_params, 1).data->value.u];
@@ -935,6 +953,7 @@ void RendererRedraw(Renderer *renderer, mpack_node_t params) {
935953
DrawGridLine(renderer, renderer->cursor.row);
936954
}
937955
UpdateCursorPos(renderer, redraw_command_arr);
956+
UpdateImePos(renderer);
938957
}
939958
else if (MPackMatchString(redraw_command_name, "mode_info_set")) {
940959
UpdateCursorModeInfos(renderer, redraw_command_arr);

0 commit comments

Comments
 (0)