1use super::{BlendMode, Color, Vector};
2use serde::{Deserialize, Serialize};
3
4#[derive(Debug, Deserialize, Serialize)]
5#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
6#[typeshare::typeshare]
7pub enum PaintType {
8 Solid,
9 GradientLinear,
10 GradientRadial,
11 GradientAngular,
12 GradientDiamond,
13 Image,
14}
15
16#[derive(Debug, Deserialize, Serialize)]
20#[typeshare::typeshare]
21pub struct Paint {
22 pub r#type: PaintType,
23 #[serde(skip_serializing_if = "Option::is_none")]
25 pub visible: Option<bool>,
26 #[serde(skip_serializing_if = "Option::is_none")]
28 pub opacity: Option<f64>,
29 #[serde(skip_serializing_if = "Option::is_none")]
31 pub color: Option<Color>,
32 #[serde(skip_serializing_if = "Option::is_none")]
34 pub blend_mode: Option<BlendMode>,
35 #[serde(skip_serializing_if = "Option::is_none")]
37 pub gradient_handle_positions: Option<[Vector; 3]>,
38}
39
40impl Paint {
41 pub fn visible(&self) -> bool {
42 self.visible.unwrap_or(true)
43 }
44
45 pub fn opacity(&self) -> f64 {
46 self.opacity.unwrap_or(1.0)
47 }
48
49 pub fn color(&self) -> Option<&Color> {
50 self.color.as_ref()
51 }
52}