0
Fork 0
mirror of https://github.com/penpot/penpot.git synced 2025-01-23 06:58:58 -05:00
penpot/render-wasm/src/shapes.rs

89 lines
1.4 KiB
Rust
Raw Normal View History

2024-11-12 11:09:50 +01:00
use uuid::Uuid;
use crate::state::State;
#[derive(Debug, Clone, Copy)]
2024-11-12 11:09:50 +01:00
pub enum Kind {
None,
Text,
Path,
SVGRaw,
Image,
Circle,
Rect,
Bool,
Group,
Frame,
}
pub struct Point {
pub x: f32,
pub y: f32,
}
#[derive(Debug, Clone, Copy, Default)]
pub struct Rect {
pub x1: f32,
pub y1: f32,
pub x2: f32,
pub y2: f32,
}
2024-11-12 11:09:50 +01:00
#[derive(Debug, Clone, Copy)]
pub struct Matrix {
pub a: f32,
pub b: f32,
pub c: f32,
pub d: f32,
pub e: f32,
pub f: f32,
}
2024-11-12 11:09:50 +01:00
impl Matrix {
pub fn identity() -> Self {
Self {
a: 1.,
b: 0.,
c: 0.,
d: 1.,
e: 0.,
f: 0.,
}
}
}
#[derive(Debug, Clone)]
2024-11-12 11:09:50 +01:00
pub struct Shape {
pub id: Uuid,
pub shapes: Vec<Uuid>,
2024-11-12 11:09:50 +01:00
pub kind: Kind,
pub selrect: Rect,
pub transform: Matrix,
pub rotation: f32,
}
impl Shape {
pub fn new(id: Uuid) -> Self {
Self {
id,
shapes: Vec::<Uuid>::new(),
2024-11-12 11:09:50 +01:00
kind: Kind::Rect,
selrect: Rect::default(),
transform: Matrix::identity(),
rotation: 0.,
}
}
pub fn translation(&self) -> (f32, f32) {
(self.transform.e, self.transform.f)
}
2024-11-12 11:09:50 +01:00
pub fn scale(&self) -> (f32, f32) {
(self.transform.a, self.transform.d)
}
2024-11-12 11:09:50 +01:00
pub fn skew(&self) -> (f32, f32) {
(self.transform.c, self.transform.b)
}
}