SDL и aalib: нет события SDL_KEYUP? - PullRequest
       26

SDL и aalib: нет события SDL_KEYUP?

6 голосов
/ 24 сентября 2011

У меня есть небольшой проект, в котором я использую SDL, и я играл с различными доступными драйверами. Я наткнулся на драйвер aalib и понял, что событие SDL_KEYUP никогда не вызывалось.

Это, однако, происходит только при определенных условиях. Событие отправляется при использовании драйвера X, но не при использовании в режиме консоли (т. Е. С использованием Ctrl + Alt + F1).

Вот минимальный код для проверки:

#include <SDL/SDL.h>
#include <stdio.h>

int main()
{
    SDL_Init(0);
    SDL_SetVideoMode(64, 64, 32, SDL_SWSURFACE);

    while(1)
    {
        SDL_Event event;

        while(SDL_PollEvent(&event))
        {
            if(event.type == SDL_KEYDOWN)
                printf("Key down: %d\n", event.key.keysym.sym);
            else if(event.type == SDL_KEYUP)
                printf("Key up: %d\n", event.key.keysym.sym);
            else if(event.type == SDL_QUIT)
                SDL_Quit();
        }
    }
}

Затем, чтобы запустить его с aalib:

env SDL_VIDEODRIVER=aalib ./a.out

Мой вопрос: это нужно считать ошибкой? Или это что-то, что aalib не может знать, потому что консоль не выдаст эту информацию?

Если aalib не может получить эту информацию, я считаю, что SDL позора не может обеспечить одинаковые функции для всех своих драйверов.

ОС: FreeBSD 8.2

SDL версия: 1.2.14

1 Ответ

4 голосов
/ 24 сентября 2011

TTY (такие как консоль) вообще не получают необработанные события клавиатуры; они получают только одно «ввод символов». Вы можете обнаружить, что клавиши-модификаторы (например, Shift) вообще не запускают события SDL, потому что не отправлено соответствующих символов.

Это внутреннее ограничение уровня TTY. SDL на самом деле не виноват.

...