0

Label: Use GetPreferredSize(SizeBounds) in ['/ash/hud_display', '/ash']

GetPreferredSize() considers the currently available layout space to be
unlimited. However, for some views (eg: label), their preferred size is
strongly related to the currently available space, which leads us to
need to use GetPreferredSize() + GeHeightForWidth(), which results in
two layout calculations. It also resulted in some errors that could not
be repaired, eg: 41295639.

In the end we chose to use GetPreferredSize(SizeBounds) to solve these
problems. There is also the concept of constraint space in Blink
LayoutNG.

This CL was uploaded by git cl split.

R=jamescook@chromium.org

Bug: 40232718
Change-Id: I0c3e2103e3029d2a71ac30a6d79eef91dfd7ad9a
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/5427851
Reviewed-by: James Cook <jamescook@chromium.org>
Auto-Submit: Weidong Liu <weidongliu@chromium.org>
Commit-Queue: James Cook <jamescook@chromium.org>
Cr-Commit-Position: refs/heads/main@{#1283237}
This commit is contained in:
weidongliu
2024-04-05 17:51:31 +00:00
committed by Chromium LUCI CQ
parent 791b4fd52e
commit 1b82e230fa
3 changed files with 16 additions and 7 deletions

@ -340,7 +340,8 @@ void AnimationSpeedControl::Layout(PassKey) {
gfx::Size max_size;
// Make all labels equal size.
for (const views::View* label : hints_container_->children()) {
max_size.SetToMax(label->GetPreferredSize());
max_size.SetToMax(
label->GetPreferredSize(views::SizeBounds(label->width(), {})));
}
for (views::View* label : hints_container_->children()) {

@ -89,9 +89,12 @@ ReferenceLines::~ReferenceLines() = default;
void ReferenceLines::Layout(PassKey) {
// Align all the right labels on their left edge.
gfx::Size right_top_label_size = right_top_label_->GetPreferredSize();
gfx::Size right_middle_label_size = right_middle_label_->GetPreferredSize();
gfx::Size right_bottom_label_size = right_bottom_label_->GetPreferredSize();
gfx::Size right_top_label_size = right_top_label_->GetPreferredSize(
views::SizeBounds(right_top_label_->width(), {}));
gfx::Size right_middle_label_size = right_middle_label_->GetPreferredSize(
views::SizeBounds(right_middle_label_->width(), {}));
gfx::Size right_bottom_label_size = right_bottom_label_->GetPreferredSize(
views::SizeBounds(right_bottom_label_->width(), {}));
const int right_labels_width = std::max(
right_top_label_size.width(), std::max(right_middle_label_size.width(),
@ -104,7 +107,8 @@ void ReferenceLines::Layout(PassKey) {
right_middle_label_->SetSize(right_middle_label_size);
right_bottom_label_->SetSize(right_bottom_label_size);
left_bottom_label_->SetSize(left_bottom_label_->GetPreferredSize());
left_bottom_label_->SetSize(left_bottom_label_->GetPreferredSize(
views::SizeBounds(left_bottom_label_->width(), {})));
constexpr int label_border = 3; // Offset to labels from the reference lines.
@ -124,7 +128,10 @@ void ReferenceLines::Layout(PassKey) {
left_bottom_label_->SetPosition(
{label_border, bounds().height() -
left_bottom_label_->GetPreferredSize().height() -
left_bottom_label_
->GetPreferredSize(views::SizeBounds(
left_bottom_label_->width(), {}))
.height() -
label_border});
LayoutSuperclass<views::View>(this);

@ -86,7 +86,8 @@ void ImeModeIndicatorView::OnBeforeBubbleWidgetInit(
}
gfx::Size ImeModeIndicatorView::CalculatePreferredSize() const {
gfx::Size size = label_view_->GetPreferredSize();
gfx::Size size = label_view_->GetPreferredSize(
views::SizeBounds(label_view_->width(), {}));
size.SetToMax(gfx::Size(kMinSize, kMinSize));
return size;
}