Mercurial > sdl-ios-xcode
changeset 2108:a930c8e4d8b0
Allow creation of window bigger than visible size
author | Patrice Mandin <patmandin@gmail.com> |
---|---|
date | Sun, 27 May 2007 08:54:38 +0000 |
parents | 757dfb38f574 |
children | 51cbe188a49e |
files | src/video/gem/SDL_gemvideo.c |
diffstat | 1 files changed, 21 insertions(+), 16 deletions(-) [+] |
line wrap: on
line diff
--- a/src/video/gem/SDL_gemvideo.c Sat May 26 20:10:49 2007 +0000 +++ b/src/video/gem/SDL_gemvideo.c Sun May 27 08:54:38 2007 +0000 @@ -639,28 +639,25 @@ GEM_SetVideoMode(_THIS, SDL_Surface * current, int width, int height, int bpp, Uint32 flags) { - int maxwidth, maxheight; Uint32 modeflags, screensize; SDL_bool use_shadow1, use_shadow2; - /*--- Verify if asked mode can be used ---*/ - if (flags & SDL_FULLSCREEN) { - maxwidth = VDI_w; - maxheight = VDI_h; - } else { - /* Windowed mode */ - maxwidth = GEM_desk_w; - maxheight = GEM_desk_h; - } - /* width must be multiple of 16, for vro_cpyfm() and c2p_convert() */ if ((width & 15) != 0) { width = (width | 15) + 1; } - if ((maxwidth < width) || (maxheight < height) || (VDI_bpp != bpp)) { - SDL_SetError("Couldn't find requested mode in list"); - return (NULL); + /*--- Verify if asked mode can be used ---*/ + if (VDI_bpp != bpp) { + SDL_SetError("%d bpp mode not supported", bpp); + return(NULL); + } + + if (flags & SDL_FULLSCREEN) { + if ((VDI_w < width) || (VDI_h < height)) { + SDL_SetError("%dx%d mode is too large", width, height); + return (NULL); + } } /*--- Allocate the new pixel format for the screen ---*/ @@ -775,8 +772,16 @@ } /* Center window */ - x2 = GEM_desk_x + ((GEM_desk_w - w2) >> 1); - y2 = GEM_desk_y + ((GEM_desk_h - h2) >> 1); + x2 = (GEM_desk_w - w2) >> 1; + y2 = (GEM_desk_h - h2) >> 1; + if (x2<0) { + x2 = 0; + } + if (y2<0) { + y2 = 0; + } + x2 += GEM_desk_x; + y2 += GEM_desk_y; /* Destroy existing window */ if (GEM_handle >= 0) {