2011-09-23 7 views
6

Tengo mi pequeño proyecto en el que uso SDL, y estaba jugando con los diferentes controladores disponibles. Encontré el controlador aalib, y me di cuenta de que el evento SDL_KEYUP nunca se llamó.SDL y aalib: ¿Ningún evento SDL_KEYUP?

Esto, sin embargo, ocurre solo en ciertas condiciones. El evento se envía cuando se utiliza el controlador X, pero no cuando se usa en modo consola (es decir, usando Ctrl + Alt + F1).

Aquí es un código mínimo para probar esto:

#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(); 
     } 
    } 
} 

Luego, a ejecutarlo con aalib:

env SDL_VIDEODRIVER=aalib ./a.out 

Mi pregunta es: ¿Es que esto se considera un error? ¿O es algo que aalib no puede saber debido a que la consola no brindará esta información?

Si aalib no puede tener esta información, me parece una pena que SDL no pueda ofrecer las mismas características para todos sus controladores.

OS: FreeBSD 8.2

versión SDL: 1.2.14

Respuesta

4

TTY (como la consola) no reciben eventos de teclado primas en absoluto; solo reciben un solo evento de "entrada de caracteres". Puede encontrar que las teclas modificadoras (por ejemplo, shift) no disparan eventos SDL, porque no se envía ningún carácter correspondiente.

Esta es una limitación inherente de la capa TTY. SDL no tiene la culpa.

+0

SDL podría tratar a cada personaje como un ciclo descendente/ascendente, o simplemente generar un evento ascendente una vez que pasa un intervalo mayor que el intervalo más lento de repetición razonable sin haber recibido ese carácter nuevamente ... Algo como esto podría hacer que las aplicaciones sean más usable. –

+0

Podría. Pero sospecho que el controlador aalib se entiende principalmente como un juguete, de todos modos. – duskwuff