From 9295c0b376c9b0bbce6aaa8eb4c9ab5da30d67ae Mon Sep 17 00:00:00 2001 From: Josh Petrie Date: Wed, 8 Jun 2016 17:02:15 -0700 Subject: [PATCH 1/3] Allow custom fullscreen fade time to be controlled via MMFullScreenFadeTime user default. --- src/MacVim/MMFullScreenWindow.h | 4 ++++ src/MacVim/MMFullScreenWindow.m | 31 ++++++++++++++++++++++++------- src/MacVim/Miscellaneous.h | 1 + src/MacVim/Miscellaneous.m | 1 + 4 files changed, 30 insertions(+), 7 deletions(-) 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..d0af2bc681 100644 --- a/src/MacVim/MMFullScreenWindow.m +++ b/src/MacVim/MMFullScreenWindow.m @@ -104,7 +104,24 @@ - (MMFullScreenWindow *)initWithWindow:(NSWindow *)t view:(MMVimView *)v // NOTE: Vim needs to process mouse moved events, so enable them here. [self setAcceptsMouseMovedEvents:YES]; - + + // Prefer to get the fade time from preferences, but default to the original time + // if the key doesn't exist yet. + NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults]; + if ([[[defaults dictionaryRepresentation] allKeys] containsObject:MMFullScreenFadeTimeKey]) { + fadeTime = [[NSUserDefaults standardUserDefaults] doubleForKey:MMFullScreenFadeTimeKey]; + } else { + fadeTime = 0.25; + } + + // 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. + if (fadeTime > 0.45 * kCGMaxDisplayReservationInterval) { + fadeTime = 0.45 * kCGMaxDisplayReservationInterval; + } + fadeReservationTime = 2.0 * fadeTime + 0.1; + return self; } @@ -137,8 +154,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 +229,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 +242,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 +337,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"; From 72234fae0f9591c083d2755e625b5e286da24fe6 Mon Sep 17 00:00:00 2001 From: Josh Petrie Date: Wed, 8 Jun 2016 18:58:31 -0700 Subject: [PATCH 2/3] Set the default for MMFullScreenFadeTime at startup to avoid cumbersome checks later. --- src/MacVim/MMAppController.m | 59 +++++++++++++++++---------------- src/MacVim/MMFullScreenWindow.m | 11 ++---- 2 files changed, 32 insertions(+), 38 deletions(-) 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.m b/src/MacVim/MMFullScreenWindow.m index d0af2bc681..9c3699a09e 100644 --- a/src/MacVim/MMFullScreenWindow.m +++ b/src/MacVim/MMFullScreenWindow.m @@ -105,15 +105,8 @@ - (MMFullScreenWindow *)initWithWindow:(NSWindow *)t view:(MMVimView *)v // NOTE: Vim needs to process mouse moved events, so enable them here. [self setAcceptsMouseMovedEvents:YES]; - // Prefer to get the fade time from preferences, but default to the original time - // if the key doesn't exist yet. - NSUserDefaults * defaults = [NSUserDefaults standardUserDefaults]; - if ([[[defaults dictionaryRepresentation] allKeys] containsObject:MMFullScreenFadeTimeKey]) { - fadeTime = [[NSUserDefaults standardUserDefaults] doubleForKey:MMFullScreenFadeTimeKey]; - } else { - fadeTime = 0.25; - } - + 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. From 8a138245e8487e536504a1a2119c317f5db0d37f Mon Sep 17 00:00:00 2001 From: Josh Petrie Date: Thu, 9 Jun 2016 18:23:51 -0700 Subject: [PATCH 3/3] Clamp fade time using MIN() rather than manually. --- src/MacVim/MMFullScreenWindow.m | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/MacVim/MMFullScreenWindow.m b/src/MacVim/MMFullScreenWindow.m index 9c3699a09e..001db49d06 100644 --- a/src/MacVim/MMFullScreenWindow.m +++ b/src/MacVim/MMFullScreenWindow.m @@ -110,9 +110,7 @@ - (MMFullScreenWindow *)initWithWindow:(NSWindow *)t view:(MMVimView *)v // 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. - if (fadeTime > 0.45 * kCGMaxDisplayReservationInterval) { - fadeTime = 0.45 * kCGMaxDisplayReservationInterval; - } + fadeTime = MIN(fadeTime, 0.45 * kCGMaxDisplayReservationInterval); fadeReservationTime = 2.0 * fadeTime + 0.1; return self;