Revision: 14134
          http://sourceforge.net/p/skim-app/code/14134
Author:   hofman
Date:     2024-03-24 16:36:27 +0000 (Sun, 24 Mar 2024)
Log Message:
-----------
Fade window frame image while (de)miniaturizing snapshot window

Modified Paths:
--------------
    trunk/SKSnapshotWindowController.h
    trunk/SKSnapshotWindowController.m

Modified: trunk/SKSnapshotWindowController.h
===================================================================
--- trunk/SKSnapshotWindowController.h  2024-03-24 10:23:47 UTC (rev 14133)
+++ trunk/SKSnapshotWindowController.h  2024-03-24 16:36:27 UTC (rev 14134)
@@ -58,7 +58,6 @@
     NSImage *thumbnail;
     __weak id <SKSnapshotWindowControllerDelegate> delegate;
     NSString *pageLabel;
-    NSImage *windowImage;
     NSString *string;
     BOOL hasWindow;
     BOOL forceOnTop;

Modified: trunk/SKSnapshotWindowController.m
===================================================================
--- trunk/SKSnapshotWindowController.m  2024-03-24 10:23:47 UTC (rev 14133)
+++ trunk/SKSnapshotWindowController.m  2024-03-24 16:36:27 UTC (rev 14134)
@@ -65,6 +65,7 @@
 #import "NSString_SKExtensions.h"
 #import "NSScroller_SKExtensions.h"
 #import "NSGraphics_SKExtensions.h"
+#import "NSView_SKExtensions.h"
 
 #define SMALL_DELAY 0.1
 #define RESIZE_TIME_FACTOR 1.0
@@ -583,24 +584,41 @@
     return NSMakeRect(NSMinX(targetRect) - scaleFactor * NSMinX(sourceRect), 
NSMinY(targetRect) - scaleFactor * NSMinY(sourceRect), scaleFactor * 
windowSize.width, scaleFactor * windowSize.height);
 }
 
+static NSImageView *addImageView(NSView *view, NSImage *image) {
+    NSImageView *imageView = [[NSImageView alloc] init];
+    [imageView setEditable:NO];
+    [imageView setImageFrameStyle:NSImageFrameNone];
+    [imageView setImageScaling:NSImageScaleProportionallyUpOrDown];
+    [imageView setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable];
+    [imageView setFrame:[view bounds]];
+    [view addSubview:imageView];
+    [imageView setImage:image];
+    return imageView;
+}
+
 - (void)miniaturizeWindowFromRect:(NSRect)startRect toRect:(NSRect)endRect {
-    BOOL needsFilters = NO;
-    if (windowImage == nil) {
-        if ([self hasWindow]) {
-            windowImage = [(SKSnapshotWindow *)[self window] windowImage];
-        } else {
-            needsFilters = YES;
-            windowImage = [self thumbnailWithSize:-1.0];
-        }
+    BOOL hadWindow = [self hasWindow];
+    NSImage *contentImage = [self thumbnailWithSize:-1.0];
+    NSImage *windowImage;
+    
+    if (hadWindow) {
+        windowImage = [(SKSnapshotWindow *)[self window] windowImage];
+    } else {
+        NSView *view = [[[self window] contentView] superview];
+        windowImage = [[NSImage alloc] initWithSize:[[self window] 
frame].size];
+        [windowImage addRepresentation:[view 
bitmapImageRepCachingDisplayInRect:[view bounds]]];
     }
     
     SKAnimatedBorderlessWindow *miniaturizeWindow = 
[[SKAnimatedBorderlessWindow alloc] initWithContentRect:startRect];
     [miniaturizeWindow setLevel:NSFloatingWindowLevel];
     [miniaturizeWindow setHasShadow:YES];
-    [miniaturizeWindow setBackgroundImage:windowImage];
-    if (needsFilters)
-        [[miniaturizeWindow contentView] 
setContentFilters:SKColorEffectFilters()];
-
+    [[miniaturizeWindow contentView] setWantsLayer:YES];
+    NSImageView *imageView = addImageView([miniaturizeWindow contentView], 
windowImage);
+    NSImageView *contentImageView = addImageView([miniaturizeWindow 
contentView], contentImage);
+    [contentImageView setContentFilters:SKColorEffectFilters()];
+    if (hadWindow == NO)
+        [imageView setAlphaValue:0.0];
+    
     [miniaturizeWindow orderFront:nil];
     
     animating = YES;
@@ -608,9 +626,10 @@
     [NSAnimationContext runAnimationGroup:^(NSAnimationContext *context){
             [context setDuration:RESIZE_TIME_FACTOR * [miniaturizeWindow 
animationResizeTime:endRect]];
             [[miniaturizeWindow animator] setFrame:endRect display:YES];
+            [[imageView animator] setAlphaValue:hadWindow ? 0.0 : 1.0];
         }
         completionHandler:^{
-            if ([self hasWindow]) {
+            if (hadWindow == NO) {
                 [[self window] 
setAnimationBehavior:NSWindowAnimationBehaviorNone];
                 [[self window] orderFront:nil];
                 [self updateWindowLevel];
@@ -648,8 +667,6 @@
         NSRect startRect = [self miniaturizedRectForDockingRect:dockRect];
         
         [self miniaturizeWindowFromRect:startRect toRect:endRect];
-        
-        windowImage = nil;
     } else {
         [self showWindow:self];
     }

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



_______________________________________________
Skim-app-commit mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/skim-app-commit

Reply via email to