diff --git a/src/MacVim/MMAppController.m b/src/MacVim/MMAppController.m index 6c346594ca..355f0cca82 100644 --- a/src/MacVim/MMAppController.m +++ b/src/MacVim/MMAppController.m @@ -183,39 +183,40 @@ + (void)initialize kCFPreferencesCurrentApplication); NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys: - [NSNumber numberWithBool:NO], MMNoWindowKey, - [NSNumber numberWithInt:64], MMTabMinWidthKey, - [NSNumber numberWithInt:6*64], MMTabMaxWidthKey, - [NSNumber numberWithInt:132], MMTabOptimumWidthKey, - [NSNumber numberWithBool:YES], MMShowAddTabButtonKey, - [NSNumber numberWithInt:2], MMTextInsetLeftKey, - [NSNumber numberWithInt:1], MMTextInsetRightKey, - [NSNumber numberWithInt:1], MMTextInsetTopKey, - [NSNumber numberWithInt:1], MMTextInsetBottomKey, - @"MMTypesetter", MMTypesetterKey, - [NSNumber numberWithFloat:1], MMCellWidthMultiplierKey, - [NSNumber numberWithFloat:-1], MMBaselineOffsetKey, - [NSNumber numberWithBool:YES], MMTranslateCtrlClickKey, - [NSNumber numberWithInt:0], MMOpenInCurrentWindowKey, - [NSNumber numberWithBool:NO], MMNoFontSubstitutionKey, - [NSNumber numberWithBool:YES], MMLoginShellKey, + [NSNumber numberWithBool:NO], MMNoWindowKey, + [NSNumber numberWithInt:64], MMTabMinWidthKey, + [NSNumber numberWithInt:6*64], MMTabMaxWidthKey, + [NSNumber numberWithInt:132], MMTabOptimumWidthKey, + [NSNumber numberWithBool:YES], MMShowAddTabButtonKey, + [NSNumber numberWithInt:2], MMTextInsetLeftKey, + [NSNumber numberWithInt:1], MMTextInsetRightKey, + [NSNumber numberWithInt:1], MMTextInsetTopKey, + [NSNumber numberWithInt:1], MMTextInsetBottomKey, + @"MMTypesetter", MMTypesetterKey, + [NSNumber numberWithFloat:1], MMCellWidthMultiplierKey, + [NSNumber numberWithFloat:-1], MMBaselineOffsetKey, + [NSNumber numberWithBool:YES], MMTranslateCtrlClickKey, + [NSNumber numberWithInt:0], MMOpenInCurrentWindowKey, + [NSNumber numberWithBool:NO], MMNoFontSubstitutionKey, + [NSNumber numberWithBool:YES], MMLoginShellKey, [NSNumber numberWithInt:MMRendererCoreText], - MMRendererKey, + MMRendererKey, [NSNumber numberWithInt:MMUntitledWindowAlways], - MMUntitledWindowKey, - [NSNumber numberWithBool:NO], MMZoomBothKey, - @"", MMLoginShellCommandKey, - @"", MMLoginShellArgumentKey, - [NSNumber numberWithBool:YES], MMDialogsTrackPwdKey, - [NSNumber numberWithInt:3], MMOpenLayoutKey, - [NSNumber numberWithBool:NO], MMVerticalSplitKey, - [NSNumber numberWithInt:0], MMPreloadCacheSizeKey, - [NSNumber numberWithInt:0], MMLastWindowClosedBehaviorKey, + MMUntitledWindowKey, + [NSNumber numberWithBool:NO], MMZoomBothKey, + @"", MMLoginShellCommandKey, + @"", MMLoginShellArgumentKey, + [NSNumber numberWithBool:YES], MMDialogsTrackPwdKey, + [NSNumber numberWithInt:3], MMOpenLayoutKey, + [NSNumber numberWithBool:NO], MMVerticalSplitKey, + [NSNumber numberWithInt:0], MMPreloadCacheSizeKey, + [NSNumber numberWithInt:0], MMLastWindowClosedBehaviorKey, #ifdef INCLUDE_OLD_IM_CODE - [NSNumber numberWithBool:YES], MMUseInlineImKey, + [NSNumber numberWithBool:YES], MMUseInlineImKey, #endif // INCLUDE_OLD_IM_CODE - [NSNumber numberWithBool:NO], MMSuppressTerminationAlertKey, - [NSNumber numberWithBool:YES], MMNativeFullScreenKey, + [NSNumber numberWithBool:NO], MMSuppressTerminationAlertKey, + [NSNumber numberWithBool:YES], MMNativeFullScreenKey, + [NSNumber numberWithDouble:0.25], MMFullScreenFadeTimeKey, nil]; [[NSUserDefaults standardUserDefaults] registerDefaults:dict]; diff --git a/src/MacVim/MMFullScreenWindow.h b/src/MacVim/MMFullScreenWindow.h index 9a86c5c5d8..629570c40c 100644 --- a/src/MacVim/MMFullScreenWindow.h +++ b/src/MacVim/MMFullScreenWindow.h @@ -30,6 +30,10 @@ // This stores the contents of fuoptions_flags at fu start time int startFuFlags; + + // Controls the speed of the fade in and out. + double fadeTime; + double fadeReservationTime; } - (MMFullScreenWindow *)initWithWindow:(NSWindow *)t view:(MMVimView *)v diff --git a/src/MacVim/MMFullScreenWindow.m b/src/MacVim/MMFullScreenWindow.m index ed6bd970af..001db49d06 100644 --- a/src/MacVim/MMFullScreenWindow.m +++ b/src/MacVim/MMFullScreenWindow.m @@ -104,7 +104,15 @@ - (MMFullScreenWindow *)initWithWindow:(NSWindow *)t view:(MMVimView *)v // NOTE: Vim needs to process mouse moved events, so enable them here. [self setAcceptsMouseMovedEvents:YES]; - + + fadeTime = [[NSUserDefaults standardUserDefaults] doubleForKey:MMFullScreenFadeTimeKey]; + + // Each fade goes in and then out, so the fade hardware must be reserved accordingly and the + // actual fade time can't exceed half the allowable reservation time... plus some slack to + // prevent visual artifacts caused by defaulting on the fade hardware lease. + fadeTime = MIN(fadeTime, 0.45 * kCGMaxDisplayReservationInterval); + fadeReservationTime = 2.0 * fadeTime + 0.1; + return self; } @@ -137,8 +145,8 @@ - (void)enterFullScreen // fade to black Boolean didBlend = NO; CGDisplayFadeReservationToken token; - if (CGAcquireDisplayFadeReservation(.5, &token) == kCGErrorSuccess) { - CGDisplayFade(token, .25, kCGDisplayBlendNormal, + if (CGAcquireDisplayFadeReservation(fadeReservationTime, &token) == kCGErrorSuccess) { + CGDisplayFade(token, fadeTime, kCGDisplayBlendNormal, kCGDisplayBlendSolidColor, .0, .0, .0, true); didBlend = YES; } @@ -212,7 +220,7 @@ - (void)enterFullScreen // fade back in if (didBlend) { - CGDisplayFade(token, .25, kCGDisplayBlendSolidColor, + CGDisplayFade(token, fadeTime, kCGDisplayBlendSolidColor, kCGDisplayBlendNormal, .0, .0, .0, false); CGReleaseDisplayFadeReservation(token); } @@ -225,8 +233,8 @@ - (void)leaveFullScreen // fade to black Boolean didBlend = NO; CGDisplayFadeReservationToken token; - if (CGAcquireDisplayFadeReservation(.5, &token) == kCGErrorSuccess) { - CGDisplayFade(token, .25, kCGDisplayBlendNormal, + if (CGAcquireDisplayFadeReservation(fadeReservationTime, &token) == kCGErrorSuccess) { + CGDisplayFade(token, fadeTime, kCGDisplayBlendNormal, kCGDisplayBlendSolidColor, .0, .0, .0, true); didBlend = YES; } @@ -320,7 +328,7 @@ - (void)leaveFullScreen // fade back in if (didBlend) { - CGDisplayFade(token, .25, kCGDisplayBlendSolidColor, + CGDisplayFade(token, fadeTime, kCGDisplayBlendSolidColor, kCGDisplayBlendNormal, .0, .0, .0, false); CGReleaseDisplayFadeReservation(token); } diff --git a/src/MacVim/Miscellaneous.h b/src/MacVim/Miscellaneous.h index da513c1b32..263917eea8 100644 --- a/src/MacVim/Miscellaneous.h +++ b/src/MacVim/Miscellaneous.h @@ -51,6 +51,7 @@ extern NSString *MMUseInlineImKey; extern NSString *MMSuppressTerminationAlertKey; extern NSString *MMNativeFullScreenKey; extern NSString *MMUseMouseTimeKey; +extern NSString *MMFullScreenFadeTimeKey; // Enum for MMUntitledWindowKey diff --git a/src/MacVim/Miscellaneous.m b/src/MacVim/Miscellaneous.m index 8760ba5e56..bba9d280cf 100644 --- a/src/MacVim/Miscellaneous.m +++ b/src/MacVim/Miscellaneous.m @@ -47,6 +47,7 @@ NSString *MMSuppressTerminationAlertKey = @"MMSuppressTerminationAlert"; NSString *MMNativeFullScreenKey = @"MMNativeFullScreen"; NSString *MMUseMouseTimeKey = @"MMUseMouseTime"; +NSString *MMFullScreenFadeTimeKey = @"MMFullScreenFadeTime";