OLD | NEW |
1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2008 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 <windows.h> | 5 #include <windows.h> |
6 #include <uxtheme.h> | 6 #include <uxtheme.h> |
7 #include <vsstyle.h> | 7 #include <vsstyle.h> |
8 | 8 |
9 #include "chrome/views/dialog_client_view.h" | 9 #include "chrome/views/dialog_client_view.h" |
10 | 10 |
(...skipping 220 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
231 ClientView::ViewHierarchyChanged(is_add, parent, child); | 231 ClientView::ViewHierarchyChanged(is_add, parent, child); |
232 UpdateDialogButtons(); | 232 UpdateDialogButtons(); |
233 Layout(); | 233 Layout(); |
234 } | 234 } |
235 } | 235 } |
236 | 236 |
237 void DialogClientView::DidChangeBounds(const CRect& prev, const CRect& next) { | 237 void DialogClientView::DidChangeBounds(const CRect& prev, const CRect& next) { |
238 Layout(); | 238 Layout(); |
239 } | 239 } |
240 | 240 |
241 void DialogClientView::GetPreferredSize(CSize* out) { | 241 gfx::Size DialogClientView::GetPreferredSize() { |
242 DCHECK(out); | 242 gfx::Size prefsize = contents_view()->GetPreferredSize(); |
243 contents_view()->GetPreferredSize(out); | |
244 int button_height = 0; | 243 int button_height = 0; |
245 if (has_dialog_buttons()) { | 244 if (has_dialog_buttons()) { |
246 if (cancel_button_) | 245 if (cancel_button_) |
247 button_height = cancel_button_->height(); | 246 button_height = cancel_button_->height(); |
248 else | 247 else |
249 button_height = ok_button_->height(); | 248 button_height = ok_button_->height(); |
250 // Account for padding above and below the button. | 249 // Account for padding above and below the button. |
251 button_height += kDialogButtonContentSpacing + kButtonVEdgeMargin; | 250 button_height += kDialogButtonContentSpacing + kButtonVEdgeMargin; |
252 } | 251 } |
253 out->cy += button_height; | 252 prefsize.Enlarge(0, button_height); |
| 253 return prefsize; |
254 } | 254 } |
255 | 255 |
256 bool DialogClientView::AcceleratorPressed(const Accelerator& accelerator) { | 256 bool DialogClientView::AcceleratorPressed(const Accelerator& accelerator) { |
257 DCHECK(accelerator.GetKeyCode() == VK_ESCAPE); // We only expect Escape key. | 257 DCHECK(accelerator.GetKeyCode() == VK_ESCAPE); // We only expect Escape key. |
258 window()->Close(); | 258 window()->Close(); |
259 return true; | 259 return true; |
260 } | 260 } |
261 | 261 |
262 //////////////////////////////////////////////////////////////////////////////// | 262 //////////////////////////////////////////////////////////////////////////////// |
263 // DialogClientView, NativeButton::Listener implementation: | 263 // DialogClientView, NativeButton::Listener implementation: |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
313 if (cancel_button_) | 313 if (cancel_button_) |
314 return cancel_button_->height() + kDialogButtonContentSpacing; | 314 return cancel_button_->height() + kDialogButtonContentSpacing; |
315 return ok_button_->height() + kDialogButtonContentSpacing; | 315 return ok_button_->height() + kDialogButtonContentSpacing; |
316 } | 316 } |
317 return 0; | 317 return 0; |
318 } | 318 } |
319 | 319 |
320 void DialogClientView::LayoutDialogButtons() { | 320 void DialogClientView::LayoutDialogButtons() { |
321 CRect extra_bounds; | 321 CRect extra_bounds; |
322 if (cancel_button_) { | 322 if (cancel_button_) { |
323 CSize ps; | 323 gfx::Size ps = cancel_button_->GetPreferredSize(); |
324 cancel_button_->GetPreferredSize(&ps); | |
325 CRect lb; | 324 CRect lb; |
326 GetLocalBounds(&lb, false); | 325 GetLocalBounds(&lb, false); |
327 int button_width = GetButtonWidth(DialogDelegate::DIALOGBUTTON_CANCEL); | 326 int button_width = GetButtonWidth(DialogDelegate::DIALOGBUTTON_CANCEL); |
328 CRect bounds; | 327 CRect bounds; |
329 bounds.left = lb.right - button_width - kButtonHEdgeMargin; | 328 bounds.left = lb.right - button_width - kButtonHEdgeMargin; |
330 bounds.top = lb.bottom - ps.cy - kButtonVEdgeMargin; | 329 bounds.top = lb.bottom - ps.height() - kButtonVEdgeMargin; |
331 bounds.right = bounds.left + button_width; | 330 bounds.right = bounds.left + button_width; |
332 bounds.bottom = bounds.top + ps.cy; | 331 bounds.bottom = bounds.top + ps.height(); |
333 cancel_button_->SetBounds(bounds); | 332 cancel_button_->SetBounds(bounds); |
334 // The extra view bounds are dependent on this button. | 333 // The extra view bounds are dependent on this button. |
335 extra_bounds.right = bounds.left; | 334 extra_bounds.right = bounds.left; |
336 extra_bounds.top = bounds.top; | 335 extra_bounds.top = bounds.top; |
337 } | 336 } |
338 if (ok_button_) { | 337 if (ok_button_) { |
339 CSize ps; | 338 gfx::Size ps = ok_button_->GetPreferredSize(); |
340 ok_button_->GetPreferredSize(&ps); | |
341 CRect lb; | 339 CRect lb; |
342 GetLocalBounds(&lb, false); | 340 GetLocalBounds(&lb, false); |
343 int button_width = GetButtonWidth(DialogDelegate::DIALOGBUTTON_OK); | 341 int button_width = GetButtonWidth(DialogDelegate::DIALOGBUTTON_OK); |
344 int ok_button_right = lb.right - kButtonHEdgeMargin; | 342 int ok_button_right = lb.right - kButtonHEdgeMargin; |
345 if (cancel_button_) | 343 if (cancel_button_) |
346 ok_button_right = cancel_button_->x() - kRelatedButtonHSpacing; | 344 ok_button_right = cancel_button_->x() - kRelatedButtonHSpacing; |
347 CRect bounds; | 345 CRect bounds; |
348 bounds.left = ok_button_right - button_width; | 346 bounds.left = ok_button_right - button_width; |
349 bounds.top = lb.bottom - ps.cy - kButtonVEdgeMargin; | 347 bounds.top = lb.bottom - ps.height() - kButtonVEdgeMargin; |
350 bounds.right = ok_button_right; | 348 bounds.right = ok_button_right; |
351 bounds.bottom = bounds.top + ps.cy; | 349 bounds.bottom = bounds.top + ps.height(); |
352 ok_button_->SetBounds(bounds); | 350 ok_button_->SetBounds(bounds); |
353 // The extra view bounds are dependent on this button. | 351 // The extra view bounds are dependent on this button. |
354 extra_bounds.right = bounds.left; | 352 extra_bounds.right = bounds.left; |
355 extra_bounds.top = bounds.top; | 353 extra_bounds.top = bounds.top; |
356 } | 354 } |
357 if (extra_view_) { | 355 if (extra_view_) { |
358 CSize ps; | 356 gfx::Size ps = extra_view_->GetPreferredSize(); |
359 extra_view_->GetPreferredSize(&ps); | |
360 CRect lb; | 357 CRect lb; |
361 GetLocalBounds(&lb, false); | 358 GetLocalBounds(&lb, false); |
362 extra_bounds.left = lb.left + kButtonHEdgeMargin; | 359 extra_bounds.left = lb.left + kButtonHEdgeMargin; |
363 extra_bounds.bottom = extra_bounds.top + ps.cy; | 360 extra_bounds.bottom = extra_bounds.top + ps.height(); |
364 extra_view_->SetBounds(extra_bounds); | 361 extra_view_->SetBounds(extra_bounds); |
365 } | 362 } |
366 } | 363 } |
367 | 364 |
368 void DialogClientView::LayoutContentsView() { | 365 void DialogClientView::LayoutContentsView() { |
369 CRect lb; | 366 CRect lb; |
370 GetLocalBounds(&lb, false); | 367 GetLocalBounds(&lb, false); |
371 lb.bottom = std::max(0, static_cast<int>(lb.bottom - GetButtonsHeight())); | 368 lb.bottom = std::max(0, static_cast<int>(lb.bottom - GetButtonsHeight())); |
372 contents_view()->SetBounds(lb); | 369 contents_view()->SetBounds(lb); |
373 contents_view()->Layout(); | 370 contents_view()->Layout(); |
(...skipping 10 matching lines...) Expand all Loading... |
384 static bool initialized = false; | 381 static bool initialized = false; |
385 if (!initialized) { | 382 if (!initialized) { |
386 ResourceBundle& rb = ResourceBundle::GetSharedInstance(); | 383 ResourceBundle& rb = ResourceBundle::GetSharedInstance(); |
387 dialog_button_font_ = rb.GetFont(ResourceBundle::BaseFont); | 384 dialog_button_font_ = rb.GetFont(ResourceBundle::BaseFont); |
388 initialized = true; | 385 initialized = true; |
389 } | 386 } |
390 } | 387 } |
391 | 388 |
392 } | 389 } |
393 | 390 |
OLD | NEW |