15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 55821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/layout/grid_layout.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/compiler_specific.h" 85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h" 95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "ui/views/view.h" 105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace views { 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)void ExpectViewBoundsEquals(int x, int y, int w, int h, 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const View* view) { 155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(x, view->x()); 165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(y, view->y()); 175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(w, view->width()); 185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(h, view->height()); 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class SettableSizeView : public View { 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) explicit SettableSizeView(const gfx::Size& pref) { 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref_ = pref; 255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 27cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual gfx::Size GetPreferredSize() const OVERRIDE { 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return pref_; 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Size pref_; 335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// A view with fixed circumference that trades height for width. 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class FlexibleView : public View { 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) explicit FlexibleView(int circumference) { 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) circumference_ = circumference; 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 42cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual gfx::Size GetPreferredSize() const OVERRIDE { 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return gfx::Size(0, circumference_ / 2); 445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 46cedac228d2dd51db4b79ea1e72c7f249408ee061Torne (Richard Coles) virtual int GetHeightForWidth(int width) const OVERRIDE { 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return std::max(0, circumference_ / 2 - width); 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) private: 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int circumference_; 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class GridLayoutTest : public testing::Test { 555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GridLayoutTest() : layout(&host) {} 575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void RemoveAll() { 595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int i = host.child_count() - 1; i >= 0; i--) 605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host.RemoveChildView(host.child_at(i)); 615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void GetPreferredSize() { 645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref = layout.GetPreferredSize(&host); 655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Size pref; 685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect bounds; 695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) View host; 705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GridLayout layout; 715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)class GridLayoutAlignmentTest : public testing::Test { 745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) public: 755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GridLayoutAlignmentTest() 765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) : v1(gfx::Size(10, 20)), 775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout(&host) {} 785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void RemoveAll() { 805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int i = host.child_count() - 1; i >= 0; i--) 815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host.RemoveChildView(host.child_at(i)); 825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) void TestAlignment(GridLayout::Alignment alignment, gfx::Rect* bounds) { 855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ColumnSet* c1 = layout.AddColumnSet(0); 865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) c1->AddColumn(alignment, alignment, 1, GridLayout::USE_PREF, 0, 0); 875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.StartRow(1, 0); 885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.AddView(&v1); 895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Size pref = layout.GetPreferredSize(&host); 905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(gfx::Size(10, 20), pref); 915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host.SetBounds(0, 0, 100, 100); 925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.Layout(&host); 935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) *bounds = v1.bounds(); 945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RemoveAll(); 955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) View host; 985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SettableSizeView v1; 995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GridLayout layout; 1005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}; 1015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GridLayoutAlignmentTest, Fill) { 1035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect bounds; 1045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestAlignment(GridLayout::FILL, &bounds); 1055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(gfx::Rect(0, 0, 100, 100), bounds); 1065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GridLayoutAlignmentTest, Leading) { 1095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect bounds; 1105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestAlignment(GridLayout::LEADING, &bounds); 1115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(gfx::Rect(0, 0, 10, 20), bounds); 1125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GridLayoutAlignmentTest, Center) { 1155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect bounds; 1165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestAlignment(GridLayout::CENTER, &bounds); 1175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(gfx::Rect(45, 40, 10, 20), bounds); 1185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GridLayoutAlignmentTest, Trailing) { 1215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Rect bounds; 1225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) TestAlignment(GridLayout::TRAILING, &bounds); 1235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(gfx::Rect(90, 80, 10, 20), bounds); 1245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GridLayoutTest, TwoColumns) { 1275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SettableSizeView v1(gfx::Size(10, 20)); 1285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SettableSizeView v2(gfx::Size(20, 20)); 1295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ColumnSet* c1 = layout.AddColumnSet(0); 1305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) c1->AddColumn(GridLayout::LEADING, GridLayout::LEADING, 1315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, GridLayout::USE_PREF, 0, 0); 1325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) c1->AddColumn(GridLayout::LEADING, GridLayout::LEADING, 1335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, GridLayout::USE_PREF, 0, 0); 1345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.StartRow(0, 0); 1355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.AddView(&v1); 1365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.AddView(&v2); 1375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetPreferredSize(); 1395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(gfx::Size(30, 20), pref); 1405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host.SetBounds(0, 0, pref.width(), pref.height()); 1425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.Layout(&host); 1435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectViewBoundsEquals(0, 0, 10, 20, &v1); 1445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectViewBoundsEquals(10, 0, 20, 20, &v2); 1455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RemoveAll(); 1475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GridLayoutTest, ColSpan1) { 1505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SettableSizeView v1(gfx::Size(100, 20)); 1515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SettableSizeView v2(gfx::Size(10, 40)); 1525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ColumnSet* c1 = layout.AddColumnSet(0); 1535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) c1->AddColumn(GridLayout::LEADING, GridLayout::LEADING, 1545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, GridLayout::USE_PREF, 0, 0); 1555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) c1->AddColumn(GridLayout::LEADING, GridLayout::LEADING, 1565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1, GridLayout::USE_PREF, 0, 0); 1575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.StartRow(0, 0); 1585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.AddView(&v1, 2, 1); 1595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.StartRow(0, 0); 1605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.AddView(&v2); 1615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetPreferredSize(); 1635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(gfx::Size(100, 60), pref); 1645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host.SetBounds(0, 0, pref.width(), pref.height()); 1665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.Layout(&host); 1675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectViewBoundsEquals(0, 0, 100, 20, &v1); 1685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectViewBoundsEquals(0, 20, 10, 40, &v2); 1695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RemoveAll(); 1715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GridLayoutTest, ColSpan2) { 1745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SettableSizeView v1(gfx::Size(100, 20)); 1755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SettableSizeView v2(gfx::Size(10, 20)); 1765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ColumnSet* c1 = layout.AddColumnSet(0); 1775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) c1->AddColumn(GridLayout::LEADING, GridLayout::LEADING, 1785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1, GridLayout::USE_PREF, 0, 0); 1795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) c1->AddColumn(GridLayout::LEADING, GridLayout::LEADING, 1805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, GridLayout::USE_PREF, 0, 0); 1815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.StartRow(0, 0); 1825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.AddView(&v1, 2, 1); 1835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.StartRow(0, 0); 1845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.SkipColumns(1); 1855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.AddView(&v2); 1865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetPreferredSize(); 1885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(gfx::Size(100, 40), pref); 1895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host.SetBounds(0, 0, pref.width(), pref.height()); 1915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.Layout(&host); 1925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectViewBoundsEquals(0, 0, 100, 20, &v1); 1935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectViewBoundsEquals(90, 20, 10, 20, &v2); 1945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RemoveAll(); 1965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 1975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GridLayoutTest, ColSpan3) { 1995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SettableSizeView v1(gfx::Size(100, 20)); 2005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SettableSizeView v2(gfx::Size(10, 20)); 2015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SettableSizeView v3(gfx::Size(10, 20)); 2025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ColumnSet* c1 = layout.AddColumnSet(0); 2035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) c1->AddColumn(GridLayout::LEADING, GridLayout::LEADING, 2045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, GridLayout::USE_PREF, 0, 0); 2055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) c1->AddColumn(GridLayout::LEADING, GridLayout::LEADING, 2065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, GridLayout::USE_PREF, 0, 0); 2075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.StartRow(0, 0); 2085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.AddView(&v1, 2, 1); 2095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.StartRow(0, 0); 2105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.AddView(&v2); 2115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.AddView(&v3); 2125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetPreferredSize(); 2145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(gfx::Size(100, 40), pref); 2155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host.SetBounds(0, 0, pref.width(), pref.height()); 2175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.Layout(&host); 2185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectViewBoundsEquals(0, 0, 100, 20, &v1); 2195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectViewBoundsEquals(0, 20, 10, 20, &v2); 2205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectViewBoundsEquals(50, 20, 10, 20, &v3); 2215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RemoveAll(); 2235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GridLayoutTest, ColSpan4) { 2275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ColumnSet* set = layout.AddColumnSet(0); 2285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set->AddColumn(GridLayout::LEADING, GridLayout::LEADING, 0, 2305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GridLayout::USE_PREF, 0, 0); 2315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set->AddColumn(GridLayout::LEADING, GridLayout::LEADING, 0, 2325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GridLayout::USE_PREF, 0, 0); 2335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SettableSizeView v1(gfx::Size(10, 10)); 2355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SettableSizeView v2(gfx::Size(10, 10)); 2365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SettableSizeView v3(gfx::Size(25, 20)); 2375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.StartRow(0, 0); 2385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.AddView(&v1); 2395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.AddView(&v2); 2405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.StartRow(0, 0); 2415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.AddView(&v3, 2, 1); 2425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetPreferredSize(); 2445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(gfx::Size(25, 30), pref); 2455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host.SetBounds(0, 0, pref.width(), pref.height()); 2475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.Layout(&host); 2485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectViewBoundsEquals(0, 0, 10, 10, &v1); 2495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectViewBoundsEquals(12, 0, 10, 10, &v2); 2505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectViewBoundsEquals(0, 10, 25, 20, &v3); 2515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RemoveAll(); 2535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 2545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 255eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Verifies the sizing of a view that doesn't start in the first column 256eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// and has a column span > 1 (crbug.com/254092). 257eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen MurdochTEST_F(GridLayoutTest, ColSpanStartSecondColumn) { 258eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ColumnSet* set = layout.AddColumnSet(0); 259eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 260eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch set->AddColumn(GridLayout::FILL, GridLayout::FILL, 0, 261eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch GridLayout::USE_PREF, 0, 0); 262eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch set->AddColumn(GridLayout::FILL, GridLayout::FILL, 0, 263eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch GridLayout::USE_PREF, 0, 0); 264eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch set->AddColumn(GridLayout::FILL, GridLayout::FILL, 0, 265eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch GridLayout::FIXED, 10, 0); 266eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 267eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SettableSizeView v1(gfx::Size(10, 10)); 268eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch SettableSizeView v2(gfx::Size(20, 10)); 269eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 270eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch layout.StartRow(0, 0); 271eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch layout.AddView(&v1); 272eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch layout.AddView(&v2, 2, 1); 273eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 274eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch GetPreferredSize(); 275eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch EXPECT_EQ(gfx::Size(30, 10), pref); 276eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 277eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch host.SetBounds(0, 0, pref.width(), pref.height()); 278eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch layout.Layout(&host); 279eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ExpectViewBoundsEquals(0, 0, 10, 10, &v1); 280eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ExpectViewBoundsEquals(10, 0, 20, 10, &v2); 281eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 282eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch RemoveAll(); 283eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 284eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 2855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GridLayoutTest, SameSizeColumns) { 2865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SettableSizeView v1(gfx::Size(50, 20)); 2875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SettableSizeView v2(gfx::Size(10, 10)); 2885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ColumnSet* c1 = layout.AddColumnSet(0); 2895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) c1->AddColumn(GridLayout::LEADING, GridLayout::LEADING, 2905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, GridLayout::USE_PREF, 0, 0); 2915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) c1->AddColumn(GridLayout::LEADING, GridLayout::LEADING, 2925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, GridLayout::USE_PREF, 0, 0); 2935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) c1->LinkColumnSizes(0, 1, -1); 2945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.StartRow(0, 0); 2955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.AddView(&v1); 2965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.AddView(&v2); 2975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) gfx::Size pref = layout.GetPreferredSize(&host); 2995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(gfx::Size(100, 20), pref); 3005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host.SetBounds(0, 0, pref.width(), pref.height()); 3025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.Layout(&host); 3035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectViewBoundsEquals(0, 0, 50, 20, &v1); 3045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectViewBoundsEquals(50, 0, 10, 10, &v2); 3055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RemoveAll(); 3075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GridLayoutTest, HorizontalResizeTest1) { 3105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SettableSizeView v1(gfx::Size(50, 20)); 3115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SettableSizeView v2(gfx::Size(10, 10)); 3125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ColumnSet* c1 = layout.AddColumnSet(0); 3135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) c1->AddColumn(GridLayout::FILL, GridLayout::LEADING, 3145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1, GridLayout::USE_PREF, 0, 0); 3155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) c1->AddColumn(GridLayout::LEADING, GridLayout::LEADING, 3165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, GridLayout::USE_PREF, 0, 0); 3175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.StartRow(0, 0); 3185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.AddView(&v1); 3195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.AddView(&v2); 3205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host.SetBounds(0, 0, 110, 20); 3225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.Layout(&host); 3235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectViewBoundsEquals(0, 0, 100, 20, &v1); 3245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectViewBoundsEquals(100, 0, 10, 10, &v2); 3255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RemoveAll(); 3275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GridLayoutTest, HorizontalResizeTest2) { 3305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SettableSizeView v1(gfx::Size(50, 20)); 3315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SettableSizeView v2(gfx::Size(10, 10)); 3325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ColumnSet* c1 = layout.AddColumnSet(0); 3335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) c1->AddColumn(GridLayout::FILL, GridLayout::LEADING, 3345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1, GridLayout::USE_PREF, 0, 0); 3355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) c1->AddColumn(GridLayout::TRAILING, GridLayout::LEADING, 3365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1, GridLayout::USE_PREF, 0, 0); 3375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.StartRow(0, 0); 3385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.AddView(&v1); 3395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.AddView(&v2); 3405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host.SetBounds(0, 0, 120, 20); 3425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.Layout(&host); 3435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectViewBoundsEquals(0, 0, 80, 20, &v1); 3445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectViewBoundsEquals(110, 0, 10, 10, &v2); 3455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RemoveAll(); 3475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 349a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// Tests that space leftover due to rounding is distributed to the last 350a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)// resizable column. 351a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)TEST_F(GridLayoutTest, HorizontalResizeTest3) { 352a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SettableSizeView v1(gfx::Size(10, 10)); 353a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SettableSizeView v2(gfx::Size(10, 10)); 354a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) SettableSizeView v3(gfx::Size(10, 10)); 355a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ColumnSet* c1 = layout.AddColumnSet(0); 356a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) c1->AddColumn(GridLayout::FILL, GridLayout::LEADING, 357a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 1, GridLayout::USE_PREF, 0, 0); 358a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) c1->AddColumn(GridLayout::FILL, GridLayout::LEADING, 359a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 1, GridLayout::USE_PREF, 0, 0); 360a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) c1->AddColumn(GridLayout::TRAILING, GridLayout::LEADING, 361a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 0, GridLayout::USE_PREF, 0, 0); 362a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) layout.StartRow(0, 0); 363a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) layout.AddView(&v1); 364a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) layout.AddView(&v2); 365a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) layout.AddView(&v3); 366a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 367a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) host.SetBounds(0, 0, 31, 10); 368a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) layout.Layout(&host); 369a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ExpectViewBoundsEquals(0, 0, 10, 10, &v1); 370a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ExpectViewBoundsEquals(10, 0, 11, 10, &v2); 371a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) ExpectViewBoundsEquals(21, 0, 10, 10, &v3); 372a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 373a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) RemoveAll(); 374a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} 375a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 3765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GridLayoutTest, TestVerticalResize1) { 3775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SettableSizeView v1(gfx::Size(50, 20)); 3785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SettableSizeView v2(gfx::Size(10, 10)); 3795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ColumnSet* c1 = layout.AddColumnSet(0); 3805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) c1->AddColumn(GridLayout::FILL, GridLayout::FILL, 3815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1, GridLayout::USE_PREF, 0, 0); 3825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.StartRow(1, 0); 3835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.AddView(&v1); 3845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.StartRow(0, 0); 3855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.AddView(&v2); 3865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetPreferredSize(); 3885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(gfx::Size(50, 30), pref); 3895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host.SetBounds(0, 0, 50, 100); 3915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.Layout(&host); 3925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectViewBoundsEquals(0, 0, 50, 90, &v1); 3935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectViewBoundsEquals(0, 90, 50, 10, &v2); 3945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RemoveAll(); 3965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 3975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 3985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GridLayoutTest, Insets) { 3995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SettableSizeView v1(gfx::Size(10, 20)); 4005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ColumnSet* c1 = layout.AddColumnSet(0); 4015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.SetInsets(1, 2, 3, 4); 4025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) c1->AddColumn(GridLayout::LEADING, GridLayout::LEADING, 4035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, GridLayout::USE_PREF, 0, 0); 4045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.StartRow(0, 0); 4055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.AddView(&v1); 4065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetPreferredSize(); 4085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(gfx::Size(16, 24), pref); 4095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host.SetBounds(0, 0, pref.width(), pref.height()); 4115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.Layout(&host); 4125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectViewBoundsEquals(2, 1, 10, 20, &v1); 4135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RemoveAll(); 4155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GridLayoutTest, FixedSize) { 4185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.SetInsets(2, 2, 2, 2); 4195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ColumnSet* set = layout.AddColumnSet(0); 4215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int column_count = 4; 4235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int title_width = 100; 4245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int row_count = 2; 4255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int pref_width = 10; 4265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) int pref_height = 20; 4275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int i = 0; i < column_count; ++i) { 4295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set->AddColumn(GridLayout::CENTER, 4305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GridLayout::CENTER, 4315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, 4325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GridLayout::FIXED, 4335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) title_width, 4345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) title_width); 4355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int row = 0; row < row_count; ++row) { 4385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.StartRow(0, 0); 4395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int col = 0; col < column_count; ++col) { 4405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.AddView(new SettableSizeView(gfx::Size(pref_width, pref_height))); 4415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.Layout(&host); 4455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int i = 0; i < column_count; ++i) { 4475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) for (int row = 0; row < row_count; ++row) { 4485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) View* view = host.child_at(row * column_count + i); 4495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectViewBoundsEquals( 4505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2 + title_width * i + (title_width - pref_width) / 2, 4515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2 + pref_height * row, 4525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref_width, 4535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) pref_height, view); 4545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) } 4565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetPreferredSize(); 4585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(gfx::Size(column_count * title_width + 4, 4595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) row_count * pref_height + 4), pref); 4605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GridLayoutTest, RowSpanWithPaddingRow) { 4635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ColumnSet* set = layout.AddColumnSet(0); 4645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set->AddColumn(GridLayout::CENTER, 4665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GridLayout::CENTER, 4675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, 4685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GridLayout::FIXED, 4695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10, 4705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 10); 4715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.StartRow(0, 0); 4735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.AddView(new SettableSizeView(gfx::Size(10, 10)), 1, 2); 4745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.AddPaddingRow(0, 10); 4755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 4765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GridLayoutTest, RowSpan) { 4785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ColumnSet* set = layout.AddColumnSet(0); 4795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set->AddColumn(GridLayout::LEADING, 4815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GridLayout::LEADING, 4825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, 4835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GridLayout::USE_PREF, 4845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, 4855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0); 4865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set->AddColumn(GridLayout::LEADING, 4875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GridLayout::LEADING, 4885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, 4895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GridLayout::USE_PREF, 4905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, 4915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0); 4925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.StartRow(0, 0); 4945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.AddView(new SettableSizeView(gfx::Size(20, 10))); 4955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.AddView(new SettableSizeView(gfx::Size(20, 40)), 1, 2); 4965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.StartRow(1, 0); 4975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) View* s3 = new SettableSizeView(gfx::Size(20, 10)); 4985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.AddView(s3); 4995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetPreferredSize(); 5015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(gfx::Size(40, 40), pref); 5025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host.SetBounds(0, 0, pref.width(), pref.height()); 5045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.Layout(&host); 5055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectViewBoundsEquals(0, 10, 20, 10, s3); 5065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GridLayoutTest, RowSpan2) { 5095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ColumnSet* set = layout.AddColumnSet(0); 5105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set->AddColumn(GridLayout::LEADING, GridLayout::LEADING, 5125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, GridLayout::USE_PREF, 0, 0); 5135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set->AddColumn(GridLayout::LEADING, GridLayout::LEADING, 5145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0,GridLayout::USE_PREF, 0, 0); 5155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.StartRow(0, 0); 5175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.AddView(new SettableSizeView(gfx::Size(20, 20))); 5185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) View* s3 = new SettableSizeView(gfx::Size(64, 64)); 5195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.AddView(s3, 1, 3); 5205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.AddPaddingRow(0, 10); 5225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.StartRow(0, 0); 5245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.AddView(new SettableSizeView(gfx::Size(10, 20))); 5255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetPreferredSize(); 5275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(gfx::Size(84, 64), pref); 5285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host.SetBounds(0, 0, pref.width(), pref.height()); 5305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.Layout(&host); 5315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectViewBoundsEquals(20, 0, 64, 64, s3); 5325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GridLayoutTest, FixedViewWidth) { 5355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ColumnSet* set = layout.AddColumnSet(0); 5365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set->AddColumn(GridLayout::LEADING, GridLayout::LEADING, 5385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, GridLayout::USE_PREF, 0, 0); 5395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set->AddColumn(GridLayout::LEADING, GridLayout::LEADING, 5405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0,GridLayout::USE_PREF, 0, 0); 5415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.StartRow(0, 0); 5435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) View* view = new SettableSizeView(gfx::Size(30, 40)); 5445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.AddView(view, 1, 1, GridLayout::LEADING, GridLayout::LEADING, 10, 0); 5455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetPreferredSize(); 5475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(10, pref.width()); 5485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(40, pref.height()); 5495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host.SetBounds(0, 0, pref.width(), pref.height()); 5515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.Layout(&host); 5525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectViewBoundsEquals(0, 0, 10, 40, view); 5535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GridLayoutTest, FixedViewHeight) { 5565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ColumnSet* set = layout.AddColumnSet(0); 5575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set->AddColumn(GridLayout::LEADING, GridLayout::LEADING, 5595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, GridLayout::USE_PREF, 0, 0); 5605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set->AddColumn(GridLayout::LEADING, GridLayout::LEADING, 5615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0,GridLayout::USE_PREF, 0, 0); 5625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.StartRow(0, 0); 5645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) View* view = new SettableSizeView(gfx::Size(30, 40)); 5655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.AddView(view, 1, 1, GridLayout::LEADING, GridLayout::LEADING, 0, 10); 5665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetPreferredSize(); 5685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(30, pref.width()); 5695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(10, pref.height()); 5705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host.SetBounds(0, 0, pref.width(), pref.height()); 5725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.Layout(&host); 5735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectViewBoundsEquals(0, 0, 30, 10, view); 5745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 5755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Make sure that for views that span columns the underlying columns are resized 5775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// based on the resize percent of the column. 5785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GridLayoutTest, ColumnSpanResizing) { 5795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ColumnSet* set = layout.AddColumnSet(0); 5805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set->AddColumn(GridLayout::FILL, GridLayout::CENTER, 5825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 2, GridLayout::USE_PREF, 0, 0); 5835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set->AddColumn(GridLayout::FILL, GridLayout::CENTER, 5845821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 4, GridLayout::USE_PREF, 0, 0); 5855821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5865821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.StartRow(0, 0); 5875821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // span_view spans two columns and is twice as big the views added below. 5885821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) View* span_view = new SettableSizeView(gfx::Size(12, 40)); 5895821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.AddView(span_view, 2, 1, GridLayout::LEADING, GridLayout::LEADING); 5905821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5915821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.StartRow(0, 0); 5925821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) View* view1 = new SettableSizeView(gfx::Size(2, 40)); 5935821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) View* view2 = new SettableSizeView(gfx::Size(4, 40)); 5945821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.AddView(view1); 5955821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.AddView(view2); 5965821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5975821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) host.SetBounds(0, 0, 12, 80); 5985821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.Layout(&host); 5995821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6005821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectViewBoundsEquals(0, 0, 12, 40, span_view); 6015821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6025821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // view1 should be 4 pixels wide 6035821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // column_pref + (remaining_width * column_resize / total_column_resize) = 6045821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 2 + (6 * 2 / 6). 6055821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectViewBoundsEquals(0, 40, 4, 40, view1); 6065821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6075821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // And view2 should be 8 pixels wide: 6085821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // 4 + (6 * 4 / 6). 6095821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ExpectViewBoundsEquals(4, 40, 8, 40, view2); 6105821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Check that GetPreferredSize() takes resizing of columns into account when 6135821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// there is additional space in the case we have column sets of different 6145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// preferred sizes. 6155821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GridLayoutTest, ColumnResizingOnGetPreferredSize) { 6165821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ColumnSet* set = layout.AddColumnSet(0); 6175821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set->AddColumn(GridLayout::FILL, GridLayout::CENTER, 6185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1, GridLayout::USE_PREF, 0, 0); 6195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set = layout.AddColumnSet(1); 6215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set->AddColumn(GridLayout::FILL, GridLayout::CENTER, 6225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1, GridLayout::USE_PREF, 0, 0); 6235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set = layout.AddColumnSet(2); 6255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set->AddColumn(GridLayout::FILL, GridLayout::CENTER, 6265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 1, GridLayout::USE_PREF, 0, 0); 6275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Make a row containing a flexible view that trades width for height. 6295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.StartRow(0, 0); 6305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) View* view1 = new FlexibleView(100); 6315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.AddView(view1, 1, 1, GridLayout::FILL, GridLayout::LEADING); 6325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // The second row contains a view of fixed size that will enforce a column 6345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // width of 20 pixels. 6355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.StartRow(0, 1); 6365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) View* view2 = new SettableSizeView(gfx::Size(20, 20)); 6375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.AddView(view2, 1, 1, GridLayout::FILL, GridLayout::LEADING); 6385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // Add another flexible view in row three in order to ensure column set 6405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // ordering doesn't influence sizing behaviour. 6415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.StartRow(0, 2); 6425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) View* view3 = new FlexibleView(40); 6435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.AddView(view3, 1, 1, GridLayout::FILL, GridLayout::LEADING); 6445821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // We expect a height of 50: 30 from the variable width view in the first row 6465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // plus 20 from the statically sized view in the second row. The flexible 6475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) // view in the third row should contribute no height. 6485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(gfx::Size(20, 50), layout.GetPreferredSize(&host)); 6495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)TEST_F(GridLayoutTest, MinimumPreferredSize) { 6525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) SettableSizeView v1(gfx::Size(10, 20)); 6535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) ColumnSet* set = layout.AddColumnSet(0); 6545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) set->AddColumn(GridLayout::FILL, GridLayout::FILL, 6555821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 0, GridLayout::USE_PREF, 0, 0); 6565821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.StartRow(0, 0); 6575821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.AddView(&v1); 6585821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6595821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetPreferredSize(); 6605821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(gfx::Size(10, 20), pref); 6615821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6625821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) layout.set_minimum_size(gfx::Size(40, 40)); 6635821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) GetPreferredSize(); 6645821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) EXPECT_EQ(gfx::Size(40, 40), pref); 6655821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6665821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) RemoveAll(); 6675821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 6685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 6695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace views 670