#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. Поскольку это работает на других ОС, я предлагаю сообщить об ошибке.