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.
This commit is contained in:
Brecht Van Lommel 2014-02-10 23:05:35 +01:00
parent e29a45b396
commit 2038eb10d0
2 changed files with 49 additions and 8 deletions

@ -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__

@ -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;
}