Merge pull request #8354 from gerhardberger/vibrancy-corner-fix

Smooth corners for vibrancy view
This commit is contained in:
Kevin Sawicki 2017-01-09 11:12:02 -08:00 коммит произвёл GitHub
Родитель 8ada7fe30b bfafc6d5fd
Коммит 5204d6ce45
1 изменённых файлов: 30 добавлений и 0 удалений

Просмотреть файл

@ -347,10 +347,12 @@ bool ScopedDisableResize::disable_resize_ = false;
@property NSPoint windowButtonsOffset;
@property (nonatomic, retain) AtomPreviewItem* quickLookItem;
@property (nonatomic, retain) NSView* vibrantView;
@property (nonatomic, retain) NSImage* cornerMask;
- (void)setShell:(atom::NativeWindowMac*)shell;
- (void)setEnableLargerThanScreen:(bool)enable;
- (void)enableWindowButtonsOffset;
- (NSImage*)_cornerMask;
@end
@implementation AtomNSWindow
@ -504,6 +506,12 @@ bool ScopedDisableResize::disable_resize_ = false;
return [[self contentView] superview];
}
// By overriding this built-in method the corners of the vibrant view (if set)
// will be smooth.
- (NSImage*)_cornerMask {
return [self cornerMask];
}
// Quicklook methods
- (BOOL)acceptsPreviewPanelControl:(QLPreviewPanel*)panel {
@ -1283,6 +1291,28 @@ void NativeWindowMac::SetVibrancy(const std::string& type) {
[effect_view setAutoresizingMask:NSViewWidthSizable | NSViewHeightSizable];
[effect_view setBlendingMode:NSVisualEffectBlendingModeBehindWindow];
[effect_view setState:NSVisualEffectStateActive];
// The default corner radius of a macOS window.
CGFloat radius = 5.0f;
CGFloat dimension = 2 * radius + 1;
NSSize size = NSMakeSize(dimension, dimension);
NSImage* maskImage = [[NSImage imageWithSize:size
flipped:NO
drawingHandler:^BOOL(NSRect rect) {
NSBezierPath* bezierPath = [NSBezierPath
bezierPathWithRoundedRect:rect
xRadius:radius
yRadius:radius];
[[NSColor blackColor] set];
[bezierPath fill];
return YES;
}] autorelease];
[maskImage setCapInsets:NSEdgeInsetsMake(radius, radius, radius, radius)];
[maskImage setResizingMode:NSImageResizingModeStretch];
[effect_view setMaskImage:maskImage];
[window_ setCornerMask:maskImage];
[[window_ contentView] addSubview:effect_view
positioned:NSWindowBelow
relativeTo:nil];