LINUX.ORG.RU

Пользовательский ввод кириллицы в SDL прогу


0

0

Hi, ALL! Пытаюсь освоить SDL. Всё бы ничего, да вот с пользовательским вводом текста никак не разберусь. Всё, что нашел: http://lazyfoo.net/downloads/SDL_tutorials/lesson23.zip Но там, как не бьюсь, кириллицу вводить не могу (шрифт юникодный подсовывал, с условия методом тыка менял).

Подскажите, куда копать, есть ли примеры, где можно почитать.

P.S. Опыт программирования у меня небольшой, да и то, всё больше bash-скриптинг.

★★★★★

Код в студию. По умолчанию поддержка юникода отключена. В доке написано - включайте только если оно вам действительно нужно. Т.к. это бьет по производительности. Я замеров специально не делал, но разницу на глаз не уловил.

andreyu ★★★★★
()
Ответ на: комментарий от andreyu

Весь код в примере по ссылке. Не берусь выделить что из него важнее. Но код совсем не велик.
Сколько-нибудь существенных изменений мне сделать не удалось.
Если есть ещё примеры как реализуется ввод текста в SDL буду благодарен за ссылку.
Ежу понятно, что это должно быть просто, но никак не могу найти примеров! Такое ощущение, что это считается настолько просто, что не надо документировать :(

fractaler ★★★★★
() автор топика
Ответ на: комментарий от fractaler

По вашему вот это должно работать?

//The storage string
std::string str;

...

//Append the character
str += (char)event.key.keysym.unicode;

Почитайте доку и примеры на официальном сайте.

andreyu ★★★★★
()
Ответ на: комментарий от andreyu

>По вашему вот это должно работать?
Оно компилится и работает... Хотя я в этом коде путаюсь...
На официальном сайте много ссылок на доки, в т.ч. на эту: http://lazyfoo.net/SDL_tutorials/index.php
Какую рекомендуете Вы? Буду очень благодарен за прямую ссылку.

fractaler ★★★★★
() автор топика
Ответ на: комментарий от fractaler

Ну вот смотрите как обявлен str - std::string str - один символ - один char.
А event.key.keysym.unicode это Uint16.

Что произойдет по вашему, если в event.key.keysym.unicode будет юникодный символ:
str += (char)event.key.keysym.unicode;

Нужно проверять, что находится в event.key.keysym.unicode:

/* If the Unicode value is less than 0x80 then the    */
/* unicode value can be used to get a printable       */
/* representation of the key, using (char)unicode.    */
printf(", Unicode: " );
if(event.key.keysym.unicode < 0x80 && event.key.keysym.unicode > 0) {
   printf("%c (0x%04X)", (char)event.key.keysym.unicode, event.key.keysym.unicode);
}
else {
   printf("? (0x%04X)", event.key.keysym.unicode);
}

Источник одна из первых ссылок в гугле:
http://docs.mandragor.org/files/Common_libs_documentation/SDL/SDL_Documentation
_project_en/guideinputkeyboard.html

andreyu ★★★★★
()
Ответ на: комментарий от andreyu

Ага, начинаю понимать, спасибо!
Видимо, я не правильно запросы составлял.
Наверно, теперь мне надо написать что-нибудь для понимания...
Ещё раз спасибо за помощь!

fractaler ★★★★★
() автор топика
Ответ на: комментарий от andreyu

Я понимаю, что я тормоз, но вот в чем проблема:
printf("%c (0x%04X)", (char)event.key.keysym.unicode, event.key.keysym.unicode);
Как может быть выполнено преобразование (char)event.key.keysym.unicode, если char короче введённого символа? При выполнении программы в этом месте печатается знак вопроса (консоль utf-8).

fractaler ★★★★★
() автор топика
Ответ на: комментарий от fractaler

А, понял, оно выполняется только если event.key.keysym.unicode < 0x80
Как же вывести кириллицу в консоль? Пошел читать маны на эту тему.
P.S. Похоже, тема уползла так низко, что я тут сам с собой разговариваю..

fractaler ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.