# HG changeset patch # User Patrice Mandin # Date 1180256028 0 # Node ID d59dacd36696747c2775ef9d0d088645857f1eea # Parent 1d9cd0ff67cc47460270affd49ea7e8b1c6bc721 Allow creation of window bigger than visible size diff -r 1d9cd0ff67cc -r d59dacd36696 src/video/gem/SDL_gemvideo.c --- a/src/video/gem/SDL_gemvideo.c Sat May 26 20:12:58 2007 +0000 +++ b/src/video/gem/SDL_gemvideo.c Sun May 27 08:53:48 2007 +0000 @@ -621,30 +621,27 @@ SDL_Surface *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"); + /*--- 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 ---*/ if ( ! SDL_ReallocFormat(current, VDI_bpp, VDI_redmask, VDI_greenmask, VDI_bluemask, VDI_alphamask) ) { SDL_SetError("Couldn't allocate new pixel format for requested mode"); @@ -750,8 +747,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) {