aboutsummaryrefslogtreecommitdiffstats
path: root/components/layout_2020/geom.rs
diff options
context:
space:
mode:
Diffstat (limited to 'components/layout_2020/geom.rs')
-rw-r--r--components/layout_2020/geom.rs58
1 files changed, 31 insertions, 27 deletions
diff --git a/components/layout_2020/geom.rs b/components/layout_2020/geom.rs
index 2032a3e72ab..af8d37393b5 100644
--- a/components/layout_2020/geom.rs
+++ b/components/layout_2020/geom.rs
@@ -1,20 +1,31 @@
-pub(crate) use crate::style::values::Length;
-use crate::style::values::{LengthOrAuto, LengthOrPercentage, LengthOrPercentageOrAuto};
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
+
+use crate::style_ext::{Direction, WritingMode};
+use std::ops::{Add, AddAssign, Sub};
+use style::values::computed::{Length, LengthOrAuto, LengthPercentage, LengthPercentageOrAuto};
+use style::Zero;
+use style_traits::CSSPixel;
+
+pub type Point<U> = euclid::Point2D<f32, U>;
+pub type Size<U> = euclid::Size2D<f32, U>;
+pub type Rect<U> = euclid::Rect<f32, U>;
pub(crate) mod physical {
- #[derive(Debug, Clone)]
+ #[derive(Clone, Debug)]
pub(crate) struct Vec2<T> {
pub x: T,
pub y: T,
}
- #[derive(Debug, Clone)]
+ #[derive(Clone, Debug)]
pub(crate) struct Rect<T> {
pub top_left: Vec2<T>,
pub size: Vec2<T>,
}
- #[derive(Debug, Clone)]
+ #[derive(Clone, Debug)]
pub(crate) struct Sides<T> {
pub top: T,
pub left: T,
@@ -24,19 +35,19 @@ pub(crate) mod physical {
}
pub(crate) mod flow_relative {
- #[derive(Debug, Clone)]
+ #[derive(Clone, Debug)]
pub(crate) struct Vec2<T> {
pub inline: T,
pub block: T,
}
- #[derive(Debug, Clone)]
+ #[derive(Clone, Debug)]
pub(crate) struct Rect<T> {
pub start_corner: Vec2<T>,
pub size: Vec2<T>,
}
- #[derive(Debug, Clone)]
+ #[derive(Clone, Debug)]
pub(crate) struct Sides<T> {
pub inline_start: T,
pub inline_end: T,
@@ -45,9 +56,6 @@ pub(crate) mod flow_relative {
}
}
-use crate::style::values::{Direction, WritingMode};
-use std::ops::{Add, AddAssign, Sub};
-
impl<T> Add<&'_ physical::Vec2<T>> for &'_ physical::Vec2<T>
where
T: Add<Output = T> + Copy,
@@ -145,9 +153,9 @@ impl<T: Clone> flow_relative::Vec2<T> {
}
}
-impl From<physical::Vec2<Length>> for crate::primitives::Point<crate::primitives::CssPx> {
+impl From<physical::Vec2<Length>> for Point<CSSPixel> {
fn from(v: physical::Vec2<Length>) -> Self {
- crate::primitives::Point::from_lengths(v.x.into(), v.y.into())
+ Point::from_lengths(v.x.into(), v.y.into())
}
}
@@ -159,18 +167,14 @@ impl<T: Clone> physical::Sides<T> {
// https://drafts.csswg.org/css-writing-modes/#logical-to-physical
let (bs, be) = match mode.0 {
HorizontalTb => (&self.top, &self.bottom),
- VerticalRl | SidewaysRl => (&self.right, &self.left),
- VerticalLr | SidewaysLr => (&self.left, &self.right),
+ VerticalRl => (&self.right, &self.left),
+ VerticalLr => (&self.left, &self.right),
};
let (is, ie) = match mode {
(HorizontalTb, Ltr) => (&self.left, &self.right),
(HorizontalTb, Rtl) => (&self.right, &self.left),
- (VerticalRl, Ltr) | (SidewaysRl, Ltr) | (VerticalLr, Ltr) | (SidewaysLr, Rtl) => {
- (&self.top, &self.bottom)
- }
- (VerticalRl, Rtl) | (SidewaysRl, Rtl) | (VerticalLr, Rtl) | (SidewaysLr, Ltr) => {
- (&self.bottom, &self.top)
- }
+ (VerticalRl, Ltr) | (VerticalLr, Ltr) => (&self.top, &self.bottom),
+ (VerticalRl, Rtl) | (VerticalLr, Rtl) => (&self.bottom, &self.top),
};
flow_relative::Sides {
inline_start: is.clone(),
@@ -229,13 +233,13 @@ impl<T> flow_relative::Sides<T> {
}
}
-impl flow_relative::Sides<LengthOrPercentage> {
+impl flow_relative::Sides<LengthPercentage> {
pub fn percentages_relative_to(&self, basis: Length) -> flow_relative::Sides<Length> {
self.map(|s| s.percentage_relative_to(basis))
}
}
-impl flow_relative::Sides<LengthOrPercentageOrAuto> {
+impl flow_relative::Sides<LengthPercentageOrAuto> {
pub fn percentages_relative_to(&self, basis: Length) -> flow_relative::Sides<LengthOrAuto> {
self.map(|s| s.percentage_relative_to(basis))
}
@@ -320,11 +324,11 @@ impl<T> physical::Rect<T> {
}
}
-impl From<physical::Rect<Length>> for crate::primitives::Rect<crate::primitives::CssPx> {
+impl From<physical::Rect<Length>> for Rect<CSSPixel> {
fn from(r: physical::Rect<Length>) -> Self {
- crate::primitives::Rect {
- origin: crate::primitives::Point::new(r.top_left.x.px, r.top_left.y.px),
- size: crate::primitives::Size::new(r.size.x.px, r.size.y.px),
+ Rect {
+ origin: Point::new(r.top_left.x.px(), r.top_left.y.px()),
+ size: Size::new(r.size.x.px(), r.size.y.px()),
}
}
}