mirror of
https://github.com/typst/typst
synced 2025-06-08 21:26:24 +08:00
85 lines
2.2 KiB
Rust
85 lines
2.2 KiB
Rust
//! Convert basic primitive types from typst to krilla.
|
|
|
|
use typst_library::layout::{Point, Size, Transform};
|
|
use typst_library::visualize::{FillRule, LineCap, LineJoin};
|
|
|
|
use crate::AbsExt;
|
|
|
|
pub(crate) trait SizeExt {
|
|
fn as_krilla(&self) -> krilla::geom::Size;
|
|
}
|
|
|
|
impl SizeExt for Size {
|
|
fn as_krilla(&self) -> krilla::geom::Size {
|
|
krilla::geom::Size::from_wh(self.x.to_f32(), self.y.to_f32()).unwrap()
|
|
}
|
|
}
|
|
|
|
pub(crate) trait PointExt {
|
|
fn as_krilla(&self) -> krilla::geom::Point;
|
|
}
|
|
|
|
impl PointExt for Point {
|
|
fn as_krilla(&self) -> krilla::geom::Point {
|
|
krilla::geom::Point::from_xy(self.x.to_f32(), self.y.to_f32())
|
|
}
|
|
}
|
|
|
|
pub(crate) trait LineCapExt {
|
|
fn as_krilla(&self) -> krilla::path::LineCap;
|
|
}
|
|
|
|
impl LineCapExt for LineCap {
|
|
fn as_krilla(&self) -> krilla::path::LineCap {
|
|
match self {
|
|
LineCap::Butt => krilla::path::LineCap::Butt,
|
|
LineCap::Round => krilla::path::LineCap::Round,
|
|
LineCap::Square => krilla::path::LineCap::Square,
|
|
}
|
|
}
|
|
}
|
|
|
|
pub(crate) trait LineJoinExt {
|
|
fn as_krilla(&self) -> krilla::path::LineJoin;
|
|
}
|
|
|
|
impl LineJoinExt for LineJoin {
|
|
fn as_krilla(&self) -> krilla::path::LineJoin {
|
|
match self {
|
|
LineJoin::Miter => krilla::path::LineJoin::Miter,
|
|
LineJoin::Round => krilla::path::LineJoin::Round,
|
|
LineJoin::Bevel => krilla::path::LineJoin::Bevel,
|
|
}
|
|
}
|
|
}
|
|
|
|
pub(crate) trait TransformExt {
|
|
fn as_krilla(&self) -> krilla::geom::Transform;
|
|
}
|
|
|
|
impl TransformExt for Transform {
|
|
fn as_krilla(&self) -> krilla::geom::Transform {
|
|
krilla::geom::Transform::from_row(
|
|
self.sx.get() as f32,
|
|
self.ky.get() as f32,
|
|
self.kx.get() as f32,
|
|
self.sy.get() as f32,
|
|
self.tx.to_f32(),
|
|
self.ty.to_f32(),
|
|
)
|
|
}
|
|
}
|
|
|
|
pub(crate) trait FillRuleExt {
|
|
fn as_krilla(&self) -> krilla::path::FillRule;
|
|
}
|
|
|
|
impl FillRuleExt for FillRule {
|
|
fn as_krilla(&self) -> krilla::path::FillRule {
|
|
match self {
|
|
FillRule::NonZero => krilla::path::FillRule::NonZero,
|
|
FillRule::EvenOdd => krilla::path::FillRule::EvenOdd,
|
|
}
|
|
}
|
|
}
|