shithub: choc

Download patch

ref: f22561be3ef02d8b7c4f7c2720654aa797d6e24e
parent: f69e905d9c7b0d4d3ec9f2d5f268173b916e0e60
author: Simon Howard <fraggle@gmail.com>
date: Tue Sep 27 18:33:42 EDT 2005

Always use SDL_Flip to update the screen. Fixes problems in Windows when
running fullscreen, introduced by fixes to the disk icon code.

Subversion-branch: /trunk/chocolate-doom
Subversion-revision: 140

--- a/src/i_video.c
+++ b/src/i_video.c
@@ -1,7 +1,7 @@
 // Emacs style mode select   -*- C++ -*- 
 //-----------------------------------------------------------------------------
 //
-// $Id: i_video.c 134 2005-09-26 21:44:30Z fraggle $
+// $Id: i_video.c 140 2005-09-27 22:33:42Z fraggle $
 //
 // Copyright(C) 1993-1996 Id Software, Inc.
 // Copyright(C) 2005 Simon Howard
@@ -22,6 +22,10 @@
 // 02111-1307, USA.
 //
 // $Log$
+// Revision 1.33  2005/09/27 22:33:42  fraggle
+// Always use SDL_Flip to update the screen.  Fixes problems in Windows when
+// running fullscreen, introduced by fixes to the disk icon code.
+//
 // Revision 1.32  2005/09/26 21:44:30  fraggle
 // Fix melting crap on startup - oops
 //
@@ -137,7 +141,7 @@
 //-----------------------------------------------------------------------------
 
 static const char
-rcsid[] = "$Id: i_video.c 134 2005-09-26 21:44:30Z fraggle $";
+rcsid[] = "$Id: i_video.c 140 2005-09-27 22:33:42Z fraggle $";
 
 #include <SDL.h>
 #include <ctype.h>
@@ -511,22 +515,14 @@
 }
 
 // Update a small portion of the screen
+//
+// Does 2x stretching and buffer blitting if neccessary
 
-static void UpdateArea(int x1, int y1, int x2, int y2, boolean always_update)
+static void BlitArea(int x1, int y1, int x2, int y2)
 {
     int w = x2 - x1;
     int h = y2 - y1;
 
-    if (palette_to_set && !always_update)
-    {
-        // If we have a palette to set, the only way to update is to
-        // update the entire screen
-        // If we are only updating part of the screen (disk icon), we 
-        // cannot update the screen
-
-        return;
-    }
-
     if (screenmultiply == 1 && !native_surface)
     {
         byte *bufp, *screenp;
@@ -585,22 +581,21 @@
 
         SDL_UnlockSurface(screen);
     }
+}
 
-    // draw to screen
-    
-    if (palette_to_set)
-    {
-        SDL_SetColors(screen, palette, 0, 256);
-        palette_to_set = 0;
-    }
-    else
-    {
-        SDL_UpdateRect(screen, 
-                       x1 * screenmultiply, 
-                       y1 * screenmultiply, 
-                       w * screenmultiply, 
-                       h * screenmultiply);
-    }
+void UpdateRect(int x1, int y1, int x2, int y2)
+{
+    // Do stretching and blitting
+
+    BlitArea(x1, y1, x2, y2);
+
+    // Update the area
+
+    SDL_UpdateRect(screen, 
+                   x1 * screenmultiply, 
+                   y1 * screenmultiply, 
+                   (x2-x1) * screenmultiply, 
+                   (y2-y1) * screenmultiply);
 }
 
 void I_BeginRead(void)
@@ -625,9 +620,8 @@
         memcpy(screenloc, disk_image + y * disk_image_w, disk_image_w);
     }
 
-    UpdateArea(SCREENWIDTH - disk_image_w, SCREENHEIGHT - disk_image_h,
-               SCREENWIDTH, SCREENHEIGHT, 
-               false);
+    UpdateRect(SCREENWIDTH - disk_image_w, SCREENHEIGHT - disk_image_h,
+               SCREENWIDTH, SCREENHEIGHT);
 }
 
 void I_EndRead(void)
@@ -649,9 +643,8 @@
         memcpy(screenloc, saved_background + y * disk_image_w, disk_image_w);
     }
 
-    UpdateArea(SCREENWIDTH - disk_image_w, SCREENHEIGHT - disk_image_h,
-               SCREENWIDTH, SCREENHEIGHT, 
-               false);
+    UpdateRect(SCREENWIDTH - disk_image_w, SCREENHEIGHT - disk_image_h,
+               SCREENWIDTH, SCREENHEIGHT);
 }
 
 //
@@ -689,7 +682,22 @@
     
     }
 
-    UpdateArea(0, 0, SCREENWIDTH, SCREENHEIGHT, true);
+    // draw to screen
+
+    BlitArea(0, 0, SCREENWIDTH, SCREENHEIGHT);
+    
+    // If we have a palette to set, the act of setting the palette
+    // updates the screen
+
+    if (palette_to_set)
+    {
+        SDL_SetColors(screen, palette, 0, 256);
+        palette_to_set = 0;
+    }
+    else
+    {
+        SDL_Flip(screen);
+    }
 }