172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Use of this source code is governed by a BSD-style license that can be
3c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// found in the LICENSE file.
4c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/ui/views/location_bar/icon_label_bubble_view.h"
6c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "chrome/browser/ui/views/location_bar/location_bar_view.h"
8ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "grit/theme_resources.h"
972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/base/resource/resource_bundle.h"
1072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen#include "ui/gfx/canvas.h"
11c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "views/controls/image_view.h"
12c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch#include "views/controls/label.h"
13c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
143345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick// Amount of padding at the edges of the bubble.
1572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsenstatic const int kBubbleOuterPadding = LocationBarView::kEdgeItemPadding -
1672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen    LocationBarView::kBubbleHorizontalPadding;
17c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
18c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch// Amount of padding after the label.
193345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrickstatic const int kLabelPadding = 5;
20c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
21c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochIconLabelBubbleView::IconLabelBubbleView(const int background_images[],
22c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                         int contained_image,
23c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch                                         const SkColor& color)
243345a6884c488ff3a535c2c9acdd33d74b37e311Iain Merrick    : background_painter_(background_images),
25ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      is_extension_icon_(false) {
26c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  image_ = new views::ImageView();
27c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  AddChildView(image_);
28c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  image_->SetImage(
29c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch      ResourceBundle::GetSharedInstance().GetBitmapNamed(contained_image));
30c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  label_ = new views::Label();
31c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  AddChildView(label_);
32c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  label_->SetColor(color);
33c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
34c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
35c407dc5cd9bdc5668497f21b26b09d988ab439deBen MurdochIconLabelBubbleView::~IconLabelBubbleView() {
36c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
37c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
38c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid IconLabelBubbleView::SetFont(const gfx::Font& font) {
39c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  label_->SetFont(font);
40c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
41c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
42c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid IconLabelBubbleView::SetLabel(const std::wstring& label) {
43c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  label_->SetText(label);
44c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
45c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
46c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid IconLabelBubbleView::SetImage(const SkBitmap& bitmap) {
47c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  image_->SetImage(bitmap);
48c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
49c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
50dc0f95d653279beabeb9817299e2902918ba123eKristian Monsenvoid IconLabelBubbleView::OnPaint(gfx::Canvas* canvas) {
51c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  background_painter_.Paint(width(), height(), canvas);
52c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
53c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
54c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochgfx::Size IconLabelBubbleView::GetPreferredSize() {
55c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  gfx::Size size(GetNonLabelSize());
56c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  size.Enlarge(label_->GetPreferredSize().width(), 0);
57c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return size;
58c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
59c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
60c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid IconLabelBubbleView::Layout() {
61ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  image_->SetBounds(kBubbleOuterPadding +
62ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      (is_extension_icon_ ? LocationBarView::kIconInternalPadding : 0), 0,
63ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      image_->GetPreferredSize().width(), height());
64c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  const int label_height = label_->GetPreferredSize().height();
65ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  label_->SetBounds(GetPreLabelWidth(), (height() - label_height) / 2,
66ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                    width() - GetNonLabelWidth(), label_height);
67c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
68c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
69c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdochvoid IconLabelBubbleView::SetElideInMiddle(bool elide_in_middle) {
70c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  label_->SetElideInMiddle(elide_in_middle);
71c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
72c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
73ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsengfx::Size IconLabelBubbleView::GetNonLabelSize() const {
74c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch  return gfx::Size(GetNonLabelWidth(), background_painter_.height());
75c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
76c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch
77ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenint IconLabelBubbleView::GetPreLabelWidth() const {
78ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  return kBubbleOuterPadding + ResourceBundle::GetSharedInstance().
79ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      GetBitmapNamed(IDR_OMNIBOX_SEARCH)->width() +
80ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      LocationBarView::kItemPadding;
81ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
82ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
83ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsenint IconLabelBubbleView::GetNonLabelWidth() const {
84ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  return GetPreLabelWidth() + kBubbleOuterPadding;
85c407dc5cd9bdc5668497f21b26b09d988ab439deBen Murdoch}
86