aboutsummaryrefslogtreecommitdiffstats
path: root/components/layout
diff options
context:
space:
mode:
Diffstat (limited to 'components/layout')
-rw-r--r--components/layout/block.rs22
-rw-r--r--components/layout/flex.rs12
-rw-r--r--components/layout/model.rs13
3 files changed, 24 insertions, 23 deletions
diff --git a/components/layout/block.rs b/components/layout/block.rs
index db74ab64074..7bbeb7a79ee 100644
--- a/components/layout/block.rs
+++ b/components/layout/block.rs
@@ -325,22 +325,20 @@ impl CandidateBSizeIterator {
(LengthOrPercentageOrAuto::Percentage(percent), Some(block_container_block_size)) => {
MaybeAuto::Specified(block_container_block_size.scale_by(percent))
}
- (LengthOrPercentageOrAuto::Calc(calc), Some(block_container_block_size)) => {
- MaybeAuto::Specified(calc.length() + block_container_block_size.scale_by(calc.percentage()))
+ (LengthOrPercentageOrAuto::Calc(calc), _) => {
+ MaybeAuto::from_option(calc.to_computed(block_container_block_size))
}
(LengthOrPercentageOrAuto::Percentage(_), None) |
- (LengthOrPercentageOrAuto::Auto, _) |
- (LengthOrPercentageOrAuto::Calc(_), _) => MaybeAuto::Auto,
+ (LengthOrPercentageOrAuto::Auto, _) => MaybeAuto::Auto,
(LengthOrPercentageOrAuto::Length(length), _) => MaybeAuto::Specified(length),
};
let max_block_size = match (fragment.style.max_block_size(), block_container_block_size) {
(LengthOrPercentageOrNone::Percentage(percent), Some(block_container_block_size)) => {
Some(block_container_block_size.scale_by(percent))
}
- (LengthOrPercentageOrNone::Calc(calc), Some(block_container_block_size)) => {
- Some(block_container_block_size.scale_by(calc.percentage()) + calc.length())
+ (LengthOrPercentageOrNone::Calc(calc), _) => {
+ calc.to_computed(block_container_block_size)
}
- (LengthOrPercentageOrNone::Calc(_), _) |
(LengthOrPercentageOrNone::Percentage(_), None) |
(LengthOrPercentageOrNone::None, _) => None,
(LengthOrPercentageOrNone::Length(length), _) => Some(length),
@@ -349,10 +347,9 @@ impl CandidateBSizeIterator {
(LengthOrPercentage::Percentage(percent), Some(block_container_block_size)) => {
block_container_block_size.scale_by(percent)
}
- (LengthOrPercentage::Calc(calc), Some(block_container_block_size)) => {
- calc.length() + block_container_block_size.scale_by(calc.percentage())
+ (LengthOrPercentage::Calc(calc), _) => {
+ calc.to_computed(block_container_block_size).unwrap_or(Au(0))
}
- (LengthOrPercentage::Calc(calc), None) => calc.length(),
(LengthOrPercentage::Percentage(_), None) => Au(0),
(LengthOrPercentage::Length(length), _) => length,
};
@@ -1169,15 +1166,14 @@ impl BlockFlow {
let content_block_size = self.fragment.style().content_block_size();
match (content_block_size, containing_block_size) {
- (LengthOrPercentageOrAuto::Calc(calc), Some(container_size)) => {
- Some(container_size.scale_by(calc.percentage()) + calc.length())
+ (LengthOrPercentageOrAuto::Calc(calc), _) => {
+ calc.to_computed(containing_block_size)
}
(LengthOrPercentageOrAuto::Length(length), _) => Some(length),
(LengthOrPercentageOrAuto::Percentage(percent), Some(container_size)) => {
Some(container_size.scale_by(percent))
}
(LengthOrPercentageOrAuto::Percentage(_), None) |
- (LengthOrPercentageOrAuto::Calc(_), None) |
(LengthOrPercentageOrAuto::Auto, None) => {
None
}
diff --git a/components/layout/flex.rs b/components/layout/flex.rs
index 5fd9459ab02..cf77455afa8 100644
--- a/components/layout/flex.rs
+++ b/components/layout/flex.rs
@@ -53,9 +53,9 @@ impl AxisSize {
}
}
LengthOrPercentageOrAuto::Calc(calc) => {
- match content_size {
- Some(size) => AxisSize::Definite(size.scale_by(calc.percentage())),
- None => AxisSize::Infinite
+ match calc.to_computed(content_size) {
+ Some(length) => AxisSize::Definite(length),
+ None => AxisSize::Infinite,
}
}
LengthOrPercentageOrAuto::Auto => {
@@ -79,10 +79,8 @@ fn from_flex_basis(flex_basis: LengthOrPercentageOrAutoOrContent,
MaybeAuto::Specified(size.scale_by(percent)),
(LengthOrPercentageOrAutoOrContent::Percentage(_), None) =>
MaybeAuto::Auto,
- (LengthOrPercentageOrAutoOrContent::Calc(calc), Some(size)) =>
- MaybeAuto::Specified(calc.length() + size.scale_by(calc.percentage())),
- (LengthOrPercentageOrAutoOrContent::Calc(_), None) =>
- MaybeAuto::Auto,
+ (LengthOrPercentageOrAutoOrContent::Calc(calc), _) =>
+ MaybeAuto::from_option(calc.to_computed(containing_length)),
(LengthOrPercentageOrAutoOrContent::Content, _) =>
MaybeAuto::Auto,
(LengthOrPercentageOrAutoOrContent::Auto, Some(size)) =>
diff --git a/components/layout/model.rs b/components/layout/model.rs
index 8382c9af7d0..a6d64e557ac 100644
--- a/components/layout/model.rs
+++ b/components/layout/model.rs
@@ -408,13 +408,21 @@ impl MaybeAuto {
MaybeAuto::Specified(containing_length.scale_by(percent))
}
LengthOrPercentageOrAuto::Calc(calc) => {
- MaybeAuto::Specified(calc.length() + containing_length.scale_by(calc.percentage()))
+ MaybeAuto::from_option(calc.to_computed(Some(containing_length)))
}
LengthOrPercentageOrAuto::Length(length) => MaybeAuto::Specified(length)
}
}
#[inline]
+ pub fn from_option(au: Option<Au>) -> MaybeAuto {
+ match au {
+ Some(l) => MaybeAuto::Specified(l),
+ _ => MaybeAuto::Auto,
+ }
+ }
+
+ #[inline]
pub fn specified_or_default(&self, default: Au) -> Au {
match *self {
MaybeAuto::Auto => default,
@@ -455,8 +463,7 @@ pub fn specified_or_none(length: LengthOrPercentageOrNone, containing_length: Au
match length {
LengthOrPercentageOrNone::None => None,
LengthOrPercentageOrNone::Percentage(percent) => Some(containing_length.scale_by(percent)),
- LengthOrPercentageOrNone::Calc(calc) =>
- Some(containing_length.scale_by(calc.percentage()) + calc.length()),
+ LengthOrPercentageOrNone::Calc(calc) => calc.to_computed(Some(containing_length)),
LengthOrPercentageOrNone::Length(length) => Some(length),
}
}