Skip to content

Commit a74dd68

Browse files
authored
Merge pull request #292 from macvim-dev/fullscreen-fade-control
Implement fullscreen fade control.
2 parents ff3dd64 + 8a13824 commit a74dd68

File tree

5 files changed

+51
-36
lines changed

5 files changed

+51
-36
lines changed

src/MacVim/MMAppController.m

Lines changed: 30 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -183,39 +183,40 @@ + (void)initialize
183183
kCFPreferencesCurrentApplication);
184184

185185
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
186-
[NSNumber numberWithBool:NO], MMNoWindowKey,
187-
[NSNumber numberWithInt:64], MMTabMinWidthKey,
188-
[NSNumber numberWithInt:6*64], MMTabMaxWidthKey,
189-
[NSNumber numberWithInt:132], MMTabOptimumWidthKey,
190-
[NSNumber numberWithBool:YES], MMShowAddTabButtonKey,
191-
[NSNumber numberWithInt:2], MMTextInsetLeftKey,
192-
[NSNumber numberWithInt:1], MMTextInsetRightKey,
193-
[NSNumber numberWithInt:1], MMTextInsetTopKey,
194-
[NSNumber numberWithInt:1], MMTextInsetBottomKey,
195-
@"MMTypesetter", MMTypesetterKey,
196-
[NSNumber numberWithFloat:1], MMCellWidthMultiplierKey,
197-
[NSNumber numberWithFloat:-1], MMBaselineOffsetKey,
198-
[NSNumber numberWithBool:YES], MMTranslateCtrlClickKey,
199-
[NSNumber numberWithInt:0], MMOpenInCurrentWindowKey,
200-
[NSNumber numberWithBool:NO], MMNoFontSubstitutionKey,
201-
[NSNumber numberWithBool:YES], MMLoginShellKey,
186+
[NSNumber numberWithBool:NO], MMNoWindowKey,
187+
[NSNumber numberWithInt:64], MMTabMinWidthKey,
188+
[NSNumber numberWithInt:6*64], MMTabMaxWidthKey,
189+
[NSNumber numberWithInt:132], MMTabOptimumWidthKey,
190+
[NSNumber numberWithBool:YES], MMShowAddTabButtonKey,
191+
[NSNumber numberWithInt:2], MMTextInsetLeftKey,
192+
[NSNumber numberWithInt:1], MMTextInsetRightKey,
193+
[NSNumber numberWithInt:1], MMTextInsetTopKey,
194+
[NSNumber numberWithInt:1], MMTextInsetBottomKey,
195+
@"MMTypesetter", MMTypesetterKey,
196+
[NSNumber numberWithFloat:1], MMCellWidthMultiplierKey,
197+
[NSNumber numberWithFloat:-1], MMBaselineOffsetKey,
198+
[NSNumber numberWithBool:YES], MMTranslateCtrlClickKey,
199+
[NSNumber numberWithInt:0], MMOpenInCurrentWindowKey,
200+
[NSNumber numberWithBool:NO], MMNoFontSubstitutionKey,
201+
[NSNumber numberWithBool:YES], MMLoginShellKey,
202202
[NSNumber numberWithInt:MMRendererCoreText],
203-
MMRendererKey,
203+
MMRendererKey,
204204
[NSNumber numberWithInt:MMUntitledWindowAlways],
205-
MMUntitledWindowKey,
206-
[NSNumber numberWithBool:NO], MMZoomBothKey,
207-
@"", MMLoginShellCommandKey,
208-
@"", MMLoginShellArgumentKey,
209-
[NSNumber numberWithBool:YES], MMDialogsTrackPwdKey,
210-
[NSNumber numberWithInt:3], MMOpenLayoutKey,
211-
[NSNumber numberWithBool:NO], MMVerticalSplitKey,
212-
[NSNumber numberWithInt:0], MMPreloadCacheSizeKey,
213-
[NSNumber numberWithInt:0], MMLastWindowClosedBehaviorKey,
205+
MMUntitledWindowKey,
206+
[NSNumber numberWithBool:NO], MMZoomBothKey,
207+
@"", MMLoginShellCommandKey,
208+
@"", MMLoginShellArgumentKey,
209+
[NSNumber numberWithBool:YES], MMDialogsTrackPwdKey,
210+
[NSNumber numberWithInt:3], MMOpenLayoutKey,
211+
[NSNumber numberWithBool:NO], MMVerticalSplitKey,
212+
[NSNumber numberWithInt:0], MMPreloadCacheSizeKey,
213+
[NSNumber numberWithInt:0], MMLastWindowClosedBehaviorKey,
214214
#ifdef INCLUDE_OLD_IM_CODE
215-
[NSNumber numberWithBool:YES], MMUseInlineImKey,
215+
[NSNumber numberWithBool:YES], MMUseInlineImKey,
216216
#endif // INCLUDE_OLD_IM_CODE
217-
[NSNumber numberWithBool:NO], MMSuppressTerminationAlertKey,
218-
[NSNumber numberWithBool:YES], MMNativeFullScreenKey,
217+
[NSNumber numberWithBool:NO], MMSuppressTerminationAlertKey,
218+
[NSNumber numberWithBool:YES], MMNativeFullScreenKey,
219+
[NSNumber numberWithDouble:0.25], MMFullScreenFadeTimeKey,
219220
nil];
220221

