kurbo/
interop_euclid.rs

1// Copyright 2025 the Kurbo Authors
2// SPDX-License-Identifier: Apache-2.0 OR MIT
3
4use euclid::UnknownUnit;
5
6impl From<euclid::Vector2D<f64, UnknownUnit>> for crate::Vec2 {
7    #[inline(always)]
8    fn from(value: euclid::Vector2D<f64, UnknownUnit>) -> Self {
9        Self::new(value.x, value.y)
10    }
11}
12
13impl From<crate::Vec2> for euclid::Vector2D<f64, UnknownUnit> {
14    #[inline(always)]
15    fn from(value: crate::Vec2) -> Self {
16        Self::new(value.x, value.y)
17    }
18}
19
20impl From<euclid::Point2D<f64, UnknownUnit>> for crate::Point {
21    #[inline(always)]
22    fn from(value: euclid::Point2D<f64, UnknownUnit>) -> Self {
23        Self::new(value.x, value.y)
24    }
25}
26
27impl From<crate::Point> for euclid::Point2D<f64, UnknownUnit> {
28    #[inline(always)]
29    fn from(value: crate::Point) -> Self {
30        Self::new(value.x, value.y)
31    }
32}
33
34impl From<euclid::Size2D<f64, UnknownUnit>> for crate::Size {
35    #[inline(always)]
36    fn from(value: euclid::Size2D<f64, UnknownUnit>) -> Self {
37        Self::new(value.width, value.height)
38    }
39}
40
41impl From<crate::Size> for euclid::Size2D<f64, UnknownUnit> {
42    #[inline(always)]
43    fn from(value: crate::Size) -> Self {
44        Self::new(value.width, value.height)
45    }
46}
47
48impl From<euclid::Rect<f64, UnknownUnit>> for crate::Rect {
49    #[inline]
50    fn from(value: euclid::Rect<f64, UnknownUnit>) -> Self {
51        Self::from_origin_size(value.origin, value.size)
52    }
53}
54
55impl From<crate::Rect> for euclid::Rect<f64, UnknownUnit> {
56    #[inline]
57    fn from(value: crate::Rect) -> Self {
58        Self::new(value.origin().into(), value.size().into())
59    }
60}
61
62impl From<euclid::Box2D<f64, UnknownUnit>> for crate::Rect {
63    #[inline]
64    fn from(value: euclid::Box2D<f64, UnknownUnit>) -> Self {
65        Self::from_points(value.min, value.max)
66    }
67}
68
69impl From<crate::Rect> for euclid::Box2D<f64, UnknownUnit> {
70    #[inline]
71    fn from(value: crate::Rect) -> Self {
72        Self::new(
73            euclid::Point2D::new(value.min_x(), value.min_y()),
74            euclid::Point2D::new(value.max_x(), value.max_y()),
75        )
76    }
77}
78
79impl From<euclid::Transform2D<f64, UnknownUnit, UnknownUnit>> for crate::Affine {
80    #[inline(always)]
81    fn from(t: euclid::Transform2D<f64, UnknownUnit, UnknownUnit>) -> Self {
82        Self::new(t.to_array())
83    }
84}
85
86impl From<crate::Affine> for euclid::Transform2D<f64, UnknownUnit, UnknownUnit> {
87    #[inline(always)]
88    fn from(a: crate::Affine) -> Self {
89        Self::from_array(a.as_coeffs())
90    }
91}