Prevent redraws till internal buffers are correctly setup
authorPatrice Mandin <patmandin@gmail.com>
Sat, 06 Nov 2004 08:56:23 +0000
changeset 964 d9209754ebee
parent 963 92c247cec42d
child 965 b68e551205e9
Prevent redraws till internal buffers are correctly setup
src/video/gem/SDL_gemevents.c
src/video/gem/SDL_gemvideo.c
src/video/gem/SDL_gemvideo.h
--- a/src/video/gem/SDL_gemevents.c	Sun Oct 31 13:15:33 2004 +0000
+++ b/src/video/gem/SDL_gemevents.c	Sat Nov 06 08:56:23 2004 +0000
@@ -210,7 +210,9 @@
 			SDL_PrivateAppActive(1, SDL_APPINPUTFOCUS);
 			break;
 		case WM_REDRAW:
-			GEM_wind_redraw(this, message[3],&message[4]);
+			if (!GEM_lock_redraw) {
+				GEM_wind_redraw(this, message[3],&message[4]);
+			}
 			break;
 		case WM_ICONIFY:
 		case WM_ALLICONIFY:
@@ -240,8 +242,9 @@
 			break;
 		case WM_SIZED:
 			wind_set (message[3], WF_CURRXYWH, message[4], message[5], message[6], message[7]);
+			wind_get (message[3], WF_WORKXYWH, &x2, &y2, &w2, &h2);
 			GEM_win_fulled = SDL_FALSE;		/* Cancel maximized flag */
-			wind_get (message[3], WF_WORKXYWH, &x2, &y2, &w2, &h2);
+			GEM_lock_redraw = SDL_TRUE;		/* Prevent redraw till buffers resized */
 			SDL_PrivateResize(w2, h2);
 			break;
 		case WM_FULLED:
@@ -260,6 +263,7 @@
 				}
 				wind_set (message[3], WF_CURRXYWH, x, y, w, h);
 				wind_get (message[3], WF_WORKXYWH, &x2, &y2, &w2, &h2);
+				GEM_lock_redraw = SDL_TRUE;		/* Prevent redraw till buffers resized */
 				SDL_PrivateResize(w2, h2);
 			}
 			break;
--- a/src/video/gem/SDL_gemvideo.c	Sun Oct 31 13:15:33 2004 +0000
+++ b/src/video/gem/SDL_gemvideo.c	Sat Nov 06 08:56:23 2004 +0000
@@ -401,6 +401,7 @@
 	GEM_locked = SDL_FALSE;
 	GEM_win_fulled = SDL_FALSE;
 	GEM_fullscreen = SDL_FALSE;
+	GEM_lock_redraw = SDL_TRUE;	/* Prevent redraw till buffers are setup */
 
 	VDI_screen = NULL;
 	VDI_pitch = VDI_w * VDI_pixelsize;
@@ -720,6 +721,7 @@
 #endif
 
 	this->UpdateRects = GEM_UpdateRects;
+	GEM_lock_redraw = SDL_FALSE;	/* Enable redraw */
 
 	/* We're done */
 	return(current);
@@ -858,6 +860,10 @@
 {
 	SDL_Surface *surface;
 
+	if (GEM_lock_redraw) {
+		return;
+	}
+
 	surface = this->screen;
 
 	if (surface->flags & SDL_FULLSCREEN) {
@@ -951,6 +957,10 @@
 
 static int GEM_FlipHWSurface(_THIS, SDL_Surface *surface)
 {
+	if (GEM_lock_redraw) {
+		return(0);
+	}
+
 	if (surface->flags & SDL_FULLSCREEN) {
 		return GEM_FlipHWSurfaceFullscreen(this, surface);
 	} else {
--- a/src/video/gem/SDL_gemvideo.h	Sun Oct 31 13:15:33 2004 +0000
+++ b/src/video/gem/SDL_gemvideo.h	Sat Nov 06 08:56:23 2004 +0000
@@ -79,6 +79,7 @@
 	SDL_bool window_fulled;		/* Window maximized ? */
 	SDL_bool mouse_relative;	/* Report relative mouse movement */
 	SDL_bool locked;			/* AES locked for fullscreen ? */
+	SDL_bool lock_redraw;		/* Prevent redraw till buffers are setup */
 	short message[8];			/* To self-send an AES message */
 
 	SDL_bool fullscreen;		/* Fullscreen or windowed mode ? */
@@ -120,6 +121,7 @@
 #define GEM_win_fulled		(this->hidden->window_fulled)
 #define GEM_mouse_relative	(this->hidden->mouse_relative)
 #define GEM_locked			(this->hidden->locked)
+#define GEM_lock_redraw		(this->hidden->lock_redraw)
 #define GEM_message			(this->hidden->message)
 #define SDL_modelist		(this->hidden->SDL_modelist)
 #define GEM_icon			(this->hidden->icon)