diff options
author | tanishka <109246904+taniishkaaa@users.noreply.github.com> | 2024-11-18 20:36:23 +0530 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-11-18 15:06:23 +0000 |
commit | 11dfbd6f90bc7bc8b8d7485695548b5ad685d0e1 (patch) | |
tree | c178cc0b350954d35acbdd3ab76e47058bdcc4d2 /components/layout_2020/positioned.rs | |
parent | 997b6411c034a3d8ea3d285e24cca982d4b4f3e8 (diff) | |
download | servo-11dfbd6f90bc7bc8b8d7485695548b5ad685d0e1.tar.gz servo-11dfbd6f90bc7bc8b8d7485695548b5ad685d0e1.zip |
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>
Diffstat (limited to 'components/layout_2020/positioned.rs')
-rw-r--r-- | components/layout_2020/positioned.rs | 16 |
1 files changed, 11 insertions, 5 deletions
diff --git a/components/layout_2020/positioned.rs b/components/layout_2020/positioned.rs index 72194636914..5a85733a603 100644 --- a/components/layout_2020/positioned.rs +++ b/components/layout_2020/positioned.rs @@ -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, } |