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_VIEWS_LOCATION_BAR_ICON_LABEL_BUBBLE_VIEW_H_ 6 #define CHROME_BROWSER_UI_VIEWS_LOCATION_BAR_ICON_LABEL_BUBBLE_VIEW_H_ 7 8 #include <string> 9 10 #include "base/strings/string16.h" 11 #include "ui/gfx/size.h" 12 #include "ui/views/controls/label.h" 13 #include "ui/views/view.h" 14 15 namespace gfx { 16 class Canvas; 17 class FontList; 18 class ImageSkia; 19 } 20 21 namespace views { 22 class ImageView; 23 class Label; 24 class Painter; 25 } 26 27 // View used to draw a bubble to the left of the address, containing an icon and 28 // a label. We use this as a base for the classes that handle the EV bubble and 29 // tab-to-search UI. 30 class IconLabelBubbleView : public views::View { 31 public: 32 // |hover_background_images| is an optional set of images to be used in place 33 // of |background_images| during mouse hover. 34 IconLabelBubbleView(const int background_images[], 35 const int hover_background_images[], 36 int contained_image, 37 const gfx::FontList& font_list, 38 SkColor text_color, 39 SkColor parent_background_color, 40 bool elide_in_middle); 41 virtual ~IconLabelBubbleView(); 42 43 void SetLabel(const base::string16& label); 44 void SetImage(const gfx::ImageSkia& image); set_is_extension_icon(bool is_extension_icon)45 void set_is_extension_icon(bool is_extension_icon) { 46 is_extension_icon_ = is_extension_icon; 47 } 48 49 protected: 50 // views::View: 51 virtual gfx::Size GetPreferredSize() const OVERRIDE; 52 virtual void Layout() OVERRIDE; 53 virtual void OnMouseEntered(const ui::MouseEvent& event) OVERRIDE; 54 virtual void OnMouseExited(const ui::MouseEvent& event) OVERRIDE; 55 font_list()56 const gfx::FontList& font_list() const { return label_->font_list(); } 57 58 gfx::Size GetSizeForLabelWidth(int width) const; 59 60 private: 61 // Amount of padding at the edges of the bubble. If |by_icon| is true, this 62 // is the padding next to the icon; otherwise it's the padding next to the 63 // label. (We increase padding next to the label by the amount of padding 64 // "built in" to the icon in order to make the bubble appear to have 65 // symmetrical padding.) 66 static int GetBubbleOuterPadding(bool by_icon); 67 68 // views::View: 69 virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE; 70 71 int GetPreLabelWidth() const; 72 73 // For painting the background. 74 scoped_ptr<views::Painter> background_painter_; 75 scoped_ptr<views::Painter> hover_background_painter_; 76 77 // The contents of the bubble. 78 views::ImageView* image_; 79 views::Label* label_; 80 81 bool is_extension_icon_; 82 bool in_hover_; 83 84 DISALLOW_COPY_AND_ASSIGN(IconLabelBubbleView); 85 }; 86 87 #endif // CHROME_BROWSER_UI_VIEWS_LOCATION_BAR_ICON_LABEL_BUBBLE_VIEW_H_ 88