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) {