Home | History | Annotate | Download | only in location_bar
      1 // Copyright (c) 2012 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 #ifndef CHROME_BROWSER_UI_COCOA_LOCATION_BAR_BUTTON_DECORATION_H_
      6 #define CHROME_BROWSER_UI_COCOA_LOCATION_BAR_BUTTON_DECORATION_H_
      7 
      8 #import "base/mac/scoped_nsobject.h"
      9 #include "chrome/browser/ui/cocoa/location_bar/location_bar_decoration.h"
     10 #import "ui/base/cocoa/appkit_utils.h"
     11 
     12 // |LocationBarDecoration| which looks and acts like a button. It has a
     13 // nine-part image as the background, and an icon that is rendered in the center
     14 // of the nine-part image.
     15 
     16 class ButtonDecoration : public LocationBarDecoration {
     17  public:
     18   enum ButtonState {
     19     kButtonStateNormal,
     20     kButtonStateHover,
     21     kButtonStatePressed
     22   };
     23 
     24   // Constructs the ButtonDecoration with the specified background 9-part images
     25   // and icons for the three button states. Also takes the maximum number of
     26   // pixels of inner horizontal padding to be used between the left/right 9-part
     27   // images and the icon.
     28   ButtonDecoration(ui::NinePartImageIds normal_image_ids,
     29                    int normal_icon_id,
     30                    ui::NinePartImageIds hover_image_ids,
     31                    int hover_icon_id,
     32                    ui::NinePartImageIds pressed_image_ids,
     33                    int pressed_icon_id,
     34                    CGFloat max_inner_padding);
     35 
     36   virtual ~ButtonDecoration();
     37 
     38   void SetButtonState(ButtonState state);
     39   ButtonState GetButtonState() const;
     40 
     41   // Whether a click on this decoration should prevent focusing of the omnibox
     42   // or not.
     43   virtual bool PreventFocus(NSPoint location) const;
     44 
     45   // Changes the icon for the specified button state only.
     46   void SetIcon(ButtonState state, int icon_id);
     47 
     48   // Changes the icon for all button states.
     49   void SetIcon(int icon_id);
     50 
     51   // Changes the background image for all button states.
     52   void SetBackgroundImageIds(ui::NinePartImageIds normal_image_ids,
     53                              ui::NinePartImageIds hover_image_ids,
     54                              ui::NinePartImageIds pressed_image_ids);
     55 
     56   ui::NinePartImageIds GetBackgroundImageIds() const;
     57   NSImage* GetIconImage() const;
     58 
     59   // Implement |LocationBarDecoration|.
     60   virtual CGFloat GetWidthForSpace(CGFloat width) OVERRIDE;
     61   virtual void DrawInFrame(NSRect frame, NSView* control_view) OVERRIDE;
     62   virtual bool AcceptsMousePress() OVERRIDE;
     63   virtual bool IsDraggable() OVERRIDE;
     64   virtual bool OnMousePressed(NSRect frame, NSPoint location) OVERRIDE;
     65   virtual ButtonDecoration* AsButtonDecoration() OVERRIDE;
     66 
     67  private:
     68   ui::NinePartImageIds normal_image_ids_;
     69   ui::NinePartImageIds hover_image_ids_;
     70   ui::NinePartImageIds pressed_image_ids_;
     71   int normal_icon_id_;
     72   int hover_icon_id_;
     73   int pressed_icon_id_;
     74   ButtonState state_;
     75   CGFloat max_inner_padding_;
     76 
     77   DISALLOW_COPY_AND_ASSIGN(ButtonDecoration);
     78 };
     79 
     80 #endif  // CHROME_BROWSER_UI_COCOA_LOCATION_BAR_BUTTON_DECORATION_H_
     81