OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/controls/webview/webview.h" |
8 | 9 |
9 using content::WebContents; | 10 using content::WebContents; |
10 | 11 |
11 // static | 12 // static |
12 const char ContentsContainer::kViewClassName[] = | 13 const char ContentsContainer::kViewClassName[] = |
13 "browser/ui/views/frame/ContentsContainer"; | 14 "browser/ui/views/frame/ContentsContainer"; |
14 | 15 |
15 ContentsContainer::ContentsContainer(views::View* active) | 16 ContentsContainer::ContentsContainer(views::WebView* active) |
16 : active_(active), | 17 : active_(active), |
17 overlay_(NULL), | 18 overlay_(NULL), |
18 preview_(NULL), | 19 preview_(NULL), |
19 preview_web_contents_(NULL), | 20 preview_web_contents_(NULL), |
20 active_top_margin_(0) { | 21 active_top_margin_(0) { |
21 AddChildView(active_); | 22 AddChildView(active_); |
22 } | 23 } |
23 | 24 |
24 ContentsContainer::~ContentsContainer() { | 25 ContentsContainer::~ContentsContainer() { |
25 } | 26 } |
26 | 27 |
| 28 void ContentsContainer::SetActive(views::WebView* active) { |
| 29 if (active_) |
| 30 RemoveChildView(active_); |
| 31 active_ = active; |
| 32 // Note the active view is always the first child. |
| 33 if (active_) |
| 34 AddChildViewAt(active_, 0); |
| 35 Layout(); |
| 36 } |
| 37 |
27 void ContentsContainer::SetOverlay(views::View* overlay) { | 38 void ContentsContainer::SetOverlay(views::View* overlay) { |
28 if (overlay_) | 39 if (overlay_) |
29 RemoveChildView(overlay_); | 40 RemoveChildView(overlay_); |
30 overlay_ = overlay; | 41 overlay_ = overlay; |
31 if (overlay_) | 42 if (overlay_) |
32 AddChildView(overlay_); | 43 AddChildView(overlay_); |
33 Layout(); | 44 Layout(); |
34 } | 45 } |
35 | 46 |
36 void ContentsContainer::MakePreviewContentsActiveContents() { | 47 void ContentsContainer::MakePreviewContentsActiveContents() { |
37 DCHECK(preview_); | 48 DCHECK(preview_); |
38 | 49 |
39 active_ = preview_; | 50 active_ = preview_; |
40 preview_ = NULL; | 51 preview_ = NULL; |
41 preview_web_contents_ = NULL; | 52 preview_web_contents_ = NULL; |
42 Layout(); | 53 Layout(); |
43 } | 54 } |
44 | 55 |
45 void ContentsContainer::SetPreview(views::View* preview, | 56 void ContentsContainer::SetPreview(views::WebView* preview, |
46 WebContents* preview_web_contents) { | 57 WebContents* preview_web_contents) { |
47 if (preview == preview_) | 58 if (preview == preview_) |
48 return; | 59 return; |
49 | 60 |
50 if (preview_) | 61 if (preview_) |
51 RemoveChildView(preview_); | 62 RemoveChildView(preview_); |
52 preview_ = preview; | 63 preview_ = preview; |
53 preview_web_contents_ = preview_web_contents; | 64 preview_web_contents_ = preview_web_contents; |
54 if (preview_) | 65 if (preview_) |
55 AddChildView(preview_); | 66 AddChildView(preview_); |
(...skipping 14 matching lines...) Expand all Loading... |
70 gfx::Rect ContentsContainer::GetPreviewBounds() { | 81 gfx::Rect ContentsContainer::GetPreviewBounds() { |
71 gfx::Point screen_loc; | 82 gfx::Point screen_loc; |
72 ConvertPointToScreen(this, &screen_loc); | 83 ConvertPointToScreen(this, &screen_loc); |
73 return gfx::Rect(screen_loc, size()); | 84 return gfx::Rect(screen_loc, size()); |
74 } | 85 } |
75 | 86 |
76 void ContentsContainer::Layout() { | 87 void ContentsContainer::Layout() { |
77 int content_y = active_top_margin_; | 88 int content_y = active_top_margin_; |
78 int content_height = std::max(0, height() - content_y); | 89 int content_height = std::max(0, height() - content_y); |
79 | 90 |
80 active_->SetBounds(0, content_y, width(), content_height); | 91 if (active_) |
| 92 active_->SetBounds(0, content_y, width(), content_height); |
81 | 93 |
82 if (overlay_) | 94 if (overlay_) |
83 overlay_->SetBounds(0, 0, width(), height()); | 95 overlay_->SetBounds(0, 0, width(), height()); |
84 | 96 |
85 if (preview_) | 97 if (preview_) |
86 preview_->SetBounds(0, 0, width(), height()); | 98 preview_->SetBounds(0, 0, width(), height()); |
87 | 99 |
88 // Need to invoke views::View in case any views whose bounds didn't change | 100 // Need to invoke views::View in case any views whose bounds didn't change |
89 // still need a layout. | 101 // still need a layout. |
90 views::View::Layout(); | 102 views::View::Layout(); |
91 } | 103 } |
92 | 104 |
93 std::string ContentsContainer::GetClassName() const { | 105 std::string ContentsContainer::GetClassName() const { |
94 return kViewClassName; | 106 return kViewClassName; |
95 } | 107 } |
OLD | NEW |