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 15using 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