diff options
author | Gerd Hoffmann <kraxel@redhat.com> | 2014-11-11 13:22:49 +0100 |
---|---|---|
committer | Gerd Hoffmann <kraxel@redhat.com> | 2014-12-17 12:44:01 +0100 |
commit | 2c3056f182e16038c8b0663f68b3b5105899fb75 (patch) | |
tree | c72478b52d6ff25cfeaa6ddd6f03727a2cfb51f0 /ui/sdl2-2d.c | |
parent | 46522a82236ea0cf9011b89896d2d8f8ddaf2443 (diff) |
sdl2: move sdl_switch to sdl2-2d.c
Move sdl_switch to sdl2-2d.c file, rename to sdl2_2d_switch.
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
Reviewed-by: Max Reitz <mreitz@redhat.com>
Diffstat (limited to 'ui/sdl2-2d.c')
-rw-r--r-- | ui/sdl2-2d.c | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/ui/sdl2-2d.c b/ui/sdl2-2d.c index 7b0039b080..29ada53552 100644 --- a/ui/sdl2-2d.c +++ b/ui/sdl2-2d.c @@ -59,3 +59,45 @@ void sdl2_2d_update(DisplayChangeListener *dcl, SDL_RenderCopy(scon->real_renderer, scon->texture, &rect, &rect); SDL_RenderPresent(scon->real_renderer); } + +void sdl2_2d_switch(DisplayChangeListener *dcl, + DisplaySurface *new_surface) +{ + struct sdl2_console *scon = container_of(dcl, struct sdl2_console, dcl); + DisplaySurface *old_surface = scon->surface; + int format = 0; + + scon->surface = new_surface; + + if (scon->texture) { + SDL_DestroyTexture(scon->texture); + scon->texture = NULL; + } + + if (!new_surface) { + sdl2_window_destroy(scon); + return; + } + + if (!scon->real_window) { + sdl2_window_create(scon); + } else if (old_surface && + ((surface_width(old_surface) != surface_width(new_surface)) || + (surface_height(old_surface) != surface_height(new_surface)))) { + sdl2_window_resize(scon); + } + + SDL_RenderSetLogicalSize(scon->real_renderer, + surface_width(new_surface), + surface_height(new_surface)); + + if (surface_bits_per_pixel(scon->surface) == 16) { + format = SDL_PIXELFORMAT_RGB565; + } else if (surface_bits_per_pixel(scon->surface) == 32) { + format = SDL_PIXELFORMAT_ARGB8888; + } + scon->texture = SDL_CreateTexture(scon->real_renderer, format, + SDL_TEXTUREACCESS_STREAMING, + surface_width(new_surface), + surface_height(new_surface)); +} |