mirror of
https://github.com/libsdl-org/SDL.git
synced 2025-09-05 19:08:12 +00:00
Optimized SDL_HasEvent() and SDL_HasEvents()
Also document the counting behavior of SDL_PEEKEVENT. Fixes https://github.com/libsdl-org/SDL/issues/6209
This commit is contained in:
@@ -1011,7 +1011,7 @@ typedef enum SDL_EventAction
|
||||
* event queue.
|
||||
* - `SDL_PEEKEVENT`: `numevents` events at the front of the event queue,
|
||||
* within the specified minimum and maximum type, will be returned to the
|
||||
* caller and will _not_ be removed from the queue.
|
||||
* caller and will _not_ be removed from the queue. If you pass NULL for `events`, then `numevents` is ignored and the total number of matching events will be returned.
|
||||
* - `SDL_GETEVENT`: up to `numevents` events at the front of the event queue,
|
||||
* within the specified minimum and maximum type, will be returned to the
|
||||
* caller and will be removed from the queue.
|
||||
|
@@ -1105,12 +1105,28 @@ int SDL_PeepEvents(SDL_Event *events, int numevents, SDL_EventAction action,
|
||||
|
||||
bool SDL_HasEvent(Uint32 type)
|
||||
{
|
||||
return SDL_PeepEvents(NULL, 0, SDL_PEEKEVENT, type, type) > 0;
|
||||
return SDL_HasEvents(type, type);
|
||||
}
|
||||
|
||||
bool SDL_HasEvents(Uint32 minType, Uint32 maxType)
|
||||
{
|
||||
return SDL_PeepEvents(NULL, 0, SDL_PEEKEVENT, minType, maxType) > 0;
|
||||
bool found = false;
|
||||
|
||||
SDL_LockMutex(SDL_EventQ.lock);
|
||||
{
|
||||
if (SDL_EventQ.active) {
|
||||
for (SDL_EventEntry *entry = SDL_EventQ.head; entry; entry = entry->next) {
|
||||
const Uint32 type = entry->event.type;
|
||||
if (minType <= type && type <= maxType) {
|
||||
found = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
SDL_UnlockMutex(SDL_EventQ.lock);
|
||||
|
||||
return found;
|
||||
}
|
||||
|
||||
void SDL_FlushEvent(Uint32 type)
|
||||
|
Reference in New Issue
Block a user