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:

committed by
Chromium LUCI CQ

parent
791b4fd52e
commit
1b82e230fa
ash
@ -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;
|
||||
}
|
||||
|
Reference in New Issue
Block a user