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

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

Issue 1431303002: Make windows caption buttons look natural on windows 10 (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebased Created 4 years, 8 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 | « chrome/browser/ui/views/frame/opaque_browser_frame_view_layout.h ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/opaque_browser_frame_view_layout.h" 5 #include "chrome/browser/ui/views/frame/opaque_browser_frame_view_layout.h"
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #include "build/build_config.h" 8 #include "build/build_config.h"
9 #include "chrome/browser/profiles/profiles_state.h" 9 #include "chrome/browser/profiles/profiles_state.h"
10 #include "chrome/browser/ui/layout_constants.h" 10 #include "chrome/browser/ui/layout_constants.h"
11 #include "chrome/browser/ui/views/profiles/avatar_menu_button.h" 11 #include "chrome/browser/ui/views/profiles/avatar_menu_button.h"
12 #include "chrome/common/chrome_switches.h" 12 #include "chrome/common/chrome_switches.h"
13 #include "components/signin/core/common/profile_management_switches.h" 13 #include "components/signin/core/common/profile_management_switches.h"
14 #include "ui/base/material_design/material_design_controller.h" 14 #include "ui/base/material_design/material_design_controller.h"
15 #include "ui/gfx/font.h" 15 #include "ui/gfx/font.h"
16 #include "ui/views/controls/button/custom_button.h"
16 #include "ui/views/controls/button/image_button.h" 17 #include "ui/views/controls/button/image_button.h"
17 #include "ui/views/controls/label.h" 18 #include "ui/views/controls/label.h"
18 19
19 namespace { 20 namespace {
20 21
21 const int kCaptionButtonHeight = 18; 22 const int kCaptionButtonHeight = 18;
22 23
23 #if defined(OS_LINUX) && !defined(OS_CHROMEOS) 24 #if defined(OS_LINUX) && !defined(OS_CHROMEOS)
24 // Default extra space between the top of the frame and the top of the window 25 // Default extra space between the top of the frame and the top of the window
25 // caption buttons. 26 // caption buttons.
(...skipping 386 matching lines...) Expand 10 before | Expand all | Expand 10 after
412 switch (button_id) { 413 switch (button_id) {
413 case views::FRAME_BUTTON_MINIMIZE: { 414 case views::FRAME_BUTTON_MINIMIZE: {
414 minimize_button_->SetVisible(true); 415 minimize_button_->SetVisible(true);
415 SetBoundsForButton(host, minimize_button_, alignment, caption_y); 416 SetBoundsForButton(host, minimize_button_, alignment, caption_y);
416 break; 417 break;
417 } 418 }
418 case views::FRAME_BUTTON_MAXIMIZE: { 419 case views::FRAME_BUTTON_MAXIMIZE: {
419 // When the window is restored, we show a maximized button; otherwise, we 420 // When the window is restored, we show a maximized button; otherwise, we
420 // show a restore button. 421 // show a restore button.
421 bool is_restored = !delegate_->IsMaximized() && !delegate_->IsMinimized(); 422 bool is_restored = !delegate_->IsMaximized() && !delegate_->IsMinimized();
422 views::ImageButton* invisible_button = is_restored ? 423 views::CustomButton* invisible_button = is_restored ?
423 restore_button_ : maximize_button_; 424 restore_button_ : maximize_button_;
424 invisible_button->SetVisible(false); 425 invisible_button->SetVisible(false);
425 426
426 views::ImageButton* visible_button = is_restored ? 427 views::CustomButton* visible_button = is_restored ?
427 maximize_button_ : restore_button_; 428 maximize_button_ : restore_button_;
428 visible_button->SetVisible(true); 429 visible_button->SetVisible(true);
429 SetBoundsForButton(host, visible_button, alignment, caption_y); 430 SetBoundsForButton(host, visible_button, alignment, caption_y);
430 break; 431 break;
431 } 432 }
432 case views::FRAME_BUTTON_CLOSE: { 433 case views::FRAME_BUTTON_CLOSE: {
433 close_button_->SetVisible(true); 434 close_button_->SetVisible(true);
434 SetBoundsForButton(host, close_button_, alignment, caption_y); 435 SetBoundsForButton(host, close_button_, alignment, caption_y);
435 break; 436 break;
436 } 437 }
(...skipping 10 matching lines...) Expand all
447 maximize_button_->SetVisible(false); 448 maximize_button_->SetVisible(false);
448 break; 449 break;
449 case views::FRAME_BUTTON_CLOSE: 450 case views::FRAME_BUTTON_CLOSE:
450 close_button_->SetVisible(false); 451 close_button_->SetVisible(false);
451 break; 452 break;
452 } 453 }
453 } 454 }
454 455
455 void OpaqueBrowserFrameViewLayout::SetBoundsForButton( 456 void OpaqueBrowserFrameViewLayout::SetBoundsForButton(
456 views::View* host, 457 views::View* host,
457 views::ImageButton* button, 458 views::CustomButton* button,
458 ButtonAlignment alignment, 459 ButtonAlignment alignment,
459 int caption_y) { 460 int caption_y) {
460 gfx::Size button_size = button->GetPreferredSize(); 461 gfx::Size button_size = button->GetPreferredSize();
461 462
462 button->SetImageAlignment( 463 // If the custom button is actually an ImageButton, get a pointer so that
463 (alignment == ALIGN_LEADING) ? 464 // the image can be further configured.
464 views::ImageButton::ALIGN_RIGHT : views::ImageButton::ALIGN_LEFT, 465 views::ImageButton* image_button =
465 views::ImageButton::ALIGN_BOTTOM); 466 views::ImageButton::kViewClassName == button->GetClassName() ?
467 static_cast<views::ImageButton*>(button) : nullptr;
468
469 if (image_button) {
470 image_button->SetImageAlignment(
471 (alignment == ALIGN_LEADING) ?
472 views::ImageButton::ALIGN_RIGHT : views::ImageButton::ALIGN_LEFT,
473 views::ImageButton::ALIGN_BOTTOM);
474 }
466 475
467 // There should always be the same number of non-shadow pixels visible to the 476 // There should always be the same number of non-shadow pixels visible to the
468 // side of the caption buttons. In maximized mode we extend buttons to the 477 // side of the caption buttons. In maximized mode we extend buttons to the
469 // screen top and the rightmost button to the screen right (or leftmost button 478 // screen top and the rightmost button to the screen right (or leftmost button
470 // to the screen left, for left-aligned buttons) to obey Fitts' Law. 479 // to the screen left, for left-aligned buttons) to obey Fitts' Law.
471 bool title_bar_condensed = IsTitleBarCondensed(); 480 bool title_bar_condensed = IsTitleBarCondensed();
472 481
473 // When we are the first button on the leading side and are the close 482 if (image_button) {
474 // button, we must flip ourselves, because the close button assets have 483 // When we are the first button on the leading side and are the close
475 // a little notch to fit in the rounded frame. 484 // button, we must flip ourselves, because the close button assets have
476 button->SetDrawImageMirrored(alignment == ALIGN_LEADING && 485 // a little notch to fit in the rounded frame.
477 !has_leading_buttons_ && 486 image_button->SetDrawImageMirrored(
478 button == close_button_); 487 alignment == ALIGN_LEADING && !has_leading_buttons_ &&
488 button == close_button_);
489 }
490
479 // If the window is maximized, align the buttons to its upper edge. 491 // If the window is maximized, align the buttons to its upper edge.
480 int extra_height = title_bar_condensed ? extra_caption_y_ : 0; 492 int extra_height = title_bar_condensed ? extra_caption_y_ : 0;
481 493
482 switch (alignment) { 494 switch (alignment) {
483 case ALIGN_LEADING: { 495 case ALIGN_LEADING: {
484 if (has_leading_buttons_) 496 if (has_leading_buttons_)
485 leading_button_start_ += window_caption_spacing_; 497 leading_button_start_ += window_caption_spacing_;
486 498
487 // If we're the first button on the left and maximized, add width to the 499 // If we're the first button on the left and maximized, add width to the
488 // right hand side of the screen. 500 // right hand side of the screen.
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
527 } 539 }
528 540
529 void OpaqueBrowserFrameViewLayout::SetView(int id, views::View* view) { 541 void OpaqueBrowserFrameViewLayout::SetView(int id, views::View* view) {
530 // Why do things this way instead of having an Init() method, where we're 542 // Why do things this way instead of having an Init() method, where we're
531 // passed the views we'll handle? Because OpaqueBrowserFrameView doesn't own 543 // passed the views we'll handle? Because OpaqueBrowserFrameView doesn't own
532 // all the views which are part of it. The avatar stuff, for example, will be 544 // all the views which are part of it. The avatar stuff, for example, will be
533 // added and removed by the base class of OpaqueBrowserFrameView. 545 // added and removed by the base class of OpaqueBrowserFrameView.
534 switch (id) { 546 switch (id) {
535 case VIEW_ID_MINIMIZE_BUTTON: 547 case VIEW_ID_MINIMIZE_BUTTON:
536 if (view) { 548 if (view) {
537 DCHECK_EQ(std::string(views::ImageButton::kViewClassName), 549 minimize_button_ = views::CustomButton::AsCustomButton(view);
538 view->GetClassName()); 550 DCHECK(nullptr != minimize_button_);
551 } else {
552 minimize_button_ = nullptr;
539 } 553 }
540 minimize_button_ = static_cast<views::ImageButton*>(view);
541 break; 554 break;
542 case VIEW_ID_MAXIMIZE_BUTTON: 555 case VIEW_ID_MAXIMIZE_BUTTON:
543 if (view) { 556 if (view) {
544 DCHECK_EQ(std::string(views::ImageButton::kViewClassName), 557 maximize_button_ = views::CustomButton::AsCustomButton(view);
545 view->GetClassName()); 558 DCHECK(nullptr != maximize_button_);
559 } else {
560 maximize_button_ = nullptr;
546 } 561 }
547 maximize_button_ = static_cast<views::ImageButton*>(view);
548 break; 562 break;
549 case VIEW_ID_RESTORE_BUTTON: 563 case VIEW_ID_RESTORE_BUTTON:
550 if (view) { 564 if (view) {
551 DCHECK_EQ(std::string(views::ImageButton::kViewClassName), 565 restore_button_ = views::CustomButton::AsCustomButton(view);
552 view->GetClassName()); 566 DCHECK(nullptr != restore_button_);
567 } else {
568 restore_button_ = nullptr;
553 } 569 }
554 restore_button_ = static_cast<views::ImageButton*>(view);
555 break; 570 break;
556 case VIEW_ID_CLOSE_BUTTON: 571 case VIEW_ID_CLOSE_BUTTON:
557 if (view) { 572 if (view) {
558 DCHECK_EQ(std::string(views::ImageButton::kViewClassName), 573 close_button_ = views::CustomButton::AsCustomButton(view);
559 view->GetClassName()); 574 DCHECK(nullptr != close_button_);
575 } else {
576 close_button_ = nullptr;
560 } 577 }
561 close_button_ = static_cast<views::ImageButton*>(view);
562 break; 578 break;
563 case VIEW_ID_WINDOW_ICON: 579 case VIEW_ID_WINDOW_ICON:
564 window_icon_ = view; 580 window_icon_ = view;
565 break; 581 break;
566 case VIEW_ID_WINDOW_TITLE: 582 case VIEW_ID_WINDOW_TITLE:
567 if (view) { 583 if (view) {
568 DCHECK_EQ(std::string(views::Label::kViewClassName), 584 DCHECK_EQ(std::string(views::Label::kViewClassName),
569 view->GetClassName()); 585 view->GetClassName());
570 } 586 }
571 window_title_ = static_cast<views::Label*>(view); 587 window_title_ = static_cast<views::Label*>(view);
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
619 635
620 void OpaqueBrowserFrameViewLayout::ViewAdded(views::View* host, 636 void OpaqueBrowserFrameViewLayout::ViewAdded(views::View* host,
621 views::View* view) { 637 views::View* view) {
622 SetView(view->id(), view); 638 SetView(view->id(), view);
623 } 639 }
624 640
625 void OpaqueBrowserFrameViewLayout::ViewRemoved(views::View* host, 641 void OpaqueBrowserFrameViewLayout::ViewRemoved(views::View* host,
626 views::View* view) { 642 views::View* view) {
627 SetView(view->id(), nullptr); 643 SetView(view->id(), nullptr);
628 } 644 }
OLDNEW
« no previous file with comments | « chrome/browser/ui/views/frame/opaque_browser_frame_view_layout.h ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698