mirror of
https://github.com/RaySollium99/libpicofe.git
synced 2025-09-07 07:38:04 -04:00
improve redraw events handling
This commit is contained in:
parent
7b3f69a4aa
commit
7cddc27acc
1 changed files with 28 additions and 37 deletions
65
in_sdl.c
65
in_sdl.c
|
@ -355,33 +355,16 @@ static int handle_joy_event(struct in_sdl_state *state, SDL_Event *event,
|
||||||
|
|
||||||
static int collect_events(struct in_sdl_state *state, int *one_kc, int *one_down)
|
static int collect_events(struct in_sdl_state *state, int *one_kc, int *one_down)
|
||||||
{
|
{
|
||||||
SDL_Event events[4];
|
SDL_Event events[8];
|
||||||
Uint32 mask = state->joy ? JOY_EVENTS : (SDL_ALLEVENTS & ~JOY_EVENTS);
|
Uint32 mask = state->joy ? JOY_EVENTS : (SDL_ALLEVENTS & ~JOY_EVENTS);
|
||||||
int count, maxcount, is_emukey = 0;
|
int count, maxcount, is_emukey = 0;
|
||||||
int i, ret, retval = 0;
|
int i = 0, ret = 0, retval = 0;
|
||||||
int num_events, num_peeped_events;
|
|
||||||
SDL_Event *event;
|
SDL_Event *event;
|
||||||
|
|
||||||
#ifdef SDL_REDRAW_EVT
|
|
||||||
if (state->rdraw) {
|
|
||||||
if (one_kc != NULL)
|
|
||||||
*one_kc = SDLK_UNKNOWN;
|
|
||||||
if (one_down != NULL)
|
|
||||||
*one_down = 0;
|
|
||||||
state->rdraw = 0;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
maxcount = (one_kc != NULL) ? 1 : sizeof(events) / sizeof(events[0]);
|
|
||||||
|
|
||||||
SDL_PumpEvents();
|
SDL_PumpEvents();
|
||||||
|
|
||||||
num_events = SDL_PeepEvents(NULL, 0, SDL_PEEKEVENT, mask);
|
maxcount = sizeof(events) / sizeof(events[0]);
|
||||||
|
if ((count = SDL_PeepEvents(events, maxcount, SDL_GETEVENT, mask)) > 0) {
|
||||||
for (num_peeped_events = 0; num_peeped_events < num_events; num_peeped_events += count) {
|
|
||||||
count = SDL_PeepEvents(events, maxcount, SDL_GETEVENT, mask);
|
|
||||||
if (count <= 0)
|
|
||||||
break;
|
|
||||||
for (i = 0; i < count; i++) {
|
for (i = 0; i < count; i++) {
|
||||||
event = &events[i];
|
event = &events[i];
|
||||||
if (state->joy) {
|
if (state->joy) {
|
||||||
|
@ -397,35 +380,43 @@ static int collect_events(struct in_sdl_state *state, int *one_kc, int *one_down
|
||||||
SDL_PushEvent(event);
|
SDL_PushEvent(event);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
#ifdef SDL_REDRAW_EVT
|
||||||
|
state->rdraw |= (one_kc != NULL &&
|
||||||
|
event->type == SDL_VIDEORESIZE);
|
||||||
|
#endif
|
||||||
if (ext_event_handler != NULL)
|
if (ext_event_handler != NULL)
|
||||||
ext_event_handler(event);
|
ext_event_handler(event);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
#ifdef SDL_REDRAW_EVT
|
continue;
|
||||||
if (ret != -2 && event->type == SDL_VIDEORESIZE) {
|
|
||||||
if (one_kc != NULL)
|
|
||||||
*one_kc = SDLK_UNKNOWN;
|
|
||||||
if (one_down != NULL)
|
|
||||||
*one_down = 1;
|
|
||||||
state->rdraw = 1;
|
|
||||||
is_emukey = 1, ret = 1;
|
|
||||||
} else
|
|
||||||
continue;
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
retval |= ret;
|
retval |= ret;
|
||||||
if ((is_emukey || one_kc != NULL) && retval)
|
if ((is_emukey || one_kc != NULL) && retval)
|
||||||
{
|
{
|
||||||
// don't lose events other devices might want to handle
|
break;
|
||||||
if (++i < count)
|
|
||||||
SDL_PeepEvents(events+i, count-i, SDL_ADDEVENT, mask);
|
|
||||||
goto out;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
out:
|
#ifdef SDL_REDRAW_EVT
|
||||||
|
// if the event queue has been emptied and resize events were in it
|
||||||
|
if (state->rdraw && count == 0) {
|
||||||
|
state->rdraw = 0;
|
||||||
|
// dummy key event to force returning from the key loop,
|
||||||
|
// so the application has a chance to redraw the window
|
||||||
|
if (one_kc != NULL) {
|
||||||
|
*one_kc = SDLK_UNKNOWN;
|
||||||
|
retval |= 1;
|
||||||
|
}
|
||||||
|
if (one_down != NULL)
|
||||||
|
*one_down = 1;
|
||||||
|
} else
|
||||||
|
i++;
|
||||||
|
#endif
|
||||||
|
// don't lose events other devices might want to handle
|
||||||
|
if (i < count)
|
||||||
|
SDL_PeepEvents(events+i, count-i, SDL_ADDEVENT, mask);
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue