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/new_tab_button.h" 6 #import "chrome/browser/ui/cocoa/image_button_cell.h" 7 #include "grit/theme_resources.h" 8 #include "ui/base/resource/resource_bundle.h" 9 10 // A simple override of the ImageButtonCell to disable handling of 11 // -mouseEntered. 12 @interface NewTabButtonCell : ImageButtonCell 13 14 - (void)mouseEntered:(NSEvent*)theEvent; 15 16 @end 17 18 @implementation NewTabButtonCell 19 20 - (void)mouseEntered:(NSEvent*)theEvent { 21 // Ignore this since the NTB enter is handled by the TabStripController. 22 } 23 24 @end 25 26 27 @implementation NewTabButton 28 29 + (Class)cellClass { 30 return [NewTabButtonCell class]; 31 } 32 33 - (BOOL)pointIsOverButton:(NSPoint)point { 34 NSPoint localPoint = [self convertPoint:point fromView:[self superview]]; 35 NSRect pointRect = NSMakeRect(localPoint.x, localPoint.y, 1, 1); 36 ui::ResourceBundle& bundle = ui::ResourceBundle::GetSharedInstance(); 37 NSImage* buttonMask = 38 bundle.GetNativeImageNamed(IDR_NEWTAB_BUTTON_MASK).ToNSImage(); 39 NSRect destinationRect = NSMakeRect( 40 (NSWidth(self.bounds) - [buttonMask size].width) / 2, 41 (NSHeight(self.bounds) - [buttonMask size].height) / 2, 42 [buttonMask size].width, [buttonMask size].height); 43 return [buttonMask hitTestRect:pointRect 44 withImageDestinationRect:destinationRect 45 context:nil 46 hints:nil 47 flipped:YES]; 48 } 49 50 // Override to only accept clicks within the bounds of the defined path, not 51 // the entire bounding box. |aPoint| is in the superview's coordinate system. 52 - (NSView*)hitTest:(NSPoint)aPoint { 53 if ([self pointIsOverButton:aPoint]) 54 return [super hitTest:aPoint]; 55 return nil; 56 } 57 58 @end 59