Revision: 15347
          http://sourceforge.net/p/skim-app/code/15347
Author:   hofman
Date:     2025-06-02 15:31:32 +0000 (Mon, 02 Jun 2025)
Log Message:
-----------
Always use cross fade animation for full screen, e.g. for smooth animation to 
different full screen setup or background color

Modified Paths:
--------------
    trunk/SKMainWindowController.m
    trunk/SKMainWindowController_FullScreen.m

Modified: trunk/SKMainWindowController.m
===================================================================
--- trunk/SKMainWindowController.m      2025-06-02 14:35:22 UTC (rev 15346)
+++ trunk/SKMainWindowController.m      2025-06-02 15:31:32 UTC (rev 15347)
@@ -152,7 +152,6 @@
 #define SCROLLPOINT_KEY             @"scrollPoint"
 #define LOCKED_KEY                  @"locked"
 #define CROPBOXES_KEY               @"cropBpxes"
-#define USECUSTOMANIMATION_KEY      @"useCustomAnimation"
 
 #define TRANSITION_KEY      @"transition"
 #define PAGETRANSITIONS_KEY @"pageTransitions"
@@ -614,7 +613,7 @@
         [setup addEntriesFromDictionary:[pdfView displaySettings]];
     if ([self interactionMode] != SKNormalMode || [[pdfView document] 
isLocked]) {
         [setup addEntriesFromDictionary:savedNormalSetup];
-        [setup removeObjectsForKeys:@[HASHORIZONTALSCROLLER_KEY, 
HASVERTICALSCROLLER_KEY, AUTOHIDESSCROLLERS_KEY, DRAWSBACKGROUND_KEY, 
TABGROUP_KEY, TABINDEX_KEY, USECUSTOMANIMATION_KEY, LOCKED_KEY]];
+        [setup removeObjectsForKeys:@[HASHORIZONTALSCROLLER_KEY, 
HASVERTICALSCROLLER_KEY, AUTOHIDESSCROLLERS_KEY, DRAWSBACKGROUND_KEY, 
TABGROUP_KEY, TABINDEX_KEY, LOCKED_KEY]];
     }
     
     return setup;

Modified: trunk/SKMainWindowController_FullScreen.m
===================================================================
--- trunk/SKMainWindowController_FullScreen.m   2025-06-02 14:35:22 UTC (rev 
15346)
+++ trunk/SKMainWindowController_FullScreen.m   2025-06-02 15:31:32 UTC (rev 
15347)
@@ -77,7 +77,6 @@
 #define DRAWSBACKGROUND_KEY         @"drawsBackground"
 #define TABGROUP_KEY                @"tabGroup"
 #define TABINDEX_KEY                @"tabIndex"
-#define USECUSTOMANIMATION_KEY      @"useCustomAnimation"
 
 #define SKAutoHideToolbarInFullScreenKey @"SKAutoHideToolbarInFullScreen"
 #define SKResizablePresentationKey @"SKResizablePresentation"
@@ -540,13 +539,7 @@
     return 0.0;
 }
 
-static inline void setAlphaValueOfTitleBarControls(NSWindow *window, CGFloat 
alpha, BOOL animate) {
-    for (NSView *view in [[[window standardWindowButton:NSWindowCloseButton] 
superview] subviews])
-        if ([view isKindOfClass:[NSControl class]])
-            [(animate ? (id)[view animator] : (id)view) setAlphaValue:alpha];
-}
-
-- (NSArray *)customWindowsToEnterOrExitFullScreen:(BOOL)force {
+- (NSArray *)customWindowsToEnterOrExitFullScreen {
     NSMutableArray *windows = [NSMutableArray array];
     for (NSWindowController *wc in [[self document] windowControllers]) {
         NSWindow *window = [wc window];
@@ -553,12 +546,8 @@
         if ([window isVisible])
             [windows addObject:window];
     }
-    if (force == NO && [windows count] == 1)
-        return nil;
-    if ([[NSWorkspace sharedWorkspace] 
accessibilityDisplayShouldReduceMotion]) {
-        savedNormalWindow = [[SKAnimatedBorderlessWindow alloc] 
initWithContentRect:[[self window] frame]];
-        [windows addObject:savedNormalWindow];
-    }
+    savedNormalWindow = [[SKAnimatedBorderlessWindow alloc] 
initWithContentRect:[[self window] frame]];
+    [windows addObject:savedNormalWindow];
     return windows;
 }
 
@@ -603,72 +592,56 @@
 }
 
 - (NSArray *)customWindowsToEnterFullScreenForWindow:(NSWindow *)window {
-    return [self customWindowsToEnterOrExitFullScreen:NO];
+    return [self customWindowsToEnterOrExitFullScreen];
 }
 
 - (void)window:(NSWindow *)window 
