Home | History | Annotate | Download | only in cocoa
      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