From 92bd9c36dac9b5b560ba8f45055f0265a10d979a Mon Sep 17 00:00:00 2001 From: kub Date: Wed, 12 Feb 2025 19:23:52 +0100 Subject: [PATCH] add expose event to redraw handling --- in_sdl.c | 22 ++++++++++++++-------- 1 file changed, 14 insertions(+), 8 deletions(-) diff --git a/in_sdl.c b/in_sdl.c index 43d44c5..bfd0647 100644 --- a/in_sdl.c +++ b/in_sdl.c @@ -25,8 +25,8 @@ struct in_sdl_state { int joy_id; int axis_keydown[2]; #ifdef SDL_REDRAW_EVT - int rdraw; - SDL_Event redraw; + int redraw; + SDL_Event revent; #endif keybits_t keystate[SDLK_LAST / KEYBITS_WORD_BITS + 1]; // emulator keys should always be processed immediately lest one is lost @@ -384,8 +384,13 @@ static int collect_events(struct in_sdl_state *state, int *one_kc, int *one_down default: #ifdef SDL_REDRAW_EVT if (event->type == SDL_VIDEORESIZE) { - state->rdraw = 1; - state->redraw = *event; + state->redraw = 1; + state->revent = *event; + } else if (event->type == SDL_VIDEOEXPOSE) { + if (state->revent.type == SDL_NOEVENT) { + state->redraw = 1; + state->revent = *event; + } } else #endif if (ext_event_handler != NULL) @@ -404,11 +409,12 @@ static int collect_events(struct in_sdl_state *state, int *one_kc, int *one_down } #ifdef SDL_REDRAW_EVT - // if the event queue has been emptied and resize events were in it - if (state->rdraw && count == 0) { + // if the event queue has been emptied and resize/expose events were in it + if (state->redraw && count == 0) { if (ext_event_handler != NULL) - ext_event_handler(&state->redraw); - state->rdraw = 0; + ext_event_handler(&state->revent); + state->redraw = 0; + state->revent.type = SDL_NOEVENT; // dummy key event to force returning from the key loop, // so the application has a chance to redraw the window if (one_kc != NULL) { -- 2.39.5