layout: Use Size::FitContent when the alignment isn't normal or stretch for absolutely positioned elements (#34264)

* layout: Use Size::FitContent when the alignment isn't normal or stretch

Signed-off-by: taniishkaaa <tanishkasingh2004@gmail.com>

* Use unwrap_or_default()

Signed-off-by: taniishkaaa <tanishkasingh2004@gmail.com>

* Use self.alignment.value()

Signed-off-by: taniishkaaa <tanishkasingh2004@gmail.com>

* Refactor used_size to handle non-definite sizes

Signed-off-by: taniishkaaa <tanishkasingh2004@gmail.com>

* Include AlignFlags::Auto

Signed-off-by: taniishkaaa <tanishkasingh2004@gmail.com>

* Update test expectations

Signed-off-by: taniishkaaa <tanishkasingh2004@gmail.com>

---------

Signed-off-by: taniishkaaa <tanishkasingh2004@gmail.com>
This commit is contained in:
tanishka 2024-11-18 20:36:23 +05:30 committed by GitHub
parent 997b6411c0
commit 11dfbd6f90
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
25 changed files with 23 additions and 593 deletions

View file

@ -846,10 +846,16 @@ impl<'a> AbsoluteAxisSolver<'a> {
let stretch_size = free_space -
self.computed_margin_start.auto_is(Au::zero) -
self.computed_margin_end.auto_is(Au::zero);
let used_size = solve_size(Size::Stretch, stretch_size)
.to_definite()
.unwrap();
free_space -= used_size;
let initial_behavior = match self.alignment.value() {
AlignFlags::STRETCH | AlignFlags::NORMAL | AlignFlags::AUTO => Size::Stretch,
_ => Size::FitContent,
};
let size = solve_size(initial_behavior, stretch_size);
if let Some(used_size) = size.to_definite() {
free_space -= used_size;
} else {
free_space = Au::zero();
}
let (margin_start, margin_end) =
match (self.computed_margin_start, self.computed_margin_end) {
(AuOrAuto::Auto, AuOrAuto::Auto) => {
@ -872,7 +878,7 @@ impl<'a> AbsoluteAxisSolver<'a> {
};
AxisResult {
anchor: Anchor::Start(start),
size: SizeConstraint::Definite(used_size),
size,
margin_start,
margin_end,
}