221222
[[NSUserDefaults standardUserDefaults] registerDefaults:dict];

src/MacVim/MMFullScreenWindow.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,10 @@
3030

3131
// This stores the contents of fuoptions_flags at fu start time
3232
int startFuFlags;
33+
34+
// Controls the speed of the fade in and out.
35+
double fadeTime;
36+
double fadeReservationTime;
3337
}
3438

3539
- (MMFullScreenWindow *)initWithWindow:(NSWindow *)t view:(MMVimView *)v

src/MacVim/MMFullScreenWindow.m

Lines changed: 15 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,15 @@ - (MMFullScreenWindow *)initWithWindow:(NSWindow *)t view:(MMVimView *)v
104104

105105
// NOTE: Vim needs to process mouse moved events, so enable them here.
106106
[self setAcceptsMouseMovedEvents:YES];
107-
107+
108+
fadeTime = [[NSUserDefaults standardUserDefaults] doubleForKey:MMFullScreenFadeTimeKey];
109+
110+
// Each fade goes in and then out, so the fade hardware must be reserved accordingly and the
111+
// actual fade time can't exceed half the allowable reservation time... plus some slack to
112+
// prevent visual artifacts caused by defaulting on the fade hardware lease.
113+
fadeTime = MIN(fadeTime, 0.45 * kCGMaxDisplayReservationInterval);
114+
fadeReservationTime = 2.0 * fadeTime + 0.1;
115+
108116
return self;
109117
}
110118

@@ -137,8 +145,8 @@ - (void)enterFullScreen
137145
// fade to black
138146
Boolean didBlend = NO;
139147
CGDisplayFadeReservationToken token;
140-
if (CGAcquireDisplayFadeReservation(.5, &token) == kCGErrorSuccess) {
141-
CGDisplayFade(token, .25, kCGDisplayBlendNormal,
148+
if (CGAcquireDisplayFadeReservation(fadeReservationTime, &token) == kCGErrorSuccess) {
149+
CGDisplayFade(token, fadeTime, kCGDisplayBlendNormal,
142150
kCGDisplayBlendSolidColor, .0, .0, .0, true);
143151
didBlend = YES;
144152
}
@@ -212,7 +220,7 @@ - (void)enterFullScreen
212220

213221
// fade back in
214222
if (didBlend) {
215-
CGDisplayFade(token, .25, kCGDisplayBlendSolidColor,
223+
CGDisplayFade(token, fadeTime, kCGDisplayBlendSolidColor,
216224
kCGDisplayBlendNormal, .0, .0, .0, false);
217225
CGReleaseDisplayFadeReservation(token);
218226
}
@@ -225,8 +233,8 @@ - (void)leaveFullScreen
225233
// fade to black
226234
Boolean didBlend = NO;
227235
CGDisplayFadeReservationToken token;
228-
if (CGAcquireDisplayFadeReservation(.5, &token) == kCGErrorSuccess) {
229-
CGDisplayFade(token, .25, kCGDisplayBlendNormal,
236+
if (CGAcquireDisplayFadeReservation(fadeReservationTime, &token) == kCGErrorSuccess) {
237+
CGDisplayFade(token, fadeTime, kCGDisplayBlendNormal,
230238
kCGDisplayBlendSolidColor, .0, .0, .0, true);
231239
didBlend = YES;
232240
}
@@ -320,7 +328,7 @@ - (void)leaveFullScreen
320328

321329
// fade back in
322330
if (didBlend) {
323-
CGDisplayFade(token, .25, kCGDisplayBlendSolidColor,
331+
CGDisplayFade(token, fadeTime, kCGDisplayBlendSolidColor,
324332
kCGDisplayBlendNormal, .0, .0, .0, false);
325333
CGReleaseDisplayFadeReservation(token);
326334
}

src/MacVim/Miscellaneous.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,7 @@ extern NSString *MMUseInlineImKey;
5151
extern NSString *MMSuppressTerminationAlertKey;
5252
extern NSString *MMNativeFullScreenKey;
5353
extern NSString *MMUseMouseTimeKey;
54+
extern NSString *MMFullScreenFadeTimeKey;
5455

5556

5657
// Enum for MMUntitledWindowKey

src/MacVim/Miscellaneous.m

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@
4747
NSString *MMSuppressTerminationAlertKey = @"MMSuppressTerminationAlert";
4848
NSString *MMNativeFullScreenKey = @"MMNativeFullScreen";
4949
NSString *MMUseMouseTimeKey = @"MMUseMouseTime";
50+
NSString *MMFullScreenFadeTimeKey = @"MMFullScreenFadeTime";
5051

5152

5253

0 commit comments

Comments
 (0)