OLD | NEW |
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/gfx/font.h" | 14 #include "ui/gfx/font.h" |
15 #include "ui/views/controls/button/image_button.h" | 15 #include "ui/views/controls/button/image_button.h" |
16 #include "ui/views/controls/label.h" | 16 #include "ui/views/controls/label.h" |
17 | 17 |
18 #if defined(ENABLE_SUPERVISED_USERS) | |
19 #include "chrome/browser/ui/views/profiles/supervised_user_avatar_label.h" | |
20 #endif | |
21 | |
22 namespace { | 18 namespace { |
23 | 19 |
24 // Besides the frame border, there's empty space atop the window in restored | 20 // Besides the frame border, there's empty space atop the window in restored |
25 // mode, to use to drag the window around. | 21 // mode, to use to drag the window around. |
26 const int kNonClientRestoredExtraThickness = 11; | 22 const int kNonClientRestoredExtraThickness = 11; |
27 | 23 |
28 // The titlebar never shrinks too short to show the caption button plus some | 24 // The titlebar never shrinks too short to show the caption button plus some |
29 // padding below it. | 25 // padding below it. |
30 const int kCaptionButtonHeight = 18; | 26 const int kCaptionButtonHeight = 18; |
31 const int kTitleBarAdditionalPadding = 3; | 27 const int kTitleBarAdditionalPadding = 3; |
(...skipping 18 matching lines...) Expand all Loading... |
50 // way the tabstrip draws its bottom edge, will appear like a 1 px gap to the | 46 // way the tabstrip draws its bottom edge, will appear like a 1 px gap to the |
51 // user). | 47 // user). |
52 const int kAvatarBottomSpacing = 2; | 48 const int kAvatarBottomSpacing = 2; |
53 | 49 |
54 // Space between the frame border and the edge of the avatar. | 50 // Space between the frame border and the edge of the avatar. |
55 const int kAvatarOuterSpacing = 2; | 51 const int kAvatarOuterSpacing = 2; |
56 | 52 |
57 // Space between the edge of the avatar and the tabstrip. | 53 // Space between the edge of the avatar and the tabstrip. |
58 const int kAvatarInnerSpacing = 4; | 54 const int kAvatarInnerSpacing = 4; |
59 | 55 |
60 #if defined(ENABLE_SUPERVISED_USERS) | |
61 // Space between the trailing edge of the avatar label and the tabstrip. | |
62 const int kSupervisedUserAvatarLabelInnerSpacing = 10; | |
63 #endif | |
64 | |
65 // How far the new avatar button is from the closest caption button. | 56 // How far the new avatar button is from the closest caption button. |
66 const int kNewAvatarButtonOffset = 5; | 57 const int kNewAvatarButtonOffset = 5; |
67 | 58 |
68 // When the title bar is in its normal two row mode (usually the case for | 59 // When the title bar is in its normal two row mode (usually the case for |
69 // restored windows), the New Tab button isn't at the same height as the caption | 60 // restored windows), the New Tab button isn't at the same height as the caption |
70 // buttons, but the space will look cluttered if it actually slides under them, | 61 // buttons, but the space will look cluttered if it actually slides under them, |
71 // so we stop it when the gap between the two is down to 5 px. | 62 // so we stop it when the gap between the two is down to 5 px. |
72 const int kNewTabCaptionNormalSpacing = 5; | 63 const int kNewTabCaptionNormalSpacing = 5; |
73 | 64 |
74 // When the title bar is condensed to one row (as when maximized), the New Tab | 65 // When the title bar is condensed to one row (as when maximized), the New Tab |
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
115 has_leading_buttons_(false), | 106 has_leading_buttons_(false), |
116 has_trailing_buttons_(false), | 107 has_trailing_buttons_(false), |
117 extra_caption_y_(kExtraCaption), | 108 extra_caption_y_(kExtraCaption), |
118 window_caption_spacing_(kCaptionButtonSpacing), | 109 window_caption_spacing_(kCaptionButtonSpacing), |
119 minimize_button_(nullptr), | 110 minimize_button_(nullptr), |
120 maximize_button_(nullptr), | 111 maximize_button_(nullptr), |
121 restore_button_(nullptr), | 112 restore_button_(nullptr), |
122 close_button_(nullptr), | 113 close_button_(nullptr), |
123 window_icon_(nullptr), | 114 window_icon_(nullptr), |
124 window_title_(nullptr), | 115 window_title_(nullptr), |
125 #if defined(ENABLE_SUPERVISED_USERS) | |
126 supervised_user_avatar_label_(nullptr), | |
127 #endif | |
128 avatar_button_(nullptr), | 116 avatar_button_(nullptr), |
129 new_avatar_button_(nullptr) { | 117 new_avatar_button_(nullptr) { |
130 trailing_buttons_.push_back(views::FRAME_BUTTON_MINIMIZE); | 118 trailing_buttons_.push_back(views::FRAME_BUTTON_MINIMIZE); |
131 trailing_buttons_.push_back(views::FRAME_BUTTON_MAXIMIZE); | 119 trailing_buttons_.push_back(views::FRAME_BUTTON_MAXIMIZE); |
132 trailing_buttons_.push_back(views::FRAME_BUTTON_CLOSE); | 120 trailing_buttons_.push_back(views::FRAME_BUTTON_CLOSE); |
133 } | 121 } |
134 | 122 |
135 OpaqueBrowserFrameViewLayout::~OpaqueBrowserFrameViewLayout() {} | 123 OpaqueBrowserFrameViewLayout::~OpaqueBrowserFrameViewLayout() {} |
136 | 124 |
137 void OpaqueBrowserFrameViewLayout::SetButtonOrdering( | 125 void OpaqueBrowserFrameViewLayout::SetButtonOrdering( |
138 const std::vector<views::FrameButton>& leading_buttons, | 126 const std::vector<views::FrameButton>& leading_buttons, |
139 const std::vector<views::FrameButton>& trailing_buttons) { | 127 const std::vector<views::FrameButton>& trailing_buttons) { |
140 leading_buttons_ = leading_buttons; | 128 leading_buttons_ = leading_buttons; |
141 trailing_buttons_ = trailing_buttons; | 129 trailing_buttons_ = trailing_buttons; |
142 } | 130 } |
143 | 131 |
144 gfx::Rect OpaqueBrowserFrameViewLayout::GetBoundsForTabStrip( | 132 gfx::Rect OpaqueBrowserFrameViewLayout::GetBoundsForTabStrip( |
145 const gfx::Size& tabstrip_preferred_size, | 133 const gfx::Size& tabstrip_preferred_size, |
146 int available_width) const { | 134 int available_width) const { |
147 available_width -= trailing_button_start_; | 135 available_width -= trailing_button_start_; |
148 available_width -= leading_button_start_; | 136 available_width -= leading_button_start_; |
149 | 137 |
150 const int caption_spacing = NewTabCaptionSpacing(); | 138 const int caption_spacing = NewTabCaptionSpacing(); |
151 const int tabstrip_width = available_width - caption_spacing; | 139 const int tabstrip_width = available_width - caption_spacing; |
152 gfx::Rect bounds(leading_button_start_, GetTabStripInsetsTop(false), | 140 gfx::Rect bounds(leading_button_start_, GetTabStripInsetsTop(false), |
153 std::max(0, tabstrip_width), | 141 std::max(0, tabstrip_width), |
154 tabstrip_preferred_size.height()); | 142 tabstrip_preferred_size.height()); |
155 | 143 |
156 int leading_tabstrip_indent = kTabStripIndent; | 144 int leading_tabstrip_indent = kTabStripIndent; |
157 if (delegate_->ShouldShowAvatar() && !ShouldAvatarBeOnRight()) { | 145 if (delegate_->ShouldShowAvatar() && !ShouldAvatarBeOnRight()) |
158 #if defined(ENABLE_SUPERVISED_USERS) | |
159 if (supervised_user_avatar_label_ && | |
160 supervised_user_avatar_label_->bounds().width()) | |
161 leading_tabstrip_indent += kSupervisedUserAvatarLabelInnerSpacing; | |
162 else | |
163 leading_tabstrip_indent += kAvatarInnerSpacing; | |
164 #else | |
165 leading_tabstrip_indent += kAvatarInnerSpacing; | 146 leading_tabstrip_indent += kAvatarInnerSpacing; |
166 #endif | |
167 } | |
168 bounds.Inset(leading_tabstrip_indent, 0, 0, 0); | 147 bounds.Inset(leading_tabstrip_indent, 0, 0, 0); |
169 return bounds; | 148 return bounds; |
170 } | 149 } |
171 | 150 |
172 gfx::Size OpaqueBrowserFrameViewLayout::GetMinimumSize( | 151 gfx::Size OpaqueBrowserFrameViewLayout::GetMinimumSize( |
173 int available_width) const { | 152 int available_width) const { |
174 gfx::Size min_size = delegate_->GetBrowserViewMinimumSize(); | 153 gfx::Size min_size = delegate_->GetBrowserViewMinimumSize(); |
175 int border_thickness = NonClientBorderThickness(); | 154 int border_thickness = NonClientBorderThickness(); |
176 min_size.Enlarge(2 * border_thickness, | 155 min_size.Enlarge(2 * border_thickness, |
177 NonClientTopBorderHeight(false) + border_thickness); | 156 NonClientTopBorderHeight(false) + border_thickness); |
(...skipping 264 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
442 avatar_restored_y; | 421 avatar_restored_y; |
443 avatar_bounds_.SetRect( | 422 avatar_bounds_.SetRect( |
444 avatar_x, | 423 avatar_x, |
445 avatar_y, | 424 avatar_y, |
446 incognito_icon.width(), | 425 incognito_icon.width(), |
447 delegate_->ShouldShowAvatar() ? (avatar_bottom - avatar_y) : 0); | 426 delegate_->ShouldShowAvatar() ? (avatar_bottom - avatar_y) : 0); |
448 if (avatar_button_) { | 427 if (avatar_button_) { |
449 avatar_button_->set_button_on_right(avatar_on_right); | 428 avatar_button_->set_button_on_right(avatar_on_right); |
450 avatar_button_->SetBoundsRect(avatar_bounds_); | 429 avatar_button_->SetBoundsRect(avatar_bounds_); |
451 | 430 |
452 int edge_offset; | 431 int edge_offset = kAvatarOuterSpacing + incognito_icon.width(); |
453 #if defined(ENABLE_SUPERVISED_USERS) | |
454 if (supervised_user_avatar_label_) { | |
455 supervised_user_avatar_label_->SetLabelOnRight(avatar_on_right); | |
456 // Space between the bottom of the avatar and the bottom of the avatar | |
457 // label. | |
458 const int kSupervisedUserAvatarLabelBottomSpacing = 3; | |
459 gfx::Size label_size = supervised_user_avatar_label_->GetPreferredSize(); | |
460 // The outside edge of the avatar label should be just outside that of the | |
461 // avatar menu button. | |
462 int avatar_label_x = avatar_on_right ? | |
463 (host->width() - trailing_button_start_ - label_size.width()) : | |
464 leading_button_start_; | |
465 gfx::Rect label_bounds( | |
466 avatar_label_x, | |
467 avatar_bottom - kSupervisedUserAvatarLabelBottomSpacing - | |
468 label_size.height(), | |
469 label_size.width(), | |
470 delegate_->ShouldShowAvatar() ? label_size.height() : 0); | |
471 supervised_user_avatar_label_->SetBoundsRect(label_bounds); | |
472 edge_offset = label_size.width(); | |
473 } else { | |
474 edge_offset = kAvatarOuterSpacing + incognito_icon.width(); | |
475 } | |
476 #else | |
477 edge_offset = kAvatarOuterSpacing + incognito_icon.width(); | |
478 #endif | |
479 if (avatar_on_right) | 432 if (avatar_on_right) |
480 trailing_button_start_ += edge_offset; | 433 trailing_button_start_ += edge_offset; |
481 else | 434 else |
482 leading_button_start_ += edge_offset; | 435 leading_button_start_ += edge_offset; |
483 | 436 |
484 // We just add the avatar button size to the minimum size because clicking | 437 // We just add the avatar button size to the minimum size because clicking |
485 // the avatar label does the same thing as clicking the avatar button. | 438 // the avatar label does the same thing as clicking the avatar button. |
486 minimum_size_for_buttons_ += kAvatarOuterSpacing + incognito_icon.width(); | 439 minimum_size_for_buttons_ += kAvatarOuterSpacing + incognito_icon.width(); |
487 } | 440 } |
488 } | 441 } |
(...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
646 case VIEW_ID_WINDOW_ICON: | 599 case VIEW_ID_WINDOW_ICON: |
647 window_icon_ = view; | 600 window_icon_ = view; |
648 break; | 601 break; |
649 case VIEW_ID_WINDOW_TITLE: | 602 case VIEW_ID_WINDOW_TITLE: |
650 if (view) { | 603 if (view) { |
651 DCHECK_EQ(std::string(views::Label::kViewClassName), | 604 DCHECK_EQ(std::string(views::Label::kViewClassName), |
652 view->GetClassName()); | 605 view->GetClassName()); |
653 } | 606 } |
654 window_title_ = static_cast<views::Label*>(view); | 607 window_title_ = static_cast<views::Label*>(view); |
655 break; | 608 break; |
656 #if defined(ENABLE_SUPERVISED_USERS) | |
657 case VIEW_ID_SUPERVISED_USER_AVATAR_LABEL: | |
658 supervised_user_avatar_label_ = | |
659 static_cast<SupervisedUserAvatarLabel*>(view); | |
660 break; | |
661 #endif | |
662 case VIEW_ID_AVATAR_BUTTON: | 609 case VIEW_ID_AVATAR_BUTTON: |
663 if (view) { | 610 if (view) { |
664 DCHECK_EQ(std::string(AvatarMenuButton::kViewClassName), | 611 DCHECK_EQ(std::string(AvatarMenuButton::kViewClassName), |
665 view->GetClassName()); | 612 view->GetClassName()); |
666 } | 613 } |
667 avatar_button_ = static_cast<AvatarMenuButton*>(view); | 614 avatar_button_ = static_cast<AvatarMenuButton*>(view); |
668 break; | 615 break; |
669 case VIEW_ID_NEW_AVATAR_BUTTON: | 616 case VIEW_ID_NEW_AVATAR_BUTTON: |
670 new_avatar_button_ = view; | 617 new_avatar_button_ = view; |
671 break; | 618 break; |
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
714 | 661 |
715 void OpaqueBrowserFrameViewLayout::ViewAdded(views::View* host, | 662 void OpaqueBrowserFrameViewLayout::ViewAdded(views::View* host, |
716 views::View* view) { | 663 views::View* view) { |
717 SetView(view->id(), view); | 664 SetView(view->id(), view); |
718 } | 665 } |
719 | 666 |
720 void OpaqueBrowserFrameViewLayout::ViewRemoved(views::View* host, | 667 void OpaqueBrowserFrameViewLayout::ViewRemoved(views::View* host, |
721 views::View* view) { | 668 views::View* view) { |
722 SetView(view->id(), nullptr); | 669 SetView(view->id(), nullptr); |
723 } | 670 } |
OLD | NEW |