diff --git a/shell/browser/native_window_mac.mm b/shell/browser/native_window_mac.mm index cb018f44b5e..a13dd350cb1 100644 --- a/shell/browser/native_window_mac.mm +++ b/shell/browser/native_window_mac.mm @@ -1372,6 +1372,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]; diff --git a/shell/browser/ui/cocoa/atom_ns_window.h b/shell/browser/ui/cocoa/atom_ns_window.h index f6c7ee65d15..8d6a2488919 100644 --- a/shell/browser/ui/cocoa/atom_ns_window.h +++ b/shell/browser/ui/cocoa/atom_ns_window.h @@ -36,12 +36,14 @@ class ScopedDisableResize { @property BOOL disableAutoHideCursor; @property BOOL disableKeyOrMainWindow; @property(nonatomic, retain) NSView* vibrantView; +@property(nonatomic, retain) NSImage* cornerMask; - (id)initWithShell:(electron::NativeWindowMac*)shell styleMask:(NSUInteger)styleMask; - (electron::NativeWindowMac*)shell; - (id)accessibilityFocusedUIElement; - (NSRect)originalContentRectForFrameRect:(NSRect)frameRect; - (void)toggleFullScreenMode:(id)sender; +- (NSImage*)_cornerMask; @end #endif // SHELL_BROWSER_UI_COCOA_ATOM_NS_WINDOW_H_ diff --git a/shell/browser/ui/cocoa/atom_ns_window.mm b/shell/browser/ui/cocoa/atom_ns_window.mm index 95eba2a35cd..283d23c4113 100644 --- a/shell/browser/ui/cocoa/atom_ns_window.mm +++ b/shell/browser/ui/cocoa/atom_ns_window.mm @@ -24,6 +24,7 @@ bool ScopedDisableResize::disable_resize_ = false; @synthesize disableAutoHideCursor; @synthesize disableKeyOrMainWindow; @synthesize vibrantView; +@synthesize cornerMask; - (id)initWithShell:(electron::NativeWindowMac*)shell styleMask:(NSUInteger)styleMask { @@ -139,6 +140,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 {