From 26e1f21bfe7ddcc181cba8326e832dd40d040fb8 Mon Sep 17 00:00:00 2001 From: Peter Kasting Date: Thu, 21 Apr 2022 21:18:51 +0000 Subject: [PATCH] Allow clicks on the user dropdown to open it. (cherry picked from commit 06b4aecbdfaa4df2629ce10237f3f58b15a62e71) Bug: 1315505 Change-Id: Ic4797122c6f446f4f24ed1707ecfa9dcf768e167 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3594208 Reviewed-by: Denis Kuznetsov Commit-Queue: Peter Kasting Cr-Original-Commit-Position: refs/heads/main@{#994134} Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/3600744 Auto-Submit: Peter Kasting Commit-Queue: Denis Kuznetsov Cr-Commit-Position: refs/branch-heads/5005@{#87} Cr-Branched-From: 5b4d9450fee01f821b6400e947b3839727643a71-refs/heads/main@{#992738} --- ash/login/ui/login_user_view.cc | 73 +++++++++++++++++--------------- ui/views/view_class_properties.h | 3 ++ 2 files changed, 43 insertions(+), 33 deletions(-) diff --git a/ash/login/ui/login_user_view.cc b/ash/login/ui/login_user_view.cc index c2631b7e8ab7f3..4e5657e9d933f4 100644 --- a/ash/login/ui/login_user_view.cc +++ b/ash/login/ui/login_user_view.cc @@ -39,6 +39,7 @@ #include "ui/views/controls/label.h" #include "ui/views/layout/box_layout.h" #include "ui/views/layout/fill_layout.h" +#include "ui/views/layout/table_layout.h" #include "ui/views/painter.h" #include "ui/views/view_class_properties.h" @@ -599,9 +600,14 @@ void LoginUserView::OnThemeChanged() { views::View::Views LoginUserView::GetChildrenInZOrder() { auto children = views::View::GetChildrenInZOrder(); - auto tap_button_iter = base::ranges::find(children, tap_button_); - DCHECK(tap_button_iter != children.end()); - std::rotate(tap_button_iter, tap_button_iter + 1, children.end()); + const auto move_child_to_top = [&](View* child) { + auto it = base::ranges::find(children, child); + DCHECK(it != children.end()); + std::rotate(it, it + 1, children.end()); + }; + move_child_to_top(tap_button_); + if (dropdown_) + move_child_to_top(dropdown_); return children; } @@ -704,41 +710,42 @@ void LoginUserView::UpdateOpacity() { } void LoginUserView::SetLargeLayout() { - SetLayoutManager(std::make_unique( - views::BoxLayout::Orientation::kVertical, gfx::Insets(), - kVerticalSpacingBetweenEntriesDp)); + auto* layout = SetLayoutManager(std::make_unique()); + layout + ->AddColumn(views::LayoutAlignment::kEnd, views::LayoutAlignment::kCenter, + 1.0f, views::TableLayout::ColumnSize::kUsePreferred, 0, 0) + .AddPaddingColumn(views::TableLayout::kFixedSize, + kDistanceBetweenUsernameAndDropdownDp) + .AddColumn(views::LayoutAlignment::kCenter, + views::LayoutAlignment::kCenter, + views::TableLayout::kFixedSize, + views::TableLayout::ColumnSize::kUsePreferred, 0, 0) + .AddPaddingColumn(views::TableLayout::kFixedSize, + kDistanceBetweenUsernameAndDropdownDp) + .AddColumn(views::LayoutAlignment::kStart, + views::LayoutAlignment::kCenter, 1.0f, + views::TableLayout::ColumnSize::kUsePreferred, 0, 0) + .AddRows(1, views::TableLayout::kFixedSize) + .AddPaddingRow(views::TableLayout::kFixedSize, + kVerticalSpacingBetweenEntriesDp) + .AddRows(1, views::TableLayout::kFixedSize); + AddChildView(tap_button_); - tap_button_->SetProperty(views::kViewIgnoredByLayoutKey, true); + layout->SetChildViewIgnoredByLayout(tap_button_, true); - // Centered user image. - auto* image_row = AddChildView(std::make_unique()); - auto* image_layout = - image_row->SetLayoutManager(std::make_unique()); - image_layout->set_main_axis_alignment( - views::BoxLayout::MainAxisAlignment::kCenter); - image_row->AddChildView(user_image_); - - // User name, menu dropdown. - auto* label_row = AddChildView(std::make_unique()); - auto* label_layout = - label_row->SetLayoutManager(std::make_unique()); - label_layout->set_between_child_spacing( - kDistanceBetweenUsernameAndDropdownDp); - label_layout->set_main_axis_alignment( - views::BoxLayout::MainAxisAlignment::kCenter); - - // Add an empty view that has the same size as the dropdown so we center on - // `user_label_`. This is simpler than doing manual size calculation to take - // into account the extra offset. - if (dropdown_) { - label_row->AddChildView(std::make_unique()) - ->SetPreferredSize(dropdown_->GetPreferredSize()); - } + AddChildView(user_image_); + user_image_->SetProperty(views::kTableColAndRowSpanKey, gfx::Size(5, 1)); + user_image_->SetProperty(views::kTableHorizAlignKey, + views::LayoutAlignment::kCenter); - label_row->AddChildView(user_label_); + auto* skip_column = AddChildView(std::make_unique()); + if (dropdown_) + skip_column->SetPreferredSize(dropdown_->GetPreferredSize()); + + AddChildView(user_label_); if (dropdown_) - label_row->AddChildView(dropdown_); + AddChildView(dropdown_); } void LoginUserView::SetSmallishLayout() { diff --git a/ui/views/view_class_properties.h b/ui/views/view_class_properties.h index c79253fe40041f..ddd046ef80b2bc 100644 --- a/ui/views/view_class_properties.h +++ b/ui/views/view_class_properties.h @@ -62,6 +62,9 @@ VIEWS_EXPORT extern const ui::ClassProperty* const kCrossAxisAlignmentKey; // TableLayout-specific properties: +// Note that col/row span counts padding columns, so if you want to span a +// region consisting of , it's a column span of +// 3, not 2. VIEWS_EXPORT extern const ui::ClassProperty* const kTableColAndRowSpanKey; VIEWS_EXPORT extern const ui::ClassProperty* const