Программа SDL2 не показывает окно-кандидат IME

#sdl-2 #ime

#sdl-2 #име #ime

Вопрос:

У меня было несколько запросов от игроков CJK моей игры на базе SDL2 в Windows, спрашивающих о вводе текста IME; окно списка кандидатов просто не отображается для них, что делает невозможным (или очень трудным) ввод определенных композиций символов. Прямо сейчас я использую последнюю версию SDL2 2.0.12.

Насколько я могу судить, я делаю все примерно правильно; вызываю, SDL_StartTextInput() когда фокус клавиатуры перемещается на редактируемое текстовое поле (отображаемое в игре) и SDL_StopTextInput() когда фокус клавиатуры покидает его, а также настраиваю SDL_SetTextInputRect() , чтобы сообщить ОС, где находится текстовое поле. SDL_TEXTINPUT и SDL_TEXTEDITING события, похоже, проходят через цикл событий, как они документированы для этого; все, кажется, работает, за исключением того, что окно списка кандидатов не открывается.

И все это работает абсолютно корректно в сборках Linux и Mac, при этом окна списка кандидатов IME появляются в нужное время и в нужных местах и функционируют корректно, позволяя вводить составные символы CJK unicode в этих операционных системах. Это только в Windows, где окно списка кандидатов просто никогда не открывается, что является большой проблемой для группы моих игроков. Кто-нибудь знает, как предполагается обрабатывать композиции IME под SDL2 в Windows? (Я провожу все это тестирование с IMES по умолчанию в Windows 10 для японского и упрощенного китайского языков)

Кто-нибудь может просветить меня о том, как предполагается использовать систему? На странице руководства по методам ввода действительно мало деталей, и я не могу найти реальную демонстрационную программу, которая показывает, как IME на самом деле предназначено для обработки в SDL2, иначе я бы просто скопировал то, что они делали.

Может иметь значение, а может и нет, но моя игра — это игра на OpenGL 3.3, использующая SDL для управления окнами, ввода и поддержки кроссплатформенной многопоточности; мы вообще не используем встроенный рендерер SDL.

Редактировать:

Я разместил минимальный пример программы здесь, на GitHub, демонстрируя то, что я вижу.Это всего лишь пятьдесят строк кода на C, так что, если я делаю что-то катастрофически глупое, надеюсь, это будет довольно легко обнаружить!

Комментарии:

1. Поскольку это работает на других ОС, я предлагаю сообщить об ошибке.