[Bf-blender-cvs] [2038eb1] master: Fix T38537: issue with OS X full screen startup.blend after recent changes.

Brecht Van Lommel noreply at git.blender.org
Mon Feb 10 23:09:30 CET 2014


Commit: 2038eb10d069352cefa83abc6a6c6071807970ae
Author: Brecht Van Lommel
Date:   Mon Feb 10 23:05:35 2014 +0100
https://developer.blender.org/rB2038eb10d069352cefa83abc6a6c6071807970ae

Fix T38537: issue with OS X full screen startup.blend after recent changes.

Also fixed the redrawing while entering and exiting fullscreen, it would show
a distracting white window contents during the animation.

===================================================================

M	intern/ghost/intern/GHOST_WindowCocoa.h
M	intern/ghost/intern/GHOST_WindowCocoa.mm

===================================================================

diff --git a/intern/ghost/intern/GHOST_WindowCocoa.h b/intern/ghost/intern/GHOST_WindowCocoa.h
index 28a463c..082256a 100644
--- a/intern/ghost/intern/GHOST_WindowCocoa.h
+++ b/intern/ghost/intern/GHOST_WindowCocoa.h
@@ -272,6 +272,10 @@ public:
 	
 	/** public function to get the window containing the OpenGL view */
 	CocoaWindow *getCocoaWindow() const {return m_window;};
+
+	/* Internal value to ensure proper redraws during animations */
+	void setImmediateDraw(bool value) { m_immediateDraw = value; }
+	bool getImmediateDraw(void) const { return m_immediateDraw; }
 	
 protected:
 	/**
@@ -338,6 +342,10 @@ protected:
 	NSCursor *m_customCursor;
 
 	GHOST_TabletData m_tablet;
+
+	bool m_lionStyleFullScreen;
+
+	bool m_immediateDraw;
 };
 
 #endif // __GHOST_WINDOWCOCOA_H__
diff --git a/intern/ghost/intern/GHOST_WindowCocoa.mm b/intern/ghost/intern/GHOST_WindowCocoa.mm
index 93036da..a1dcbe7 100644
--- a/intern/ghost/intern/GHOST_WindowCocoa.mm
+++ b/intern/ghost/intern/GHOST_WindowCocoa.mm
@@ -105,6 +105,26 @@ enum {
 	systemCocoa->handleWindowEvent(GHOST_kEventWindowMove, associatedWindow);
 }
 
+- (void)windowWillEnterFullScreen:(NSNotification *)notification
+{
+	associatedWindow->setImmediateDraw(true);
+}
+
+- (void)windowDidEnterFullScreen:(NSNotification *)notification
+{
+	associatedWindow->setImmediateDraw(false);
+}
+
+- (void)windowWillExitFullScreen:(NSNotification *)notification
+{
+	associatedWindow->setImmediateDraw(true);
+}
+
+- (void)windowDidExitFullScreen:(NSNotification *)notification
+{
+	associatedWindow->setImmediateDraw(false);
+}
+
 - (void)windowDidResize:(NSNotification *)notification
 {
 #if MAC_OS_X_VERSION_MIN_REQUIRED >= 1060
@@ -247,6 +267,8 @@ enum {
 
 	bool composing;
 	NSString *composing_text;
+
+	bool immediate_draw;
 }
 - (void)setSystemAndWindowCocoa:(GHOST_SystemCocoa *)sysCocoa windowCocoa:(GHOST_WindowCocoa *)winCocoa;
 @end
@@ -259,6 +281,8 @@ enum {
 
 	composing = false;
 	composing_text = nil;
+
+	immediate_draw = false;
 }
 
 - (BOOL)acceptsFirstResponder
@@ -397,6 +421,11 @@ enum {
 	else {
 		[super drawRect:rect];
 		systemCocoa->handleWindowEvent(GHOST_kEventWindowUpdate, associatedWindow);
+
+		/* For some cases like entering fullscreen we need to redraw immediately
+		 * so our window does not show blank during the animation */
+		if (associatedWindow->getImmediateDraw())
+			systemCocoa->dispatchEvents();
 	}
 }
 
@@ -526,7 +555,9 @@ GHOST_WindowCocoa::GHOST_WindowCocoa(
 		
 	m_systemCocoa = systemCocoa;
 	m_fullScreen = false;
-	
+	m_immediateDraw = false;
+	m_lionStyleFullScreen = false;
+
 	NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
 	
 	//Creates the window
@@ -694,6 +725,14 @@ GHOST_WindowCocoa::GHOST_WindowCocoa(
 	
 	if (state == GHOST_kWindowStateFullScreen)
 		setState(GHOST_kWindowStateFullScreen);
+
+	//Starting with 10.9, we always use Lion fullscreen, since it
+	//now has proper multi-monitor support for fullscreen
+	struct { SInt32 major, minor; } systemversion;
+	Gestalt(gestaltSystemVersionMajor, &systemversion.major);
+	Gestalt(gestaltSystemVersionMinor, &systemversion.minor);
+
+	m_lionStyleFullScreen = (systemversion.major > 10 || (systemversion.major == 10 && systemversion.minor >= 9));
 		
 	[pool drain];
 }
@@ -1038,13 +1077,7 @@ GHOST_TSuccess GHOST_WindowCocoa::setState(GHOST_TWindowState state)
 			NSUInteger masks = [m_window styleMask];
 
 			if (!m_fullScreen && !(masks & NSFullScreenWindowMask)) {
-				/* Starting with 10.9, we always use Lion fullscreen, since it
-				 * now has proper multi-monitor support for fullscreen */
-				struct { SInt32 major, minor; } systemversion;
-				Gestalt(gestaltSystemVersionMajor, &systemversion.major);
-				Gestalt(gestaltSystemVersionMinor, &systemversion.minor);
-
-				if (systemversion.major > 10 || (systemversion.major == 10 && systemversion.minor >= 9)) {
+				if (m_lionStyleFullScreen) {
 					[m_window toggleFullScreen:nil];
 					break;
 				}




More information about the Bf-blender-cvs mailing list