| Index: chrome/browser/ui/views/location_bar/icon_label_bubble_view.cc
|
| diff --git a/chrome/browser/ui/views/location_bar/icon_label_bubble_view.cc b/chrome/browser/ui/views/location_bar/icon_label_bubble_view.cc
|
| index eb02b9e0e9ee65488910bd49cad2f804b92e545e..38e36e746a84a6d9b330689fb76cc94cde13d89a 100644
|
| --- a/chrome/browser/ui/views/location_bar/icon_label_bubble_view.cc
|
| +++ b/chrome/browser/ui/views/location_bar/icon_label_bubble_view.cc
|
| @@ -4,6 +4,8 @@
|
|
|
| #include "chrome/browser/ui/views/location_bar/icon_label_bubble_view.h"
|
|
|
| +#include "chrome/browser/ui/layout_constants.h"
|
| +#include "chrome/browser/ui/views/location_bar/background_with_1_px_border.h"
|
| #include "chrome/browser/ui/views/location_bar/location_bar_view.h"
|
| #include "ui/accessibility/ax_node_data.h"
|
| #include "ui/gfx/canvas.h"
|
| @@ -29,6 +31,8 @@ IconLabelBubbleView::IconLabelBubbleView(const gfx::FontList& font_list,
|
| // Disable separate hit testing for |image_|. This prevents views treating
|
| // |image_| as a separate mouse hover region from |this|.
|
| image_->set_interactive(false);
|
| + image_->SetBorder(views::CreateEmptyBorder(
|
| + gfx::Insets(LocationBarView::kIconInteriorPadding)));
|
| AddChildView(image_);
|
|
|
| label_->SetHorizontalAlignment(gfx::ALIGN_LEFT);
|
| @@ -93,39 +97,26 @@ bool IconLabelBubbleView::OnKeyReleased(const ui::KeyEvent& event) {
|
| }
|
|
|
| void IconLabelBubbleView::Layout() {
|
| - // Compute the image bounds. Leading and trailing padding are the same.
|
| - int image_x = LocationBarView::kHorizontalPadding;
|
| - int bubble_trailing_padding = image_x;
|
| -
|
| - // If ShouldShowLabel() is true, then either we show a label in the
|
| - // steady state, or we're not yet in the last portion of the animation. In
|
| - // these cases, we leave the leading and trailing padding alone. If this is
|
| - // false, however, then we're only showing the image, and either the view
|
| - // width is the image width, or it's animating downwards and getting close to
|
| - // it. In these cases, we want to shrink the trailing padding first, so the
|
| - // image slides all the way to the trailing edge before slowing or stopping;
|
| - // then we want to shrink the leading padding down to zero.
|
| - const int image_preferred_width = image_->GetPreferredSize().width();
|
| - if (!ShouldShowLabel()) {
|
| - image_x = std::min(image_x, width() - image_preferred_width);
|
| - bubble_trailing_padding = std::min(
|
| - bubble_trailing_padding, width() - image_preferred_width - image_x);
|
| + // We may not have horizontal room for both the image and the trailing
|
| + // padding. When the view is expanding (or showing-label steady state), the
|
| + // image. When the view is contracting (or hidden-label steady state), whittle
|
| + // away at the trailing padding instead.
|
| + int bubble_trailing_padding = GetPostSeparatorPadding();
|
| + int image_width = image_->GetPreferredSize().width();
|
| + const int space_shortage = image_width + bubble_trailing_padding - width();
|
| + if (space_shortage > 0) {
|
| + if (ShouldShowLabel())
|
| + image_width -= space_shortage;
|
| + else
|
| + bubble_trailing_padding -= space_shortage;
|
| }
|
| -
|
| - // Now that we've computed the padding values, give the image all the
|
| - // remaining width. This will be less than the image's preferred width during
|
| - // the first portion of the animation; during the very beginning there may not
|
| - // be enough room to show the image at all.
|
| - const int image_width =
|
| - std::min(image_preferred_width,
|
| - std::max(0, width() - image_x - bubble_trailing_padding));
|
| - image_->SetBounds(image_x, 0, image_width, height());
|
| + image_->SetBounds(0, 0, image_width, height());
|
|
|
| // Compute the label bounds. The label gets whatever size is left over after
|
| // accounting for the preferred image width and padding amounts. Note that if
|
| // the label has zero size it doesn't actually matter what we compute its X
|
| // value to be, since it won't be visible.
|
| - const int label_x = image_x + image_width + GetInternalSpacing();
|
| + const int label_x = image_->bounds().right() + GetInternalSpacing();
|
| const int label_width =
|
| std::max(0, width() - label_x - bubble_trailing_padding);
|
| label_->SetBounds(label_x, 0, label_width, height());
|
| @@ -192,9 +183,8 @@ gfx::Size IconLabelBubbleView::GetSizeForLabelWidth(int label_width) const {
|
| // enough to show the icon. We don't want to shrink all the way back to
|
| // zero, since this would mean the view would completely disappear and then
|
| // pop back to an icon after the animation finishes.
|
| - const int max_width = LocationBarView::kHorizontalPadding +
|
| - image_->GetPreferredSize().width() +
|
| - GetInternalSpacing() + label_width + post_label_width;
|
| + const int max_width =
|
| + size.width() + GetInternalSpacing() + label_width + post_label_width;
|
| const int current_width = WidthMultiplier() * max_width;
|
| size.set_width(shrinking ? std::max(current_width, size.width())
|
| : current_width);
|
| @@ -205,12 +195,14 @@ gfx::Size IconLabelBubbleView::GetSizeForLabelWidth(int label_width) const {
|
| int IconLabelBubbleView::GetInternalSpacing() const {
|
| return image_->GetPreferredSize().IsEmpty()
|
| ? 0
|
| - : LocationBarView::kHorizontalPadding;
|
| + : GetLayoutConstant(LOCATION_BAR_ELEMENT_PADDING);
|
| }
|
|
|
| int IconLabelBubbleView::GetPostSeparatorPadding() const {
|
| - // The location bar will add LocationBarView::kHorizontalPadding after us.
|
| - return kSpaceBesideSeparator - LocationBarView::kHorizontalPadding;
|
| + // The location bar will add LOCATION_BAR_ELEMENT_PADDING after us.
|
| + return kSpaceBesideSeparator -
|
| + GetLayoutConstant(LOCATION_BAR_ELEMENT_PADDING) -
|
| + next_element_interior_padding_;
|
| }
|
|
|
| float IconLabelBubbleView::GetScaleFactor() const {
|
| @@ -234,10 +226,9 @@ void IconLabelBubbleView::OnPaint(gfx::Canvas* canvas) {
|
| const SkColor separator_color = SkColorSetA(
|
| plain_text_color, color_utils::IsDark(plain_text_color) ? 0x59 : 0xCC);
|
|
|
| - gfx::Rect bounds(GetLocalBounds());
|
| + gfx::Rect bounds(label_->bounds());
|
| const int kSeparatorHeight = 16;
|
| - bounds.Inset(GetPostSeparatorPadding(),
|
| - (bounds.height() - kSeparatorHeight) / 2);
|
| + bounds.Inset(0, (bounds.height() - kSeparatorHeight) / 2);
|
|
|
| // Draw the 1 px separator.
|
| gfx::ScopedCanvas scoped_canvas(canvas);
|
|
|