diff options
author | estade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-04-04 23:04:55 +0000 |
---|---|---|
committer | estade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2013-04-04 23:04:55 +0000 |
commit | 01a53cee4479dcb2dbb9175822294459a44d07af (patch) | |
tree | 1585bc1fa5fc8dc5559412fcfd60f51a67f139bb /chrome/browser/ui/views/tabs | |
parent | 2f60163973f3f684193ae5d2c5495b6184b73a70 (diff) | |
download | chromium_src-01a53cee4479dcb2dbb9175822294459a44d07af.zip chromium_src-01a53cee4479dcb2dbb9175822294459a44d07af.tar.gz chromium_src-01a53cee4479dcb2dbb9175822294459a44d07af.tar.bz2 |
views: fix poor layout of tab close buttons
BUG=226253
Review URL: https://chromiumcodereview.appspot.com/13489005
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@192410 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/ui/views/tabs')
-rw-r--r-- | chrome/browser/ui/views/tabs/tab.cc | 6 | ||||
-rw-r--r-- | chrome/browser/ui/views/tabs/tab.h | 1 | ||||
-rw-r--r-- | chrome/browser/ui/views/tabs/tab_unittest.cc | 20 |
3 files changed, 24 insertions, 3 deletions
diff --git a/chrome/browser/ui/views/tabs/tab.cc b/chrome/browser/ui/views/tabs/tab.cc index 1bd3723..eb984a9 100644 --- a/chrome/browser/ui/views/tabs/tab.cc +++ b/chrome/browser/ui/views/tabs/tab.cc @@ -748,6 +748,7 @@ void Tab::Layout() { // The height of the content of the Tab is the largest of the favicon, // the title text and the close button graphic. int content_height = std::max(tab_icon_size(), font_height_); + close_button_->set_border(NULL); gfx::Size close_button_size(close_button_->GetPreferredSize()); content_height = std::max(content_height, close_button_size.height()); @@ -801,9 +802,8 @@ void Tab::Layout() { left_border); close_button_->set_border(views::Border::CreateEmptyBorder(top_border, left_border, bottom_border, right_border)); - close_button_->SetBounds(lb.width(), 0, - close_button_size.width() + left_border + right_border, - close_button_size.height() + top_border + bottom_border); + close_button_->SetPosition(gfx::Point(lb.width(), 0)); + close_button_->SizeToPreferredSize(); close_button_->SetVisible(true); } else { close_button_->SetBounds(0, 0, 0, 0); diff --git a/chrome/browser/ui/views/tabs/tab.h b/chrome/browser/ui/views/tabs/tab.h index 02bf8eb..3094154 100644 --- a/chrome/browser/ui/views/tabs/tab.h +++ b/chrome/browser/ui/views/tabs/tab.h @@ -125,6 +125,7 @@ class Tab : public TabAudioIndicator::Delegate, private: friend class TabTest; + FRIEND_TEST_ALL_PREFIXES(TabTest, CloseButtonLayout); // The animation object used to swap the favicon with the sad tab icon. class FaviconCrashAnimation; class TabCloseButton; diff --git a/chrome/browser/ui/views/tabs/tab_unittest.cc b/chrome/browser/ui/views/tabs/tab_unittest.cc index 78faf75..896053c 100644 --- a/chrome/browser/ui/views/tabs/tab_unittest.cc +++ b/chrome/browser/ui/views/tabs/tab_unittest.cc @@ -8,6 +8,7 @@ #include "base/utf_string_conversions.h" #include "testing/gtest/include/gtest/gtest.h" #include "ui/base/models/list_selection_model.h" +#include "ui/views/controls/button/image_button.h" #include "ui/views/test/views_test_base.h" #include "ui/views/widget/widget.h" @@ -106,6 +107,25 @@ TEST_F(TabTest, HitTestTopPixel) { EXPECT_FALSE(tab.HitTestPoint(gfx::Point(tab.width() - 1, 0))); } +// Regression test for http://crbug.com/226253. Calling Layout() more than once +// shouldn't change the insets of the close button. +TEST_F(TabTest, CloseButtonLayout) { + FakeTabController tab_controller; + Tab tab(&tab_controller); + tab.SetBounds(0, 0, 100, 50); + tab.Layout(); + gfx::Insets close_button_insets = tab.close_button_->GetInsets(); + tab.Layout(); + gfx::Insets close_button_insets_2 = tab.close_button_->GetInsets(); + EXPECT_EQ(close_button_insets.top(), close_button_insets_2.top()); + EXPECT_EQ(close_button_insets.left(), close_button_insets_2.left()); + EXPECT_EQ(close_button_insets.bottom(), close_button_insets_2.bottom()); + EXPECT_EQ(close_button_insets.right(), close_button_insets_2.right()); + + // Also make sure the close button is sized as large as the tab. + EXPECT_EQ(50, tab.close_button_->bounds().height()); +} + TEST_F(TabTest, ActivityIndicators) { FakeTabController controller; Tab tab(&controller); |