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

Side by Side Diff: ui/views/bubble/bubble_frame_view.cc

Issue 1717453003: Introduce BubbleDialogDelegateView, which extends DialogDelegateView (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: . Created 4 years, 9 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
« no previous file with comments | « ui/views/bubble/bubble_frame_view.h ('k') | ui/views/examples/widget_example.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 "ui/views/bubble/bubble_frame_view.h" 5 #include "ui/views/bubble/bubble_frame_view.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <utility> 8 #include <utility>
9 9
10 #include "build/build_config.h" 10 #include "build/build_config.h"
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
71 const char BubbleFrameView::kViewClassName[] = "BubbleFrameView"; 71 const char BubbleFrameView::kViewClassName[] = "BubbleFrameView";
72 72
73 BubbleFrameView::BubbleFrameView(const gfx::Insets& title_margins, 73 BubbleFrameView::BubbleFrameView(const gfx::Insets& title_margins,
74 const gfx::Insets& content_margins) 74 const gfx::Insets& content_margins)
75 : bubble_border_(nullptr), 75 : bubble_border_(nullptr),
76 title_margins_(title_margins), 76 title_margins_(title_margins),
77 content_margins_(content_margins), 77 content_margins_(content_margins),
78 title_icon_(new views::ImageView()), 78 title_icon_(new views::ImageView()),
79 title_(nullptr), 79 title_(nullptr),
80 close_(nullptr), 80 close_(nullptr),
81 titlebar_extra_view_(nullptr),
82 footnote_container_(nullptr), 81 footnote_container_(nullptr),
83 close_button_clicked_(false) { 82 close_button_clicked_(false) {
84 AddChildView(title_icon_); 83 AddChildView(title_icon_);
85 84
86 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance(); 85 ui::ResourceBundle& rb = ui::ResourceBundle::GetSharedInstance();
87 title_ = new Label(base::string16(), 86 title_ = new Label(base::string16(),
88 rb.GetFontListWithDelta(ui::kTitleFontSizeDelta)); 87 rb.GetFontListWithDelta(ui::kTitleFontSizeDelta));
89 title_->SetHorizontalAlignment(gfx::ALIGN_LEFT); 88 title_->SetHorizontalAlignment(gfx::ALIGN_LEFT);
90 title_->set_collapse_when_hidden(true); 89 title_->set_collapse_when_hidden(true);
91 title_->SetVisible(false); 90 title_->SetVisible(false);
(...skipping 209 matching lines...) Expand 10 before | Expand all | Expand 10 after
301 title_label_size.SetToMin(gfx::Size(title_label_width, 300 title_label_size.SetToMin(gfx::Size(title_label_width,
302 title_label_size.height())); 301 title_label_size.height()));
303 gfx::Rect title_label_bounds( 302 gfx::Rect title_label_bounds(
304 title_label_x, bounds.y(), title_label_size.width(), title_height); 303 title_label_x, bounds.y(), title_label_size.width(), title_height);
305 title_->SetBoundsRect(title_label_bounds); 304 title_->SetBoundsRect(title_label_bounds);
306 305
307 bounds.set_width( 306 bounds.set_width(
308 title_icon_size.width() + title_label_size.width() + padding); 307 title_icon_size.width() + title_label_size.width() + padding);
309 bounds.set_height(title_height); 308 bounds.set_height(title_height);
310 309
311 if (titlebar_extra_view_) {
312 const int extra_width = close_->x() - bounds.right();
313 gfx::Size size = titlebar_extra_view_->GetPreferredSize();
314 size.SetToMin(gfx::Size(std::max(0, extra_width), size.height()));
315 gfx::Rect titlebar_extra_view_bounds(
316 close_->x() - size.width(),
317 bounds.y(),
318 size.width(),
319 bounds.height());
320 titlebar_extra_view_bounds.Subtract(bounds);
321 titlebar_extra_view_->SetBoundsRect(titlebar_extra_view_bounds);
322 }
323
324 if (footnote_container_) { 310 if (footnote_container_) {
325 gfx::Rect local_bounds = GetContentsBounds(); 311 gfx::Rect local_bounds = GetContentsBounds();
326 int height = footnote_container_->GetHeightForWidth(local_bounds.width()); 312 int height = footnote_container_->GetHeightForWidth(local_bounds.width());
327 footnote_container_->SetBounds(local_bounds.x(), 313 footnote_container_->SetBounds(local_bounds.x(),
328 local_bounds.bottom() - height, 314 local_bounds.bottom() - height,
329 local_bounds.width(), height); 315 local_bounds.width(), height);
330 } 316 }
331 } 317 }
332 318
333 const char* BubbleFrameView::GetClassName() const { 319 const char* BubbleFrameView::GetClassName() const {
334 return kViewClassName; 320 return kViewClassName;
335 } 321 }
336 322
337 void BubbleFrameView::ChildPreferredSizeChanged(View* child) {
338 if (child == titlebar_extra_view_ || child == title_)
339 Layout();
340 }
341
342 void BubbleFrameView::OnThemeChanged() { 323 void BubbleFrameView::OnThemeChanged() {
343 UpdateWindowTitle(); 324 UpdateWindowTitle();
344 ResetWindowControls(); 325 ResetWindowControls();
345 UpdateWindowIcon(); 326 UpdateWindowIcon();
346 } 327 }
347 328
348 void BubbleFrameView::OnNativeThemeChanged(const ui::NativeTheme* theme) { 329 void BubbleFrameView::OnNativeThemeChanged(const ui::NativeTheme* theme) {
349 if (bubble_border_ && bubble_border_->use_theme_background_color()) { 330 if (bubble_border_ && bubble_border_->use_theme_background_color()) {
350 bubble_border_->set_background_color(GetNativeTheme()-> 331 bubble_border_->set_background_color(GetNativeTheme()->
351 GetSystemColor(ui::NativeTheme::kColorId_DialogBackground)); 332 GetSystemColor(ui::NativeTheme::kColorId_DialogBackground));
352 SchedulePaint(); 333 SchedulePaint();
353 } 334 }
354 } 335 }
355 336
356 void BubbleFrameView::ButtonPressed(Button* sender, const ui::Event& event) { 337 void BubbleFrameView::ButtonPressed(Button* sender, const ui::Event& event) {
357 if (sender == close_) { 338 if (sender == close_) {
358 close_button_clicked_ = true; 339 close_button_clicked_ = true;
359 GetWidget()->Close(); 340 GetWidget()->Close();
360 } 341 }
361 } 342 }
362 343
363 void BubbleFrameView::SetBubbleBorder(scoped_ptr<BubbleBorder> border) { 344 void BubbleFrameView::SetBubbleBorder(scoped_ptr<BubbleBorder> border) {
364 bubble_border_ = border.get(); 345 bubble_border_ = border.get();
365 SetBorder(std::move(border)); 346 SetBorder(std::move(border));
366 347
367 // Update the background, which relies on the border. 348 // Update the background, which relies on the border.
368 set_background(new views::BubbleBackground(bubble_border_)); 349 set_background(new views::BubbleBackground(bubble_border_));
369 } 350 }
370 351
371 void BubbleFrameView::SetTitlebarExtraView(scoped_ptr<View> view) { 352 void BubbleFrameView::SetFootnoteView(View* view) {
372 if (!view)
373 return;
374
375 DCHECK(!titlebar_extra_view_);
376 titlebar_extra_view_ = view.release();
377 AddChildView(titlebar_extra_view_);
378 }
379
380 void BubbleFrameView::SetFootnoteView(scoped_ptr<View> view) {
381 if (!view) 353 if (!view)
382 return; 354 return;
383 355
384 DCHECK(!footnote_container_); 356 DCHECK(!footnote_container_);
385
386 footnote_container_ = new views::View(); 357 footnote_container_ = new views::View();
387 footnote_container_->SetLayoutManager( 358 footnote_container_->SetLayoutManager(
388 new BoxLayout(BoxLayout::kVertical, content_margins_.left(), 359 new BoxLayout(BoxLayout::kVertical, content_margins_.left(),
389 content_margins_.top(), 0)); 360 content_margins_.top(), 0));
390 footnote_container_->set_background( 361 footnote_container_->set_background(
391 Background::CreateSolidBackground(kFootnoteBackgroundColor)); 362 Background::CreateSolidBackground(kFootnoteBackgroundColor));
392 footnote_container_->SetBorder( 363 footnote_container_->SetBorder(
393 Border::CreateSolidSidedBorder(1, 0, 0, 0, kFootnoteBorderColor)); 364 Border::CreateSolidSidedBorder(1, 0, 0, 0, kFootnoteBorderColor));
394 footnote_container_->AddChildView(view.release()); 365 footnote_container_->AddChildView(view);
395 AddChildView(footnote_container_); 366 AddChildView(footnote_container_);
396 } 367 }
397 368
398 gfx::Rect BubbleFrameView::GetUpdatedWindowBounds(const gfx::Rect& anchor_rect, 369 gfx::Rect BubbleFrameView::GetUpdatedWindowBounds(const gfx::Rect& anchor_rect,
399 gfx::Size client_size, 370 gfx::Size client_size,
400 bool adjust_if_offscreen) { 371 bool adjust_if_offscreen) {
401 gfx::Size size(GetSizeForClientSize(client_size)); 372 gfx::Size size(GetSizeForClientSize(client_size));
402 373
403 const BubbleBorder::Arrow arrow = bubble_border_->arrow(); 374 const BubbleBorder::Arrow arrow = bubble_border_->arrow();
404 if (adjust_if_offscreen && BubbleBorder::has_arrow(arrow)) { 375 if (adjust_if_offscreen && BubbleBorder::has_arrow(arrow)) {
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after
504 const gfx::Size& client_size) const { 475 const gfx::Size& client_size) const {
505 // Accommodate the width of the title bar elements. 476 // Accommodate the width of the title bar elements.
506 int title_bar_width = title_margins_.width() + border()->GetInsets().width(); 477 int title_bar_width = title_margins_.width() + border()->GetInsets().width();
507 gfx::Size title_icon_size = title_icon_->GetPreferredSize(); 478 gfx::Size title_icon_size = title_icon_->GetPreferredSize();
508 gfx::Size title_label_size = title_->GetPreferredSize(); 479 gfx::Size title_label_size = title_->GetPreferredSize();
509 if (title_icon_size.width() > 0 && title_label_size.width() > 0) 480 if (title_icon_size.width() > 0 && title_label_size.width() > 0)
510 title_bar_width += kTitleHorizontalPadding; 481 title_bar_width += kTitleHorizontalPadding;
511 title_bar_width += title_icon_size.width(); 482 title_bar_width += title_icon_size.width();
512 if (close_->visible()) 483 if (close_->visible())
513 title_bar_width += close_->width() + 1; 484 title_bar_width += close_->width() + 1;
514 if (titlebar_extra_view_)
515 title_bar_width += titlebar_extra_view_->GetPreferredSize().width();
516 485
517 gfx::Size size(client_size); 486 gfx::Size size(client_size);
518 gfx::Insets client_insets = GetInsets(); 487 gfx::Insets client_insets = GetInsets();
519 size.Enlarge(client_insets.width(), client_insets.height()); 488 size.Enlarge(client_insets.width(), client_insets.height());
520 size.SetToMax(gfx::Size(title_bar_width, 0)); 489 size.SetToMax(gfx::Size(title_bar_width, 0));
521 490
522 if (footnote_container_) 491 if (footnote_container_)
523 size.Enlarge(0, footnote_container_->GetHeightForWidth(size.width())); 492 size.Enlarge(0, footnote_container_->GetHeightForWidth(size.width()));
524 493
525 return size; 494 return size;
526 } 495 }
527 496
528 } // namespace views 497 } // namespace views
OLDNEW
« no previous file with comments | « ui/views/bubble/bubble_frame_view.h ('k') | ui/views/examples/widget_example.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698