summaryrefslogtreecommitdiffstats
path: root/chrome/browser/ui/views/tabs
diff options
context:
space:
mode:
authorestade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-04-04 23:04:55 +0000
committerestade@chromium.org <estade@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-04-04 23:04:55 +0000
commit01a53cee4479dcb2dbb9175822294459a44d07af (patch)
tree1585bc1fa5fc8dc5559412fcfd60f51a67f139bb /chrome/browser/ui/views/tabs
parent2f60163973f3f684193ae5d2c5495b6184b73a70 (diff)
downloadchromium_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.cc6
-rw-r--r--chrome/browser/ui/views/tabs/tab.h1
-rw-r--r--chrome/browser/ui/views/tabs/tab_unittest.cc20
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);