agui_core/unit/
units.rs

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}