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