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