SDL SetEventFilter: Unterschied zwischen den Versionen
Flash (Diskussion | Beiträge) (neuer Artikel - Bitte korrekturlesen) |
(kein Unterschied)
|
Version vom 11. September 2008, 22:46 Uhr
Inhaltsverzeichnis
SDL_SetEventFilter
Name
SDL_SetEventFilter - Setzt einen Filter, den alle (externen) Events passiert müssen bevor sie in die Event-Queue gelangen.
Delphi-Spezifikation
procedure SDL_SetEventFilter( filter : TSDL_EventFilter );
Parameter
filter | Eine Callback/Funktionspointer auf eine Funktion, welche ein TSDL_Event entgegen nimmt und einen Integer zurück liefert. |
---|
Beschreibung
Diese Funktion installiert einen Filter den alle Events passieren müssen, bevor sie zur Event-Queue hinzugefügt werden.
Der Filter ist eine Callback-Funktion/Functionpointer und folgendermaßen definiert:
TSDL_EventFilter = function( event : PSDL_Event ): Integer; //Delphi
typedef int (*SDL_EventFilter)(const SDL_Event *event); //C++
Liefert der Filter 1 zurück, wird das Event in die Queue übertragen. Liefert der Filter 0 zurück, wird das Event verworfen. Im Orginalheader von Sam Latinga steht noch die Bemerkung, dass beim Verwerfen trotzdem der interne Status angepasst wird. Was dies bedeutet und ob dies immer noch stimmt ist zu ergänzen.
Es gibt eine Besonderheit beim Filtern des SDL_QUITEVENT Eventtyps. Hier wird der Eventfilter nur dann gerufen, wenn der Windowmanager vor hat das Anwendungsfenster zu schließen. Wenn der Eventfilter 1 zurück liefert, wird das Fenster geschlossen. Andernfalls wird versucht das Fenster offen zu halten. Falls das Quit-Event durch ein Interrupt-Signal generiert wird, wird die interne Queue umgangen und das Event beim nächsten Poll an die Application weitergereicht. D.h. es kann nicht ausgefiltert werden.
Hinweise
Events welche mit SDL_PushEvent bzw. SDL_PeepEvents in die Queue geschoben werden, werden vorher nicht gefiltert.
Sei Vorsichtig! Die Event-Filter Funktion (die Callback-Funktion) könnte in einem anderen Thread laufen. Pass also auf was du darin machst (Threadsicher programmieren!).
Rückgabewert
keine