2011-09-23 8 views
6

Mam swój mały projekt, w którym używam SDL, a ja bawiłem się z różnymi dostępnymi sterownikami. Natknąłem się na sterownik aalib i zdałem sobie sprawę, że zdarzenie SDL_KEYUP nigdy nie zostało wywołane.SDL i aalib: brak zdarzenia SDL_KEYUP?

To jednak dzieje się tylko w określonych warunkach. Zdarzenie jest wysyłane podczas używania sterownika X, jednak nie podczas używania w trybie konsoli (np. Za pomocą Ctrl + Alt + F1).

Oto minimalny kod do testowania to:

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

Następnie, aby uruchomić go z aalib:

env SDL_VIDEODRIVER=aalib ./a.out 

Moje pytanie brzmi: czy ten należy uznać za błąd? A może coś, czego aalib nie może wiedzieć, ponieważ konsola nie poda tych informacji?

Jeśli aalib nie może mieć tych informacji, to szkoda, że ​​SDL nie może dostarczyć tych samych funkcji dla wszystkich swoich sterowników.

OS: FreeBSD 8.2

wersja SDL: 1.2.14

Odpowiedz

4

ttys (takie jak na konsoli) nie otrzymują surowe zdarzenia klawiatury w ogóle; otrzymują tylko jedno zdarzenie "wprowadzania znaków". Może się okazać, że klawisze modyfikujące (np. Przesunięcie) w ogóle nie wyzwalają zdarzeń SDL, ponieważ nie wysłano żadnego odpowiedniego znaku.

Jest to nieodłączne ograniczenie warstwy TTY. SDL nie jest tak naprawdę do winy.

+0

SDL może traktować każdy znak jako cykl w dół/w górę, lub po prostu wygenerować wydarzenie w górę, gdy upłynie czas większy niż najwolniejszy rozsądny przedział częstości powtarzania bez otrzymania tego znaku ponownie ... Coś takiego może spowodować, że aplikacje będą bardziej dostępne nadający się do użytku. –

+0

To może. Ale podejrzewam, że sterownik aalib jest w gruncie rzeczy przeznaczony jako zabawka. – duskwuff

Powiązane problemy