startCustomAnimationToEnterFullScreenWithDuration:(NSTimeInterval)duration {
-    [savedNormalSetup setObject:@YES forKey:USECUSTOMANIMATION_KEY];
-    BOOL showToolbarInFullscreeen = [[window toolbar] isVisible] && 
autoHideToolbarInFullScreen() == NO;
-    if (fullScreenToolbarOffset <= 0.0 && showToolbarInFullscreeen)
-        fullScreenToolbarOffset = toolbarViewOffset(window);
     NSRect frame = [[window screen] frame];
     if ([[NSUserDefaults standardUserDefaults] 
boolForKey:AppleMenuBarVisibleInFullscreenKey])
         frame.size.height -= [[NSApp mainMenu] menuBarHeight] ?: 24.0;
-    if (savedNormalWindow != nil) {
-        NSWindow *displayWindow = savedNormalWindow;
-        savedNormalWindow = nil;
-        [self displayStaticContentInWindow:displayWindow 
ordered:NSWindowBelow];
-        NSTitlebarAccessoryViewController *noteToolbar = nil;
-        CALayer *blackLayer = nil;
-        if (showToolbarInFullscreeen) {
-            CGFloat offset = fullScreenOffset(window);
-            frame.size.height += offset;
-            NSUInteger i = noteToolbarController ? [[window 
titlebarAccessoryViewControllers] indexOfObject:noteToolbarController] : 
NSNotFound;
-            if (i != NSNotFound) {
-                noteToolbar = noteToolbarController;
-                [window removeTitlebarAccessoryViewControllerAtIndex:i];
-            }
-            [(SKMainWindow *)window setDisableConstrainedFrame:YES];
-            [window setFrame:frame display:YES];
-            [(SKMainWindow *)window setDisableConstrainedFrame:NO];
-            blackLayer = [CALayer layer];
-            [blackLayer 
setBackgroundColor:CGColorGetConstantColor(kCGColorBlack)];
-            [blackLayer setZPosition:1.0];
-            [blackLayer setFrame:SKSliceRect([window 
convertRectFromScreen:frame], offset, NSMaxYEdge)];
-            [[[[window contentView] superview] layer] addSublayer:blackLayer];
-            setAlphaValueOfTitleBarControls(window, 0.0, NO);
-            [self windowWillEnterFullScreenStyle:window];
-        } else {
-            [window setStyleMask:[window styleMask] | 
NSWindowStyleMaskFullScreen];
-            [window setFrame:frame display:YES];
+    NSWindow *displayWindow = savedNormalWindow;
+    savedNormalWindow = nil;
+    [self displayStaticContentInWindow:displayWindow ordered:NSWindowBelow];
+    NSTitlebarAccessoryViewController *noteToolbar = nil;
+    CALayer *blackLayer = nil;
+    if ([[window toolbar] isVisible] && autoHideToolbarInFullScreen() == NO) {
+        if (fullScreenToolbarOffset <= 0.0)
+            fullScreenToolbarOffset = toolbarViewOffset(window);
+        CGFloat offset = fullScreenOffset(window);
+        frame.size.height += offset;
+        NSUInteger i = noteToolbarController ? [[window 
titlebarAccessoryViewControllers] indexOfObject:noteToolbarController] : 
NSNotFound;
+        if (i != NSNotFound) {
+            noteToolbar = noteToolbarController;
+            [window removeTitlebarAccessoryViewControllerAtIndex:i];
         }
-        [NSAnimationContext runAnimationGroup:^(NSAnimationContext *context) {
-                [context setDuration:duration];
-                [context setTimingFunction:[CAMediaTimingFunction 
functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];
-                [[window animator] setAlphaValue:1.0];
-            }
-            completionHandler:^{
-                [displayWindow orderOut:nil];
-                [blackLayer removeFromSuperlayer];
-                if (noteToolbar)
-                    [window addTitlebarAccessoryViewController:noteToolbar];
-            }];
-    } else {
-        frame.size.height += fullScreenOffset(window);
         [(SKMainWindow *)window setDisableConstrainedFrame:YES];
+        [window setFrame:frame display:YES];
+        [(SKMainWindow *)window setDisableConstrainedFrame:NO];
+        blackLayer = [CALayer layer];
+        [blackLayer setBackgroundColor:CGColorGetConstantColor(kCGColorBlack)];
+        [blackLayer setZPosition:1.0];
+        [blackLayer setFrame:SKSliceRect([window convertRectFromScreen:frame], 
offset, NSMaxYEdge)];
+        [[[[window contentView] superview] layer] addSublayer:blackLayer];
+        for (NSView *view in [[[window 
standardWindowButton:NSWindowCloseButton] superview] subviews]) {
+            if ([view isKindOfClass:[NSControl class]])
+                [view setAlphaValue:0.0];
+        }
         [self windowWillEnterFullScreenStyle:window];
-        [NSAnimationContext runAnimationGroup:^(NSAnimationContext *context) {
-                [context setDuration:duration - 0.02];
-                if (@available(macOS 12.0, *))
-                    [[(SKMainWindow *)window animator] setWindowFrame:frame];
-                else
-                    [[window animator] setFrame:frame display:NO];
-                setAlphaValueOfTitleBarControls(window, 0.0, YES);
-            }
-            completionHandler:^{
-                [(SKMainWindow *)window setDisableConstrainedFrame:NO];
-            }];
+    } else {
+        [window setStyleMask:[window styleMask] | NSWindowStyleMaskFullScreen];
+        [window setFrame:frame display:YES];
     }
+    [NSAnimationContext runAnimationGroup:^(NSAnimationContext *context) {
+            [context setDuration:duration];
+            [context setTimingFunction:[CAMediaTimingFunction 
functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];
+            [[window animator] setAlphaValue:1.0];
+        }
+        completionHandler:^{
+            [displayWindow orderOut:nil];
+            [blackLayer removeFromSuperlayer];
+            if (noteToolbar)
+                [window addTitlebarAccessoryViewController:noteToolbar];
+        }];
 }
 
 - (void)windowDidEnterFullScreen:(NSNotification *)notification {
@@ -684,10 +657,8 @@
 
 - (void)windowDidFailToEnterFullScreen:(NSWindow *)window {
     [self windowWillExitFullScreenStyle:window];
-    if ([[pdfView document] isLocked] == NO || [savedNormalSetup count] < 3)
+    if ([[pdfView document] isLocked] == NO || [savedNormalSetup count] == 1)
         [savedNormalSetup removeAllObjects];
-    else
-        [savedNormalSetup removeObjectForKey:USECUSTOMANIMATION_KEY];
     [self forceSubwindowsOnTop:NO];
     savedNormalWindow = nil;
     mwcFlags.isSwitchingFullScreen = 0;
@@ -698,47 +669,29 @@
 }
 
 - (NSArray *)customWindowsToExitFullScreenForWindow:(NSWindow *)window {
-    return [self customWindowsToEnterOrExitFullScreen:[[savedNormalSetup 
objectForKey:USECUSTOMANIMATION_KEY] boolValue]];
+    return [self customWindowsToEnterOrExitFullScreen];
 }
 
 - (void)window:(NSWindow *)window 
startCustomAnimationToExitFullScreenWithDuration:(NSTimeInterval)duration {
     NSRect frame = NSRectFromString([savedNormalSetup 
objectForKey:MAINWINDOWFRAME_KEY]);
-    if (savedNormalWindow != nil) {
-        BOOL covered = NSContainsRect([window frame], frame);
-        NSWindow *displayWindow = savedNormalWindow;
-        savedNormalWindow = nil;
-        [self displayStaticContentInWindow:displayWindow 
ordered:NSWindowAbove];
-        [window setStyleMask:[window styleMask] & 
~NSWindowStyleMaskFullScreen];
-        setAlphaValueOfTitleBarControls(window, 1.0, NO);
-        [window setFrame:frame display:YES];
-        if (covered)
-            [window setAlphaValue:1.0];
-        [NSAnimationContext runAnimationGroup:^(NSAnimationContext *context) {
-                [context setDuration:duration];
-                [context setTimingFunction:[CAMediaTimingFunction 
functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];
-                if (covered == NO)
-                    [[window animator] setAlphaValue:1.0];
-                [[displayWindow animator] setAlphaValue:0.0];
-            }
-            completionHandler:^{
-                [displayWindow orderOut:nil];
-            }];
-    } else {
-        NSRect startFrame = [window frame];
-        startFrame.size.height += fullScreenOffset(window);
-        [window setStyleMask:[window styleMask] & 
~NSWindowStyleMaskFullScreen];
-        setAlphaValueOfTitleBarControls(window, 0.0, NO);
-        [(SKMainWindow *)window setDisableConstrainedFrame:YES];
-        [window setFrame:startFrame display:YES];
-        [NSAnimationContext runAnimationGroup:^(NSAnimationContext *context) {
-                [context setDuration:duration];
-                [[window animator] setFrame:frame display:YES];
-                setAlphaValueOfTitleBarControls(window, 1.0, YES);
-            }
-            completionHandler:^{
-                [(SKMainWindow *)window setDisableConstrainedFrame:NO];
-            }];
-    }
+    BOOL covered = NSContainsRect([window frame], frame);
+    NSWindow *displayWindow = savedNormalWindow;
+    savedNormalWindow = nil;
+    [self displayStaticContentInWindow:displayWindow ordered:NSWindowAbove];
+    [window setStyleMask:[window styleMask] & ~NSWindowStyleMaskFullScreen];
+    [window setFrame:frame display:YES];
+    if (covered)
+        [window setAlphaValue:1.0];
+    [NSAnimationContext runAnimationGroup:^(NSAnimationContext *context) {
+            [context setDuration:duration];
+            [context setTimingFunction:[CAMediaTimingFunction 
functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];
+            if (covered == NO)
+                [[window animator] setAlphaValue:1.0];
+            [[displayWindow animator] setAlphaValue:0.0];
+        }
+        completionHandler:^{
+            [displayWindow orderOut:nil];
+        }];
 }
 
 - (void)windowDidExitFullScreen:(NSNotification *)notification {
@@ -745,10 +698,8 @@
     NSString *frameString = [savedNormalSetup 
objectForKey:MAINWINDOWFRAME_KEY];
     if (frameString)
         [[self window] setFrame:NSRectFromString(frameString) display:YES];
-    if ([[pdfView document] isLocked] == NO || [savedNormalSetup count] < 3)
+    if ([[pdfView document] isLocked] == NO || [savedNormalSetup count] == 1)
         [savedNormalSetup removeAllObjects];
-    else
-        [savedNormalSetup removeObjectForKey:USECUSTOMANIMATION_KEY];
     [self forceSubwindowsOnTop:NO];
     mwcFlags.isSwitchingFullScreen = 0;
     if (mwcFlags.wantsPresentationOrFullScreen) {

This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.



_______________________________________________
Skim-app-commit mailing list
Skim-app-commit@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/skim-app-commit

Reply via email to