summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/geom/length.rs7
-rw-r--r--src/layout/pad.rs4
2 files changed, 10 insertions, 1 deletions
diff --git a/src/geom/length.rs b/src/geom/length.rs
index d0f11bd2..de184e6c 100644
--- a/src/geom/length.rs
+++ b/src/geom/length.rs
@@ -126,6 +126,13 @@ impl Length {
pub fn approx_eq(self, other: Self) -> bool {
self == other || (self - other).to_raw().abs() < 1e-6
}
+
+ /// Perform a checked division by a number, returning `None` if the result
+ /// is not finite.
+ pub fn div_finite(self, number: f64) -> Option<Self> {
+ let result = self.to_raw() / number;
+ result.is_finite().then(|| Self::raw(result))
+ }
}
impl Debug for Length {
diff --git a/src/layout/pad.rs b/src/layout/pad.rs
index 55c11e45..52766dfa 100644
--- a/src/layout/pad.rs
+++ b/src/layout/pad.rs
@@ -25,7 +25,9 @@ impl BlockLevel for PadNode {
frames.iter_mut().zip(regions.iter())
{
fn solve_axis(length: Length, padding: Linear) -> Length {
- (length + padding.abs) / (1.0 - padding.rel.get())
+ (length + padding.abs)
+ .div_finite(1.0 - padding.rel.get())
+ .unwrap_or_default()
}
// Solve for the size `padded` that satisfies (approximately):