summaryrefslogtreecommitdiff
path: root/src/geom
diff options
context:
space:
mode:
Diffstat (limited to 'src/geom')
-rw-r--r--src/geom/length.rs11
-rw-r--r--src/geom/size.rs7
2 files changed, 18 insertions, 0 deletions
diff --git a/src/geom/length.rs b/src/geom/length.rs
index 21843d3e..ecfe5616 100644
--- a/src/geom/length.rs
+++ b/src/geom/length.rs
@@ -18,6 +18,11 @@ impl Length {
Self { raw: N64::from(0.0) }
}
+ /// The inifinite length.
+ pub fn inf() -> Self {
+ Self { raw: N64::from(f64::INFINITY) }
+ }
+
/// Create a length from a number of points.
pub fn pt(pt: f64) -> Self {
Self::with_unit(pt, LengthUnit::Pt)
@@ -203,6 +208,12 @@ impl Sum for Length {
}
}
+impl<'a> Sum<&'a Length> for Length {
+ fn sum<I: Iterator<Item = &'a Length>>(iter: I) -> Self {
+ iter.copied().fold(Length::zero(), Add::add)
+ }
+}
+
/// Different units of length measurement.
#[derive(Debug, Copy, Clone, Eq, PartialEq, Ord, PartialOrd)]
pub enum LengthUnit {
diff --git a/src/geom/size.rs b/src/geom/size.rs
index 1c411fb3..4b94d0ae 100644
--- a/src/geom/size.rs
+++ b/src/geom/size.rs
@@ -57,6 +57,13 @@ impl Size {
SpecAxis::Vertical => Gen::new(self.width, self.height),
}
}
+
+ /// Find the largest contained size that satisfies the given `aspect` ratio.
+ pub fn with_aspect(self, aspect: f64) -> Self {
+ let width = self.width.min(aspect * self.height);
+ let height = width / aspect;
+ Size::new(width, height)
+ }
}
impl Get<SpecAxis> for Size {