aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimon Sapin <simon.sapin@exyr.org>2019-12-08 01:02:27 +0100
committerSimon Sapin <simon.sapin@exyr.org>2019-12-10 15:11:53 +0100
commitc07c9805010f3b62c571485ca579b3d23623ea69 (patch)
tree23db40bdd9a79c6e33d70886fc369a4fbee5e985
parent1fa20e93d038c1c905bfd6ca6af6b96c6138849d (diff)
downloadservo-c07c9805010f3b62c571485ca579b3d23623ea69.tar.gz
servo-c07c9805010f3b62c571485ca579b3d23623ea69.zip
Delayed initialization over mutation
-rw-r--r--components/layout_2020/positioned.rs29
1 files changed, 18 insertions, 11 deletions
diff --git a/components/layout_2020/positioned.rs b/components/layout_2020/positioned.rs
index 12ebf24c62e..c327b23924b 100644
--- a/components/layout_2020/positioned.rs
+++ b/components/layout_2020/positioned.rs
@@ -235,11 +235,12 @@ impl<'a> AbsolutelyPositionedFragment<'a> {
let start = start.percentage_relative_to(containing_size);
let end = end.percentage_relative_to(containing_size);
- let mut margin_start = computed_margin_start.auto_is(Length::zero);
- let mut margin_end = computed_margin_end.auto_is(Length::zero);
-
- let size = if let LengthOrAuto::LengthPercentage(size) = size {
- let margins = containing_size - start - end - padding_border_sum - size;
+ let margin_start;
+ let margin_end;
+ let used_size;
+ if let LengthOrAuto::LengthPercentage(s) = size {
+ used_size = s;
+ let margins = containing_size - start - end - padding_border_sum - s;
match (computed_margin_start, computed_margin_end) {
(LengthOrAuto::Auto, LengthOrAuto::Auto) => {
let (s, e) = solve_margins(margins);
@@ -248,19 +249,25 @@ impl<'a> AbsolutelyPositionedFragment<'a> {
},
(LengthOrAuto::Auto, LengthOrAuto::LengthPercentage(end)) => {
margin_start = margins - end;
+ margin_end = end;
},
(LengthOrAuto::LengthPercentage(start), LengthOrAuto::Auto) => {
+ margin_start = start;
margin_end = margins - start;
},
(
- LengthOrAuto::LengthPercentage(_),
- LengthOrAuto::LengthPercentage(_),
- ) => {},
+ LengthOrAuto::LengthPercentage(start),
+ LengthOrAuto::LengthPercentage(end),
+ ) => {
+ margin_start = start;
+ margin_end = end;
+ },
}
- size
} else {
+ margin_start = computed_margin_start.auto_is(Length::zero);
+ margin_end = computed_margin_end.auto_is(Length::zero);
// FIXME(nox): What happens if that is negative?
- containing_size -
+ used_size = containing_size -
start -
end -
padding_border_sum -
@@ -269,7 +276,7 @@ impl<'a> AbsolutelyPositionedFragment<'a> {
};
(
Anchor::Start(start),
- LengthOrAuto::LengthPercentage(size),
+ LengthOrAuto::LengthPercentage(used_size),
margin_start,
margin_end,
)