1#[derive(Debug, Clone, Copy, PartialEq)]
2pub enum Units {
3 Pixels(f32),
4 Percentage(f32),
5 Stretch(f32),
6 Auto,
7}
8
9impl Default for Units {
10 fn default() -> Self {
11 Self::Auto
12 }
13}
14
15impl Units {
16 #[must_use]
17 pub fn value_or(&self, parent_value: f32, auto: f32) -> f32 {
18 match *self {
19 Units::Pixels(pixels) => pixels,
20 Units::Percentage(percentage) => (percentage / 100.0) * parent_value,
21 Units::Stretch(_) | Units::Auto => auto,
22 }
23 }
24}
25
26impl From<f32> for Units {
27 fn from(px: f32) -> Self {
28 Self::Pixels(px)
29 }
30}
31
32#[allow(clippy::cast_precision_loss)]
33impl From<usize> for Units {
34 fn from(px: usize) -> Self {
35 Self::Pixels(px as f32)
36 }
37}
38
39#[allow(clippy::cast_lossless)]
40impl From<u8> for Units {
41 fn from(px: u8) -> Self {
42 Self::Pixels(px as f32)
43 }
44}
45
46#[allow(clippy::cast_lossless)]
47impl From<u16> for Units {
48 fn from(px: u16) -> Self {
49 Self::Pixels(px as f32)
50 }
51}
52
53#[allow(clippy::cast_precision_loss)]
54impl From<u32> for Units {
55 fn from(px: u32) -> Self {
56 Self::Pixels(px as f32)
57 }
58}
59
60#[allow(clippy::cast_precision_loss)]
61impl From<u64> for Units {
62 fn from(px: u64) -> Self {
63 Self::Pixels(px as f32)
64 }
65}
66
67#[allow(clippy::cast_lossless)]
68impl From<i8> for Units {
69 fn from(px: i8) -> Self {
70 Self::Pixels(px as f32)
71 }
72}
73
74#[allow(clippy::cast_lossless)]
75impl From<i16> for Units {
76 fn from(px: i16) -> Self {
77 Self::Pixels(px as f32)
78 }
79}
80
81#[allow(clippy::cast_precision_loss)]
82impl From<i32> for Units {
83 fn from(px: i32) -> Self {
84 Self::Pixels(px as f32)
85 }
86}
87
88#[allow(clippy::cast_precision_loss)]
89impl From<i64> for Units {
90 fn from(px: i64) -> Self {
91 Self::Pixels(px as f32)
92 }
93}
94
95impl From<Units> for morphorm::Units {
96 fn from(val: Units) -> Self {
97 match val {
98 Units::Pixels(px) => Self::Pixels(px),
99 Units::Percentage(perc) => Self::Percentage(perc),
100 Units::Stretch(val) => Self::Stretch(val),
101 Units::Auto => Self::Auto,
102 }
103 }
104}