1use ::serde::{Deserialize, Serialize};
2
3use crate::basic_types::StraightSRgba8;
4
5#[derive(Copy, Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)]
6#[serde(rename_all = "kebab-case")]
7pub enum GradientSpread {
8 Pad,
9 Reflect,
10 Repeat,
11}
12
13#[derive(Copy, Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)]
14#[serde(rename_all = "kebab-case")]
15pub enum ColorSpace {
16 SRgb,
17 LinearRgb,
18}
19
20#[derive(Copy, Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)]
21pub struct ColorStop {
22 pub ratio: u8,
23 pub color: StraightSRgba8,
24}
25
26#[derive(Copy, Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)]
27pub struct MorphColorStop {
28 pub ratio: u8,
29 pub morph_ratio: u8,
30 pub color: StraightSRgba8,
31 pub morph_color: StraightSRgba8,
32}
33
34#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)]
35pub struct Gradient {
36 pub spread: GradientSpread,
37 pub color_space: ColorSpace,
38 pub colors: Vec<ColorStop>,
39}
40
41#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord, Hash, Serialize, Deserialize)]
42pub struct MorphGradient {
43 pub spread: GradientSpread,
44 pub color_space: ColorSpace,
45 pub colors: Vec<MorphColorStop>,
46}