1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #import "chrome/browser/ui/cocoa/bookmarks/bookmark_bar_folder_window.h" 6 7 #import "base/logging.h" 8 #import "base/memory/scoped_nsobject.h" 9 #import "chrome/browser/ui/cocoa/bookmarks/bookmark_bar_constants.h" 10 #import "chrome/browser/ui/cocoa/bookmarks/bookmark_bar_folder_controller.h" 11 #import "chrome/browser/ui/cocoa/image_utils.h" 12 #import "third_party/GTM/AppKit/GTMNSColor+Luminance.h" 13 #import "third_party/GTM/AppKit/GTMNSBezierPath+RoundRect.h" 14 15 using bookmarks::kBookmarkBarMenuCornerRadius; 16 17 @implementation BookmarkBarFolderWindow 18 19 - (id)initWithContentRect:(NSRect)contentRect 20 styleMask:(NSUInteger)windowStyle 21 backing:(NSBackingStoreType)bufferingType 22 defer:(BOOL)deferCreation { 23 if ((self = [super initWithContentRect:contentRect 24 styleMask:NSBorderlessWindowMask // override 25 backing:bufferingType 26 defer:deferCreation])) { 27 [self setBackgroundColor:[NSColor clearColor]]; 28 [self setOpaque:NO]; 29 } 30 return self; 31 } 32 33 - (BOOL)canBecomeKeyWindow { 34 return YES; 35 } 36 37 - (BOOL)canBecomeMainWindow { 38 return NO; 39 } 40 41 // Override of keyDown as the NSWindow default implementation beeps. 42 - (void)keyDown:(NSEvent *)theEvent { 43 } 44 45 @end 46 47 48 @implementation BookmarkBarFolderWindowContentView 49 50 - (void)drawRect:(NSRect)rect { 51 // Like NSMenus, only the bottom corners are rounded. 52 NSBezierPath* bezier = 53 [NSBezierPath gtm_bezierPathWithRoundRect:[self bounds] 54 topLeftCornerRadius:kBookmarkBarMenuCornerRadius 55 topRightCornerRadius:kBookmarkBarMenuCornerRadius 56 bottomLeftCornerRadius:kBookmarkBarMenuCornerRadius 57 bottomRightCornerRadius:kBookmarkBarMenuCornerRadius]; 58 NSColor* startColor = [NSColor colorWithCalibratedWhite:0.91 alpha:1.0]; 59 NSColor* midColor = 60 [startColor gtm_colorAdjustedFor:GTMColorationLightMidtone faded:YES]; 61 NSColor* endColor = 62 [startColor gtm_colorAdjustedFor:GTMColorationLightPenumbra faded:YES]; 63 64 scoped_nsobject<NSGradient> gradient( 65 [[NSGradient alloc] initWithColorsAndLocations:startColor, 0.0, 66 midColor, 0.25, 67 endColor, 0.5, 68 midColor, 0.75, 69 startColor, 1.0, 70 nil]); 71 [gradient drawInBezierPath:bezier angle:0.0]; 72 } 73 74 @end 75 76 77 @implementation BookmarkBarFolderWindowScrollView 78 79 // We want "draw background" of the NSScrollView in the xib to be NOT 80 // checked. That allows us to round the bottom corners of the folder 81 // window. However that also allows some scrollWheel: events to leak 82 // into the NSWindow behind it (even in a different application). 83 // Better to plug the scroll leak than to round corners for M5. 84 - (void)scrollWheel:(NSEvent *)theEvent { 85 DCHECK([[[self window] windowController] 86 respondsToSelector:@selector(scrollWheel:)]); 87 [[[self window] windowController] scrollWheel:theEvent]; 88 } 89 90 @end 91