Index: chrome/browser/ui/views/frame/browser_view_layout.cc |
diff --git a/chrome/browser/ui/views/frame/browser_view_layout.cc b/chrome/browser/ui/views/frame/browser_view_layout.cc |
index a4c17d6e8c75ffa5ccf86ab53ae155c48e6e55a4..64a3b06f65b95064808ed0536750b78f209fb2e3 100644 |
--- a/chrome/browser/ui/views/frame/browser_view_layout.cc |
+++ b/chrome/browser/ui/views/frame/browser_view_layout.cc |
@@ -113,7 +113,6 @@ BrowserViewLayout::BrowserViewLayout() |
contents_split_(NULL), |
contents_container_(NULL), |
download_shelf_(NULL), |
- find_bar_y_(0), |
ALLOW_THIS_IN_INITIALIZER_LIST( |
dialog_host_(new WebContentsModalDialogHostViews(this))), |
web_contents_modal_dialog_top_y_(-1) { |
@@ -160,6 +159,8 @@ gfx::Size BrowserViewLayout::GetMinimumSize() { |
-(views::NonClientFrameView::kClientEdgeThickness + |
bookmark_bar_->GetToolbarOverlap(true))); |
} |
+ // TODO: Adjust the minimum height for the find bar. |
+ |
gfx::Size contents_size(contents_split_->GetMinimumSize()); |
int min_height = tabstrip_size.height() + toolbar_size.height() + |
@@ -174,24 +175,31 @@ gfx::Size BrowserViewLayout::GetMinimumSize() { |
} |
gfx::Rect BrowserViewLayout::GetFindBarBoundingBox() const { |
- // This function returns the area the Find Bar can be laid out |
- // within. This basically implies the "user-perceived content |
- // area" of the browser window excluding the vertical |
- // scrollbar. This is not quite so straightforward as positioning |
- // based on the TabContentsContainer since the BookmarkBarView may |
- // be visible but not persistent (in the New Tab case) and we |
- // position the Find Bar over the top of it in that case since the |
- // BookmarkBarView is not _visually_ connected to the Toolbar. |
+ // This function returns the area the Find Bar can be laid out within. This |
+ // basically implies the "user-perceived content area" of the browser |
+ // window excluding the vertical scrollbar. The "user-perceived content area" |
+ // excludes the detached bookmark bar (in the New Tab case) and any infobars |
+ // since they are not _visually_ connected to the Toolbar. |
// First determine the bounding box of the content area in Widget |
// coordinates. |
gfx::Rect bounding_box = contents_container_->ConvertRectToWidget( |
contents_container_->GetLocalBounds()); |
- // Adjust the position and size of the bounding box by the find bar offset |
- // calculated during the last Layout. |
- int height_delta = find_bar_y_ - bounding_box.y(); |
- bounding_box.set_y(find_bar_y_); |
+ TopContainerView* top_container = browser_view_->top_container(); |
+ gfx::Rect top_container_bounds = top_container->ConvertRectToWidget( |
+ top_container->GetLocalBounds()); |
+ |
+ // The find bar is positioned 1 pixel above the bottom of the top container so |
+ // that it occludes the border between the content area and the top container |
+ // and looks connected to the top container. |
+ int find_bar_y = top_container_bounds.bottom() - 1; |
+ |
+ // Grow the height of |bounding_box| by the height of any elements between |
+ // the top container and |contents_container_| such as the detached bookmark |
+ // bar and any infobars. |
+ int height_delta = bounding_box.y() - find_bar_y; |
+ bounding_box.set_y(find_bar_y); |
bounding_box.set_height(std::max(0, bounding_box.height() + height_delta)); |
// Finally decrease the width of the bounding box by the width of |
@@ -412,7 +420,6 @@ int BrowserViewLayout::LayoutToolbar(int top) { |
int BrowserViewLayout::LayoutBookmarkAndInfoBars(int top) { |
web_contents_modal_dialog_top_y_ = |
top + browser_view_->y() - kConstrainedWindowOverlap; |
- find_bar_y_ = top + browser_view_->y() - 1; |
if (bookmark_bar_) { |
// If we're showing the Bookmark bar in detached style, then we |
// need to show any Info bar _above_ the Bookmark bar, since the |
@@ -423,7 +430,6 @@ int BrowserViewLayout::LayoutBookmarkAndInfoBars(int top) { |
top = std::max(browser_view_->toolbar_->bounds().bottom(), |
LayoutBookmarkBar(top)); |
} |
- find_bar_y_ = top + browser_view_->y() - 1; |
return LayoutInfoBar(top); |
} |