From ac26c5d06e35adba81d10d6296825e2014d18a0c Mon Sep 17 00:00:00 2001 From: Sam Lantinga Date: Sun, 6 Oct 2024 22:56:09 -0700 Subject: [PATCH] Draw the candidate list next to the active composition clause --- examples/editbox.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/examples/editbox.c b/examples/editbox.c index 3a2c4ad9..112c6541 100644 --- a/examples/editbox.c +++ b/examples/editbox.c @@ -208,7 +208,6 @@ static void SaveCandidates(EditBox *edit, const SDL_Event *event) if (i == selected_candidate) { edit->selected_candidate_start = (int)(uintptr_t)(dst - candidate_text); edit->selected_candidate_length = length; - SDL_Log("Selected candidate: %d/%d\n", edit->selected_candidate_start, edit->selected_candidate_length); } SDL_memcpy(dst, event->edit_candidates.candidates[i], length); dst += length; @@ -238,10 +237,20 @@ static void DrawCandidates(EditBox *edit) float x, y; /* Position the candidate window */ + TTF_SubString cursor; + int offset = edit->composition_start; + if (edit->composition_cursor_length > 0) { + // Place the candidates at the active clause + offset += edit->composition_cursor; + } + if (!TTF_GetTextSubString(edit->text, offset, &cursor)) { + return; + } + SDL_GetRenderSafeArea(renderer, &safe_rect); TTF_GetTextSize(edit->candidates, &candidates_w, &candidates_h); - candidates_rect.x = edit->cursor_rect.x; - candidates_rect.y = edit->cursor_rect.y + edit->cursor_rect.h + 2.0f; + candidates_rect.x = edit->rect.x + cursor.rect.x; + candidates_rect.y = edit->rect.y + cursor.rect.y + cursor.rect.h + 2.0f; candidates_rect.w = 1.0f + 2.0f + candidates_w + 2.0f + 1.0f; candidates_rect.h = 1.0f + 2.0f + candidates_h + 2.0f + 1.0f; if ((candidates_rect.x + candidates_rect.w) > safe_rect.w) {