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#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#pragma once
8
9#include <string>
10
11#include "ui/gfx/size.h"
12#include "views/painter.h"
13#include "views/view.h"
14
15namespace gfx {
16class Canvas;
17class Font;
18}
19namespace views {
20class ImageView;
21class Label;
22}
23
24class SkBitmap;
25
26// View used to draw a bubble to the left of the address, containing an icon and
27// a label.  We use this as a base for the classes that handle the EV bubble and
28// tab-to-search UI.
29class IconLabelBubbleView : public views::View {
30 public:
31  IconLabelBubbleView(const int background_images[],
32                      int contained_image,
33                      const SkColor& color);
34  virtual ~IconLabelBubbleView();
35
36  void SetFont(const gfx::Font& font);
37  void SetLabel(const std::wstring& label);
38  void SetImage(const SkBitmap& bitmap);
39  void set_is_extension_icon(bool is_extension_icon) {
40    is_extension_icon_ = is_extension_icon;
41  }
42
43  virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE;
44  virtual gfx::Size GetPreferredSize() OVERRIDE;
45  virtual void Layout() OVERRIDE;
46
47 protected:
48  void SetElideInMiddle(bool elide_in_middle);
49  gfx::Size GetNonLabelSize() const;
50
51 private:
52  int GetPreLabelWidth() const;
53  int GetNonLabelWidth() const;
54
55  // For painting the background.
56  views::HorizontalPainter background_painter_;
57
58  // The contents of the bubble.
59  views::ImageView* image_;
60  views::Label* label_;
61
62  bool is_extension_icon_;
63
64  DISALLOW_IMPLICIT_CONSTRUCTORS(IconLabelBubbleView);
65};
66
67#endif  // CHROME_BROWSER_UI_VIEWS_LOCATION_BAR_ICON_LABEL_BUBBLE_VIEW_H_
68