rootvg_tessellation/
fill.rs1use rootvg_core::color::{PackedSrgb, RGB8, RGBA8};
6
7#[cfg(feature = "gradient")]
8use rootvg_core::gradient::PackedGradient;
9
10#[derive(Debug, Clone)]
12pub struct Fill {
13 pub style: FillStyle,
17
18 pub rule: FillRule,
27}
28
29impl Default for Fill {
30 fn default() -> Self {
31 Self {
32 style: FillStyle::Solid(PackedSrgb([0.0, 0.0, 0.0, 1.0])),
33 rule: FillRule::NonZero,
34 }
35 }
36}
37
38impl From<PackedSrgb> for Fill {
39 fn from(color: PackedSrgb) -> Fill {
40 Fill {
41 style: FillStyle::Solid(color),
42 ..Fill::default()
43 }
44 }
45}
46
47impl From<RGB8> for Fill {
48 fn from(color: RGB8) -> Fill {
49 Fill {
50 style: FillStyle::Solid(color.into()),
51 ..Fill::default()
52 }
53 }
54}
55
56impl From<RGBA8> for Fill {
57 fn from(color: RGBA8) -> Fill {
58 Fill {
59 style: FillStyle::Solid(color.into()),
60 ..Fill::default()
61 }
62 }
63}
64
65#[cfg(feature = "gradient")]
66impl From<PackedGradient> for Fill {
67 fn from(gradient: PackedGradient) -> Self {
68 Fill {
69 style: FillStyle::Gradient(gradient),
70 ..Default::default()
71 }
72 }
73}
74
75#[derive(Default, Debug, Clone, Copy, PartialEq, Eq)]
82pub enum FillRule {
83 #[default]
84 NonZero,
85 EvenOdd,
86}
87
88#[derive(Debug, Clone, PartialEq)]
90pub enum FillStyle {
91 Solid(PackedSrgb),
93
94 #[cfg(feature = "gradient")]
95 Gradient(PackedGradient),
97}
98
99impl From<PackedSrgb> for FillStyle {
100 fn from(color: PackedSrgb) -> Self {
101 Self::Solid(color)
102 }
103}
104
105#[cfg(feature = "gradient")]
106impl From<PackedGradient> for FillStyle {
107 fn from(gradient: PackedGradient) -> Self {
108 Self::Gradient(gradient)
109 }
110}
111
112impl From<RGB8> for FillStyle {
113 fn from(color: RGB8) -> Self {
114 Self::Solid(color.into())
115 }
116}
117
118impl From<RGBA8> for FillStyle {
119 fn from(color: RGBA8) -> Self {
120 Self::Solid(color.into())
121 }
122}