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/constrained_window_frame_simple.h" | 5 #include "chrome/browser/ui/views/constrained_window_frame_simple.h" |
6 | 6 |
7 #include "chrome/browser/ui/constrained_window.h" | 7 #include "chrome/browser/ui/constrained_window.h" |
8 #include "chrome/browser/ui/views/constrained_window_views.h" | 8 #include "chrome/browser/ui/views/constrained_window_views.h" |
9 #include "grit/ui_resources.h" | 9 #include "grit/ui_resources.h" |
10 #include "grit/chromium_strings.h" | 10 #include "grit/chromium_strings.h" |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
44 private: | 44 private: |
45 views::Widget* container_; | 45 views::Widget* container_; |
46 | 46 |
47 DISALLOW_COPY_AND_ASSIGN(HeaderLayout); | 47 DISALLOW_COPY_AND_ASSIGN(HeaderLayout); |
48 }; | 48 }; |
49 | 49 |
50 void HeaderLayout::Layout(views::View* host) { | 50 void HeaderLayout::Layout(views::View* host) { |
51 if (!host->has_children()) | 51 if (!host->has_children()) |
52 return; | 52 return; |
53 | 53 |
54 int horizontal_padding = ConstrainedWindow::kHorizontalPadding; | 54 int top_padding = ConstrainedWindow::kCloseButtonPadding; |
55 int vertical_padding = ConstrainedWindow::kVerticalPadding; | 55 int left_padding = ConstrainedWindow::kHorizontalPadding; |
56 int row_padding = ConstrainedWindow::kRowPadding; | 56 int bottom_padding = ConstrainedWindow::kRowPadding; |
57 int right_padding = ConstrainedWindow::kCloseButtonPadding; | |
57 | 58 |
58 views::View* header = host->child_at(0); | 59 views::View* header = host->child_at(0); |
59 gfx::Size preferred_size = GetPreferredSize(host); | 60 gfx::Size preferred_size = GetPreferredSize(host); |
60 int width = preferred_size.width() - 2 * horizontal_padding; | 61 int width = preferred_size.width() - left_padding - right_padding; |
61 int height = preferred_size.height() - vertical_padding - row_padding; | 62 int height = preferred_size.height() - top_padding - bottom_padding; |
62 | 63 |
63 header->SetBounds(horizontal_padding, vertical_padding, width, height); | 64 header->SetBounds(left_padding, top_padding, width, height); |
64 } | 65 } |
65 | 66 |
66 gfx::Size HeaderLayout::GetPreferredSize(views::View* host) { | 67 gfx::Size HeaderLayout::GetPreferredSize(views::View* host) { |
67 int horizontal_padding = ConstrainedWindow::kHorizontalPadding; | 68 int left_padding = ConstrainedWindow::kHorizontalPadding; |
68 int vertical_padding = ConstrainedWindow::kVerticalPadding; | 69 int top_padding = ConstrainedWindow::kCloseButtonPadding; |
69 int row_padding = ConstrainedWindow::kRowPadding; | 70 int right_padding = ConstrainedWindow::kCloseButtonPadding; |
71 int bottom_padding = ConstrainedWindow::kRowPadding; | |
70 | 72 |
71 views::View* header = host->child_at(0); | 73 views::View* header = host->child_at(0); |
72 views::View* client_view = container_->client_view(); | 74 views::View* client_view = container_->client_view(); |
73 | 75 |
74 gfx::Size header_size = header ? header->GetPreferredSize() : gfx::Size(); | 76 gfx::Size header_size = header ? header->GetPreferredSize() : gfx::Size(); |
75 gfx::Size client_size = | 77 gfx::Size client_size = |
76 client_view ? client_view->GetPreferredSize() : gfx::Size(); | 78 client_view ? client_view->GetPreferredSize() : gfx::Size(); |
77 int width = std::max(client_size.width(), header_size.width()) + | 79 int width = std::max(client_size.width(), header_size.width()) + |
78 2 * horizontal_padding; | 80 left_padding + right_padding; |
79 int height = vertical_padding + header_size.height() + row_padding; | 81 int height = header_size.height() + top_padding + bottom_padding; |
80 return gfx::Size(width, height); | 82 return gfx::Size(width, height); |
81 } | 83 } |
82 | 84 |
83 } // namespace | 85 } // namespace |
84 | 86 |
85 ConstrainedWindowFrameSimple::HeaderViews::HeaderViews( | 87 ConstrainedWindowFrameSimple::HeaderViews::HeaderViews( |
86 views::View* header, | 88 views::View* header, |
87 views::Label* title_label, | 89 views::Label* title_label, |
88 views::Button* close_button) | 90 views::Button* close_button) |
89 : header(header), | 91 : header(header), |
(...skipping 12 matching lines...) Expand all Loading... | |
102 | 104 |
103 SetHeaderView(CreateDefaultHeaderView()); | 105 SetHeaderView(CreateDefaultHeaderView()); |
104 | 106 |
105 set_background(views::Background::CreateSolidBackground( | 107 set_background(views::Background::CreateSolidBackground( |
106 ConstrainedWindow::GetBackgroundColor())); | 108 ConstrainedWindow::GetBackgroundColor())); |
107 } | 109 } |
108 | 110 |
109 ConstrainedWindowFrameSimple::~ConstrainedWindowFrameSimple() { | 111 ConstrainedWindowFrameSimple::~ConstrainedWindowFrameSimple() { |
110 } | 112 } |
111 | 113 |
112 void ConstrainedWindowFrameSimple::SetHeaderView(HeaderViews* header_views) | 114 void ConstrainedWindowFrameSimple::SetHeaderView(HeaderViews* header_views) |
Mike Wittman
2012/10/08 21:34:19
The custom header padding needs to be applied here
please use gerrit instead
2012/10/09 18:38:09
One of my upcoming CLs gives the ability to set cu
| |
113 { | 115 { |
114 RemoveAllChildViews(true); | 116 RemoveAllChildViews(true); |
115 | 117 |
116 header_views_.reset(header_views); | 118 header_views_.reset(header_views); |
117 | 119 |
118 AddChildView(header_views_->header); | 120 AddChildView(header_views_->header); |
119 } | 121 } |
120 | 122 |
123 views::View* ConstrainedWindowFrameSimple::AddPadding( | |
124 views::View* viewToPad, | |
125 int top, | |
126 int left, | |
127 int bottom, | |
128 int right) { | |
129 views::View* result = new views::View(); | |
130 views::GridLayout* layout = new views::GridLayout(result); | |
131 result->SetLayoutManager(layout); | |
132 layout->SetInsets(top, left, bottom, right); | |
133 views::ColumnSet* cs = layout->AddColumnSet(0); | |
134 cs->AddColumn(views::GridLayout::CENTER, views::GridLayout::CENTER, 0, | |
135 views::GridLayout::USE_PREF, 0, 0); | |
136 layout->StartRow(0, 0); | |
137 layout->AddView(viewToPad); | |
138 return result; | |
139 } | |
140 | |
121 HeaderViews* ConstrainedWindowFrameSimple::CreateDefaultHeaderView() { | 141 HeaderViews* ConstrainedWindowFrameSimple::CreateDefaultHeaderView() { |
142 // kVerticalPadding - kCloseButtonPadding - title ascent height | |
143 // = 20 - 4 - 5 = 11. | |
144 const int kTitleTopPadding = 11; | |
145 const int kTitleLeftPadding = 0; | |
146 const int kTitleBottomPadding = 0; | |
147 const int kTitleRightPadding = 0; | |
148 | |
122 views::View* header_view = new views::View; | 149 views::View* header_view = new views::View; |
123 | 150 |
124 views::GridLayout* grid_layout = new views::GridLayout(header_view); | 151 views::GridLayout* grid_layout = new views::GridLayout(header_view); |
125 header_view->SetLayoutManager(grid_layout); | 152 header_view->SetLayoutManager(grid_layout); |
126 | 153 |
127 views::ColumnSet* header_cs = grid_layout->AddColumnSet(0); | 154 views::ColumnSet* header_cs = grid_layout->AddColumnSet(0); |
128 header_cs->AddColumn(views::GridLayout::CENTER, views::GridLayout::CENTER, 0, | 155 header_cs->AddColumn(views::GridLayout::CENTER, views::GridLayout::CENTER, 0, |
129 views::GridLayout::USE_PREF, 0, 0); // Title. | 156 views::GridLayout::USE_PREF, 0, 0); // Title. |
130 header_cs->AddPaddingColumn(1, views::kUnrelatedControlHorizontalSpacing); | 157 header_cs->AddPaddingColumn(1, views::kUnrelatedControlHorizontalSpacing); |
131 header_cs->AddColumn(views::GridLayout::CENTER, views::GridLayout::CENTER, 0, | 158 header_cs->AddColumn(views::GridLayout::TRAILING, views::GridLayout::LEADING, |
132 views::GridLayout::USE_PREF, 0, 0); // Close Button. | 159 0, views::GridLayout::USE_PREF, 0, 0); // Close Button. |
133 | 160 |
134 // Header row. | 161 // Header row. |
135 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); | 162 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); |
136 grid_layout->StartRow(0, 0); | 163 grid_layout->StartRow(0, 0); |
164 | |
137 views::Label* title_label = new views::Label(); | 165 views::Label* title_label = new views::Label(); |
138 title_label->SetHorizontalAlignment(views::Label::ALIGN_LEFT); | 166 title_label->SetHorizontalAlignment(views::Label::ALIGN_LEFT); |
139 title_label->SetFont(rb.GetFont(ConstrainedWindow::kTitleFontStyle)); | 167 title_label->SetFont(rb.GetFont(ConstrainedWindow::kTitleFontStyle)); |
140 title_label->SetEnabledColor(ConstrainedWindow::GetTextColor()); | 168 title_label->SetEnabledColor(ConstrainedWindow::GetTextColor()); |
141 title_label->SetText(container_->widget_delegate()->GetWindowTitle()); | 169 title_label->SetText(container_->widget_delegate()->GetWindowTitle()); |
142 grid_layout->AddView(title_label); | 170 grid_layout->AddView(AddPadding(title_label, kTitleTopPadding, |
171 kTitleLeftPadding, kTitleBottomPadding, kTitleRightPadding)); | |
143 | 172 |
144 views::Button* close_button = CreateCloseButton(); | 173 views::Button* close_button = CreateCloseButton(); |
145 grid_layout->AddView(close_button); | 174 grid_layout->AddView(close_button); |
146 | 175 |
147 return new HeaderViews(header_view, title_label, close_button); | 176 return new HeaderViews(header_view, title_label, close_button); |
148 } | 177 } |
149 | 178 |
150 gfx::Rect ConstrainedWindowFrameSimple::GetBoundsForClientView() const { | 179 gfx::Rect ConstrainedWindowFrameSimple::GetBoundsForClientView() const { |
151 int horizontal_padding = ConstrainedWindow::kHorizontalPadding; | |
152 int vertical_padding = ConstrainedWindow::kVerticalPadding; | |
153 int row_padding = ConstrainedWindow::kRowPadding; | |
154 gfx::Size header_size = | 180 gfx::Size header_size = |
155 header_views_->header ? | 181 header_views_->header ? |
156 header_views_->header->GetPreferredSize() : gfx::Size(); | 182 header_views_->header->GetPreferredSize() : gfx::Size(); |
157 | 183 |
158 return gfx::Rect(horizontal_padding, | 184 int client_x = ConstrainedWindow::kHorizontalPadding; |
159 vertical_padding + header_size.height() + row_padding, | 185 int client_y = ConstrainedWindow::kCloseButtonPadding + header_size.height() + |
160 std::max(0, width() - 2 * horizontal_padding), | 186 ConstrainedWindow::kRowPadding; |
161 std::max(0, (height() - 2 * vertical_padding - | 187 int client_width = std::max(0, width() - client_x - |
162 header_size.height() - row_padding))); | 188 ConstrainedWindow::kHorizontalPadding); |
189 int client_height = std::max(0, height() - client_y - | |
190 ConstrainedWindow::kVerticalPadding); | |
191 | |
192 return gfx::Rect(client_x, client_y, client_width, client_height); | |
163 } | 193 } |
164 | 194 |
165 gfx::Rect ConstrainedWindowFrameSimple::GetWindowBoundsForClientBounds( | 195 gfx::Rect ConstrainedWindowFrameSimple::GetWindowBoundsForClientBounds( |
166 const gfx::Rect& client_bounds) const { | 196 const gfx::Rect& client_bounds) const { |
167 int horizontal_padding = ConstrainedWindow::kHorizontalPadding; | |
168 int vertical_padding = ConstrainedWindow::kVerticalPadding; | |
169 int row_padding = ConstrainedWindow::kRowPadding; | |
170 gfx::Size header_size = | 197 gfx::Size header_size = |
171 header_views_->header ? | 198 header_views_->header ? |
172 header_views_->header->GetPreferredSize() : gfx::Size(); | 199 header_views_->header->GetPreferredSize() : gfx::Size(); |
173 | 200 |
174 int x = client_bounds.x() - horizontal_padding; | 201 int x = client_bounds.x() - ConstrainedWindow::kHorizontalPadding; |
175 int y = client_bounds.y() - vertical_padding - header_size.height() - | 202 int y = client_bounds.y() - ConstrainedWindow::kCloseButtonPadding - |
176 row_padding; | 203 header_size.height() - ConstrainedWindow::kRowPadding; |
177 int width = client_bounds.width() + 2 * horizontal_padding; | 204 int width = client_bounds.width() + ConstrainedWindow::kHorizontalPadding + |
178 int height = client_bounds.height() + 2 * vertical_padding + | 205 ConstrainedWindow::kCloseButtonPadding; |
179 header_size.height() + row_padding; | 206 int height = client_bounds.height() + ConstrainedWindow::kCloseButtonPadding + |
207 header_size.height() + ConstrainedWindow::kRowPadding; | |
Mike Wittman
2012/10/08 21:34:19
This should also include ConstrainedWindow::kVerti
please use gerrit instead
2012/10/09 18:38:09
Done.
| |
180 | 208 |
181 return gfx::Rect(x, y, width, height); | 209 return gfx::Rect(x, y, width, height); |
182 } | 210 } |
183 | 211 |
184 int ConstrainedWindowFrameSimple::NonClientHitTest(const gfx::Point& point) { | 212 int ConstrainedWindowFrameSimple::NonClientHitTest(const gfx::Point& point) { |
185 if (!bounds().Contains(point)) | 213 if (!bounds().Contains(point)) |
186 return HTNOWHERE; | 214 return HTNOWHERE; |
187 return HTCLIENT; | 215 return HTCLIENT; |
188 } | 216 } |
189 | 217 |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
228 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); | 256 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); |
229 views::ImageButton* close_button = new views::ImageButton(this); | 257 views::ImageButton* close_button = new views::ImageButton(this); |
230 close_button->SetImage(views::CustomButton::BS_NORMAL, | 258 close_button->SetImage(views::CustomButton::BS_NORMAL, |
231 rb.GetImageSkiaNamed(IDR_SHARED_IMAGES_X)); | 259 rb.GetImageSkiaNamed(IDR_SHARED_IMAGES_X)); |
232 close_button->SetImage(views::CustomButton::BS_HOT, | 260 close_button->SetImage(views::CustomButton::BS_HOT, |
233 rb.GetImageSkiaNamed(IDR_SHARED_IMAGES_X_HOVER)); | 261 rb.GetImageSkiaNamed(IDR_SHARED_IMAGES_X_HOVER)); |
234 close_button->SetImage(views::CustomButton::BS_PUSHED, | 262 close_button->SetImage(views::CustomButton::BS_PUSHED, |
235 rb.GetImageSkiaNamed(IDR_SHARED_IMAGES_X_HOVER)); | 263 rb.GetImageSkiaNamed(IDR_SHARED_IMAGES_X_HOVER)); |
236 return close_button; | 264 return close_button; |
237 } | 265 } |
OLD | NEW |