From 007d4dbc8af162e1853418505345b8d14bce33d9 Mon Sep 17 00:00:00 2001 From: John Tsiombikas Date: Wed, 21 Sep 2016 07:47:27 +0300 Subject: [PATCH] SDL backend: toggle fullscreen with 'f' --- src/sdl/main.c | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/src/sdl/main.c b/src/sdl/main.c index e5eda65..6b65796 100644 --- a/src/sdl/main.c +++ b/src/sdl/main.c @@ -5,6 +5,7 @@ #include "demo.h" static void handle_event(SDL_Event *ev); +static void toggle_fullscreen(void); static int quit; static long start_time; @@ -12,13 +13,13 @@ static SDL_Surface *fbsurf; static int fbscale = 2; static int xsz, ysz; +static unsigned int sdl_flags = SDL_SWSURFACE; int main(int argc, char **argv) { int s, i, j; char *env; unsigned short *sptr, *dptr; - unsigned int sdl_flags = SDL_SWSURFACE; if((env = getenv("FBSCALE")) && (s = atoi(env))) { fbscale = s; @@ -66,7 +67,7 @@ int main(int argc, char **argv) } sptr = fb_pixels; - dptr = fbsurf->pixels; + dptr = (unsigned short*)fbsurf->pixels + (fbsurf->w - xsz) / 2; for(i=0; iw + x] = pixel; } } dptr += fbscale; } - dptr += xsz * (fbscale - 1); + dptr += (fbsurf->w - fb_width) * fbscale; } if(SDL_MUSTLOCK(fbsurf)) { @@ -113,6 +114,12 @@ static void handle_event(SDL_Event *ev) case SDL_KEYDOWN: case SDL_KEYUP: + if(ev->key.keysym.sym == 'f') { + if(ev->key.state == SDL_PRESSED) { + toggle_fullscreen(); + } + break; + } demo_keyboard(ev->key.keysym.sym, ev->key.state == SDL_PRESSED ? 1 : 0); break; @@ -135,3 +142,17 @@ static void handle_event(SDL_Event *ev) break; } } + +static void toggle_fullscreen(void) +{ + SDL_Surface *newsurf; + unsigned int newflags = sdl_flags ^ SDL_FULLSCREEN; + + if(!(newsurf = SDL_SetVideoMode(xsz, ysz, fb_bpp, newflags))) { + fprintf(stderr, "failed to go %s\n", newflags & SDL_FULLSCREEN ? "fullscreen" : "windowed"); + return; + } + + fbsurf = newsurf; + sdl_flags = newflags; +} -- 1.7.10.4