From 011479016795f1dd436f81849a21fd8d6ff65ce3 Mon Sep 17 00:00:00 2001 From: "pfeldman@chromium.org" Date: Wed, 1 Jul 2009 16:08:35 +0000 Subject: Add layout support for invisible SingleSplitView children. Review URL: http://codereview.chromium.org/150120 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@19737 0039d316-1c4b-4281-b951-d872f2087c98 --- views/controls/single_split_view.cc | 37 +++++++++++++++++++++++++------------ 1 file changed, 25 insertions(+), 12 deletions(-) (limited to 'views') diff --git a/views/controls/single_split_view.cc b/views/controls/single_split_view.cc index 1ddf229..c0e6e3c 100644 --- a/views/controls/single_split_view.cc +++ b/views/controls/single_split_view.cc @@ -35,20 +35,30 @@ void SingleSplitView::Layout() { View* leading = GetChildViewAt(0); View* trailing = GetChildViewAt(1); - if (divider_offset_ < 0) - divider_offset_ = (GetPrimaryAxisSize() - kDividerSize) / 2; - else - divider_offset_ = std::min(divider_offset_, - GetPrimaryAxisSize() - kDividerSize); - if (is_horizontal_) { - leading->SetBounds(0, 0, divider_offset_, height()); - trailing->SetBounds(divider_offset_ + kDividerSize, 0, - width() - divider_offset_ - kDividerSize, height()); + if (!leading->IsVisible() && !trailing->IsVisible()) + return; + + if (!trailing->IsVisible()) { + leading->SetBounds(0, 0, width(), height()); + } else if (!leading->IsVisible()) { + trailing->SetBounds(0, 0, width(), height()); } else { - leading->SetBounds(0, 0, width(), divider_offset_); - trailing->SetBounds(0, divider_offset_ + kDividerSize, - width(), height() - divider_offset_ - kDividerSize); + if (divider_offset_ < 0) + divider_offset_ = (GetPrimaryAxisSize() - kDividerSize) / 2; + else + divider_offset_ = std::min(divider_offset_, + GetPrimaryAxisSize() - kDividerSize); + + if (is_horizontal_) { + leading->SetBounds(0, 0, divider_offset_, height()); + trailing->SetBounds(divider_offset_ + kDividerSize, 0, + width() - divider_offset_ - kDividerSize, height()); + } else { + leading->SetBounds(0, 0, width(), divider_offset_); + trailing->SetBounds(0, divider_offset_ + kDividerSize, + width(), height() - divider_offset_ - kDividerSize); + } } SchedulePaint(); @@ -139,6 +149,9 @@ bool SingleSplitView::IsPointInDivider(int x, int y) { if (GetChildViewCount() < 2) return false; + if (!GetChildViewAt(0)->IsVisible() || !GetChildViewAt(1)->IsVisible()) + return false; + int divider_relative_offset; if (is_horizontal_) { divider_relative_offset = -- cgit v1.1