Revision: 14148
          http://sourceforge.net/p/skim-app/code/14148
Author:   hofman
Date:     2024-03-26 22:39:56 +0000 (Tue, 26 Mar 2024)
Log Message:
-----------
Round corners for bitmap image for window screenshot

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

Modified: trunk/SKSnapshotWindowController.m
===================================================================
--- trunk/SKSnapshotWindowController.m  2024-03-26 15:44:36 UTC (rev 14147)
+++ trunk/SKSnapshotWindowController.m  2024-03-26 22:39:56 UTC (rev 14148)
@@ -498,6 +498,9 @@
     
     [image lockFocus];
     
+    if (size < 0.0)
+        [[NSBezierPath bezierPathWithRoundedRect:NSMakeRect(0.0, 0.0, 
thumbnailSize.width, thumbnailSize.height + 24.0) xRadius:12.0 yRadius:12.0] 
addClip];
+    
     [[NSGraphicsContext currentContext] 
setImageInterpolation:NSImageInterpolationHigh];
     [transform concat];
     
@@ -596,17 +599,29 @@
     return imageView;
 }
 
-static void applyFiltersToImageRep(NSBitmapImageRep *imageRep, NSArray 
*filters, NSRect rect) {
-    CGFloat scale = [imageRep pixelsWide] / [imageRep size].width;
-    NSRect scaledRect = NSMakeRect(scale * NSMinX(rect), scale * NSMinY(rect), 
scale * NSWidth(rect), scale * NSHeight(rect));
-    CIImage *image = [[CIImage alloc] initWithBitmapImageRep:imageRep];
-    for (CIFilter *filter in filters) {
-        [filter setValue:image forKey:kCIInputImageKey];
-        image = [filter outputImage];
+static void roundCornersAndApplyFiltersToImageRep(NSBitmapImageRep *imageRep, 
NSArray *filters, NSRect rect) {
+    NSRect r = {NSZeroPoint, [imageRep size]};
+    NSBezierPath *path = [NSBezierPath bezierPathWithRoundedRect:r 
xRadius:12.0 yRadius:12.0];
+    [path appendBezierPathWithRect:r];
+    [path setWindingRule:NSEvenOddWindingRule];
+    
+    CIImage *image = nil;
+    NSRect scaledRect;
+    if ([filters count]) {
+        CGFloat scale = [imageRep pixelsWide] / [imageRep size].width;
+        scaledRect = NSMakeRect(scale * NSMinX(rect), scale * NSMinY(rect), 
scale * NSWidth(rect), scale * NSHeight(rect));
+        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:NSCompositingOperationCopy fraction:1.0];
+    [[NSGraphicsContext currentContext] 
setCompositingOperation:NSCompositingOperationClear];
+    [path fill];
     [NSGraphicsContext restoreGraphicsState];
 }
 
@@ -628,8 +643,7 @@
             CGImageRelease(cgImage);
         } else {
             NSBitmapImageRep *imageRep = [[[window contentView] superview] 
bitmapImageRepCachingDisplay];
-            if ([filters count] > 0 && [NSScroller preferredScrollerStyle] == 
NSScrollerStyleLegacy)
-                applyFiltersToImageRep(imageRep, filters, [window 
contentLayoutRect]);
+            roundCornersAndApplyFiltersToImageRep(imageRep, filters, [window 
contentLayoutRect]);
             windowImage = [[NSImage alloc] initWithSize:windowRect.size];
             [windowImage addRepresentation:imageRep];
         }

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