SDL SetEventFilter

Aus DGL Wiki
Version vom 11. September 2008, 22:47 Uhr von Flash (Diskussion | Beiträge) (Parameter)

(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche

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 Ein 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


Siehe auch

SDL_Event, SDL_GetEventFilter, SDL_PushEvent