Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / ui / cocoa / location_bar / button_decoration.h
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   ~ButtonDecoration() override;
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   CGFloat GetWidthForSpace(CGFloat width) override;
61   void DrawInFrame(NSRect frame, NSView* control_view) override;
62   bool AcceptsMousePress() override;
63   bool IsDraggable() override;
64   bool OnMousePressed(NSRect frame, NSPoint location) override;
65   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_