 Chromium Code Reviews
 Chromium Code Reviews Issue 10580039:
  Adds ability to render omnibox as a view above the page.  (Closed) 
  Base URL: svn://svn.chromium.org/chrome/trunk/src
    
  
    Issue 10580039:
  Adds ability to render omnibox as a view above the page.  (Closed) 
  Base URL: svn://svn.chromium.org/chrome/trunk/src| Index: chrome/browser/ui/views/frame/contents_container.cc | 
| diff --git a/chrome/browser/ui/views/frame/contents_container.cc b/chrome/browser/ui/views/frame/contents_container.cc | 
| index 7b6981fd7dc542eee988d0824e23d7693e66c229..31feb37fade5d5c920fd6bb80f24013b184f155d 100644 | 
| --- a/chrome/browser/ui/views/frame/contents_container.cc | 
| +++ b/chrome/browser/ui/views/frame/contents_container.cc | 
| @@ -5,24 +5,55 @@ | 
| #include "chrome/browser/ui/views/frame/contents_container.h" | 
| #include "base/logging.h" | 
| +#include "ui/views/layout/fill_layout.h" | 
| using content::WebContents; | 
| +class ContentsContainer::HeaderView : public views::View { | 
| + public: | 
| + HeaderView(); | 
| + | 
| + bool should_show() { return child_count() && child_at(0)->visible(); } | 
| 
Peter Kasting
2012/06/22 20:33:22
Nit: const
 | 
| + | 
| + protected: | 
| + // views::View overrides: | 
| + virtual void ChildPreferredSizeChanged(views::View* child) OVERRIDE; | 
| + | 
| + private: | 
| + bool child_visibile_; | 
| 
Peter Kasting
2012/06/22 20:33:22
Nit: Maybe call this child_was_visible_ and add so
 | 
| + | 
| + DISALLOW_COPY_AND_ASSIGN(HeaderView); | 
| +}; | 
| + | 
| +ContentsContainer::HeaderView::HeaderView() : child_visibile_(false) {} | 
| + | 
| +void ContentsContainer::HeaderView::ChildPreferredSizeChanged( | 
| + views::View* child) { | 
| + if (parent() && (child->visible() || child_visibile_)) | 
| + parent()->Layout(); | 
| + child_visibile_ = child->visible(); | 
| +} | 
| + | 
| // static | 
| const char ContentsContainer::kViewClassName[] = | 
| "browser/ui/views/frame/ContentsContainer"; | 
| ContentsContainer::ContentsContainer(views::View* active) | 
| - : active_(active), | 
| + : header_(new HeaderView()), | 
| + active_(active), | 
| preview_(NULL), | 
| preview_web_contents_(NULL), | 
| active_top_margin_(0) { | 
| AddChildView(active_); | 
| + header_->SetLayoutManager(new views::FillLayout); | 
| + AddChildView(header_); | 
| } | 
| ContentsContainer::~ContentsContainer() { | 
| } | 
| +views::View* ContentsContainer::header() { return header_; } | 
| + | 
| void ContentsContainer::MakePreviewContentsActiveContents() { | 
| DCHECK(preview_); | 
| @@ -64,9 +95,18 @@ gfx::Rect ContentsContainer::GetPreviewBounds() { | 
| } | 
| void ContentsContainer::Layout() { | 
| - // The active view always gets the full bounds. | 
| - active_->SetBounds(0, active_top_margin_, width(), | 
| - std::max(0, height() - active_top_margin_)); | 
| + int content_y = active_top_margin_; | 
| + int content_height = std::max(0, height() - content_y); | 
| + if (header_->should_show()) { | 
| + gfx::Size header_pref = header_->GetPreferredSize(); | 
| + int header_height = std::min(content_height, header_pref.height()); | 
| + content_height -= header_height; | 
| + header_->SetBounds(0, content_y, width(), header_height); | 
| + content_y += header_height; | 
| + } else { | 
| + header_->SetBoundsRect(gfx::Rect()); | 
| + } | 
| + active_->SetBounds(0, content_y, width(), content_height); | 
| if (preview_) | 
| preview_->SetBounds(0, 0, width(), height()); |