Revision: 14139
          http://sourceforge.net/p/skim-app/code/14139
Author:   hofman
Date:     2024-03-25 00:07:34 +0000 (Mon, 25 Mar 2024)
Log Message:
-----------
Apply color filters to window image from bitmap when using legacy scrollers

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

Modified: trunk/SKSnapshotWindowController.m
===================================================================
--- trunk/SKSnapshotWindowController.m  2024-03-24 18:09:51 UTC (rev 14138)
+++ trunk/SKSnapshotWindowController.m  2024-03-25 00:07:34 UTC (rev 14139)
@@ -596,8 +596,25 @@
     return imageView;
 }
 
+static void applyFiltersToImageRep(NSBitmapImageRep *imageRep, NSArray 
*filters, NSRect rect) {
+    CGFloat scale = [imageRep pixelsHigh] / [imageRep size].height;
+    NSRect scaledRect = NSZeroRect;
+    scaledRect.size.width = scale * NSWidth(rect);
+    scaledRect.size.height = scale * NSHeight(rect);
+    CIImage *image = [[CIImage alloc] initWithBitmapImageRep:imageRep];
+    for (CIFilter *filter in filters) {
+        [filter setValue:image forKey:kCIInputImageKey];
+        image = [filter outputImage];
+    }
+    [NSGraphicsContext saveGraphicsState];
+    [NSGraphicsContext setCurrentContext:[NSGraphicsContext 
graphicsContextWithBitmapImageRep:imageRep]];
+    [image drawInRect:rect fromRect:scaledRect 
operation:NSCompositingOperationSourceOver fraction:1.0];
+    [NSGraphicsContext restoreGraphicsState];
+}
+
 - (void)miniaturizeWindow:(BOOL)miniaturize fromRect:(NSRect)startRect 
toRect:(NSRect)endRect {
     NSWindow *window = [self window];
+    NSArray *filters = SKColorEffectFilters();
     NSImage *contentImage = [self thumbnailWithSize:-1.0];
     NSImage *windowImage;
     
@@ -605,7 +622,10 @@
         windowImage = [(SKSnapshotWindow *)window windowImage];
     } else {
         windowImage = [[NSImage alloc] initWithSize:[window frame].size];
-        [windowImage addRepresentation:[[[window contentView] superview] 
bitmapImageRepCachingDisplay]];
+        NSBitmapImageRep *imageRep = [[[window contentView] superview] 
bitmapImageRepCachingDisplay];
+        if ([filters count] > 0 && [NSScroller preferredScrollerStyle] == 
NSScrollerStyleLegacy)
+            applyFiltersToImageRep(imageRep, filters, [window 
contentLayoutRect]);
+        [windowImage addRepresentation:imageRep];
     }
     
     SKAnimatedBorderlessWindow *miniaturizeWindow = 
[[SKAnimatedBorderlessWindow alloc] initWithContentRect:startRect];
@@ -614,10 +634,11 @@
     [[miniaturizeWindow contentView] setWantsLayer:YES];
     NSImageView *imageView = addImageView([miniaturizeWindow contentView], 
windowImage);
     NSImageView *contentImageView = addImageView([miniaturizeWindow 
contentView], contentImage);
-    [contentImageView setContentFilters:SKColorEffectFilters()];
+    [contentImageView setContentFilters:filters];
     if (miniaturize == NO)
         [imageView setAlphaValue:0.0];
-    
+    [contentImageView setAlphaValue:0.0];
+
     [miniaturizeWindow orderFront:nil];
     
     if (miniaturize) {

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