Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(292)

Side by Side Diff: chrome/browser/ui/views/frame/contents_container.cc

Issue 10580039: Adds ability to render omnibox as a view above the page. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix windows Created 8 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/ui/views/frame/contents_container.h" 5 #include "chrome/browser/ui/views/frame/contents_container.h"
6 6
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "ui/views/layout/fill_layout.h"
8 9
9 using content::WebContents; 10 using content::WebContents;
10 11
12 class ContentsContainer::HeaderView : public views::View {
13 public:
14 HeaderView();
15
16 bool should_show() { return child_count() && child_at(0)->visible(); }
Peter Kasting 2012/06/22 20:33:22 Nit: const
17
18 protected:
19 // views::View overrides:
20 virtual void ChildPreferredSizeChanged(views::View* child) OVERRIDE;
21
22 private:
23 bool child_visibile_;
Peter Kasting 2012/06/22 20:33:22 Nit: Maybe call this child_was_visible_ and add so
24
25 DISALLOW_COPY_AND_ASSIGN(HeaderView);
26 };
27
28 ContentsContainer::HeaderView::HeaderView() : child_visibile_(false) {}
29
30 void ContentsContainer::HeaderView::ChildPreferredSizeChanged(
31 views::View* child) {
32 if (parent() && (child->visible() || child_visibile_))
33 parent()->Layout();
34 child_visibile_ = child->visible();
35 }
36
11 // static 37 // static
12 const char ContentsContainer::kViewClassName[] = 38 const char ContentsContainer::kViewClassName[] =
13 "browser/ui/views/frame/ContentsContainer"; 39 "browser/ui/views/frame/ContentsContainer";
14 40
15 ContentsContainer::ContentsContainer(views::View* active) 41 ContentsContainer::ContentsContainer(views::View* active)
16 : active_(active), 42 : header_(new HeaderView()),
43 active_(active),
17 preview_(NULL), 44 preview_(NULL),
18 preview_web_contents_(NULL), 45 preview_web_contents_(NULL),
19 active_top_margin_(0) { 46 active_top_margin_(0) {
20 AddChildView(active_); 47 AddChildView(active_);
48 header_->SetLayoutManager(new views::FillLayout);
49 AddChildView(header_);
21 } 50 }
22 51
23 ContentsContainer::~ContentsContainer() { 52 ContentsContainer::~ContentsContainer() {
24 } 53 }
25 54
55 views::View* ContentsContainer::header() { return header_; }
56
26 void ContentsContainer::MakePreviewContentsActiveContents() { 57 void ContentsContainer::MakePreviewContentsActiveContents() {
27 DCHECK(preview_); 58 DCHECK(preview_);
28 59
29 active_ = preview_; 60 active_ = preview_;
30 preview_ = NULL; 61 preview_ = NULL;
31 preview_web_contents_ = NULL; 62 preview_web_contents_ = NULL;
32 Layout(); 63 Layout();
33 } 64 }
34 65
35 void ContentsContainer::SetPreview(views::View* preview, 66 void ContentsContainer::SetPreview(views::View* preview,
(...skipping 21 matching lines...) Expand all
57 InvalidateLayout(); 88 InvalidateLayout();
58 } 89 }
59 90
60 gfx::Rect ContentsContainer::GetPreviewBounds() { 91 gfx::Rect ContentsContainer::GetPreviewBounds() {
61 gfx::Point screen_loc; 92 gfx::Point screen_loc;
62 ConvertPointToScreen(this, &screen_loc); 93 ConvertPointToScreen(this, &screen_loc);
63 return gfx::Rect(screen_loc, size()); 94 return gfx::Rect(screen_loc, size());
64 } 95 }
65 96
66 void ContentsContainer::Layout() { 97 void ContentsContainer::Layout() {
67 // The active view always gets the full bounds. 98 int content_y = active_top_margin_;
68 active_->SetBounds(0, active_top_margin_, width(), 99 int content_height = std::max(0, height() - content_y);
69 std::max(0, height() - active_top_margin_)); 100 if (header_->should_show()) {
101 gfx::Size header_pref = header_->GetPreferredSize();
102 int header_height = std::min(content_height, header_pref.height());
103 content_height -= header_height;
104 header_->SetBounds(0, content_y, width(), header_height);
105 content_y += header_height;
106 } else {
107 header_->SetBoundsRect(gfx::Rect());
108 }
109 active_->SetBounds(0, content_y, width(), content_height);
70 110
71 if (preview_) 111 if (preview_)
72 preview_->SetBounds(0, 0, width(), height()); 112 preview_->SetBounds(0, 0, width(), height());
73 113
74 // Need to invoke views::View in case any views whose bounds didn't change 114 // Need to invoke views::View in case any views whose bounds didn't change
75 // still need a layout. 115 // still need a layout.
76 views::View::Layout(); 116 views::View::Layout();
77 } 117 }
78 118
79 std::string ContentsContainer::GetClassName() const { 119 std::string ContentsContainer::GetClassName() const {
80 return kViewClassName; 120 return kViewClassName;
81 } 121 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698