hui_shared/
color.rs

1//! various predefined color constants and helper functions
2
3use glam::{vec4, Vec4};
4
5/// Create a color from red, green, blue components
6pub fn rgb(r: u8, g: u8, b: u8) -> Vec4 {
7  vec4(r as f32 / 255.0, g as f32 / 255.0, b as f32 / 255.0, 1.0)
8}
9
10/// Create a color from red, green, blue, alpha components
11pub fn rgba(r: u8, g: u8, b: u8, a: u8) -> Vec4 {
12  vec4(r as f32 / 255.0, g as f32 / 255.0, b as f32 / 255.0, a as f32 / 255.0)
13}
14
15/// Create an RGB color from a u32 (/hex) value
16pub fn rgb_hex(value: u32) -> Vec4 {
17  let r = (value >> 16) & 0xff;
18  let g = (value >> 8) & 0xff;
19  let b = value & 0xff;
20  vec4(r as f32 / 255.0, g as f32 / 255.0, b as f32 / 255.0, 1.0)
21}
22
23/// Create an RGBA color from a u32 (/hex) value
24pub fn rgba_hex(value: u32) -> Vec4 {
25  let r = (value >> 16) & 0xff;
26  let g = (value >> 8) & 0xff;
27  let b = value & 0xff;
28  let a = (value >> 24) & 0xff;
29  vec4(r as f32 / 255.0, g as f32 / 255.0, b as f32 / 255.0, a as f32 / 255.0)
30}
31
32#[cfg_attr(doc, doc="<span style='display: inline-block; background: repeating-conic-gradient(grey 0 25%,darkgrey 0 50%) 50%/8px 8px; width: 1em; height: 1em; border-radius: 50%; border: 1px solid black; vertical-align: -7%'></span>")]
33/// `#00000000` Transparent
34pub const TRANSPARENT: Vec4 = vec4(0.0, 0.0, 0.0, 0.0);
35
36#[cfg_attr(doc, doc="<span style='display: inline-block; background-color: #000000; width: 1em; height: 1em; border-radius: 50%; border: 1px solid black; vertical-align: -7%'></span>")]
37/// `#000000` Black
38pub const BLACK: Vec4 = vec4(0.0, 0.0, 0.0, 1.0);
39
40#[cfg_attr(doc, doc="<span style='display: inline-block; background-color: #ffffff; width: 1em; height: 1em; border-radius: 50%; border: 1px solid black; vertical-align: -7%'></span>")]
41/// `#ffffff` White
42pub const WHITE: Vec4 = vec4(1.0, 1.0, 1.0, 1.0);
43
44#[cfg_attr(doc, doc="<span style='display: inline-block; background-color: #ff0000; width: 1em; height: 1em; border-radius: 50%; border: 1px solid black; vertical-align: -7%'></span>")]
45/// `#ff0000` Red
46pub const RED: Vec4 = vec4(1.0, 0.0, 0.0, 1.0);
47
48#[cfg_attr(doc, doc="<span style='display: inline-block; background-color: #800000; width: 1em; height: 1em; border-radius: 50%; border: 1px solid black; vertical-align: -7%'></span>")]
49/// `#800000` Dark red
50pub const DARK_RED: Vec4 = vec4(0.5, 0.0, 0.0, 1.0);
51
52#[cfg_attr(doc, doc="<span style='display: inline-block; background-color: #00ff00; width: 1em; height: 1em; border-radius: 50%; border: 1px solid black; vertical-align: -7%'></span>")]
53/// `#00ff00` Green
54pub const GREEN: Vec4 = vec4(0.0, 1.0, 0.0, 1.0);
55
56#[cfg_attr(doc, doc="<span style='display: inline-block; background-color: #008000; width: 1em; height: 1em; border-radius: 50%; border: 1px solid black; vertical-align: -7%'></span>")]
57/// `#008000` Dark green
58pub const DARK_GREEN: Vec4 = vec4(0.0, 0.5, 0.0, 1.0);
59
60#[cfg_attr(doc, doc="<span style='display: inline-block; background-color: #0000ff; width: 1em; height: 1em; border-radius: 50%; border: 1px solid black; vertical-align: -7%'></span>")]
61/// `#0000ff` Blue
62pub const BLUE: Vec4 = vec4(0.0, 0.0, 1.0, 1.0);
63
64#[cfg_attr(doc, doc="<span style='display: inline-block; background-color: #000080; width: 1em; height: 1em; border-radius: 50%; border: 1px solid black; vertical-align: -7%'></span>")]
65/// `#000080` Dark blue
66pub const DARK_BLUE: Vec4 = vec4(0.0, 0.0, 0.5, 1.0);
67
68#[cfg_attr(doc, doc="<span style='display: inline-block; background-color: #ffff00; width: 1em; height: 1em; border-radius: 50%; border: 1px solid black; vertical-align: -7%'></span>")]
69/// `#ffff00` Yellow
70pub const YELLOW: Vec4 = vec4(1.0, 1.0, 0.0, 1.0);
71
72#[cfg_attr(doc, doc="<span style='display: inline-block; background-color: #00ffff; width: 1em; height: 1em; border-radius: 50%; border: 1px solid black; vertical-align: -7%'></span>")]
73/// `#00ffff` Cyan
74pub const CYAN: Vec4 = vec4(0.0, 1.0, 1.0, 1.0);
75
76#[cfg_attr(doc, doc="<span style='display: inline-block; background-color: #ff00ff; width: 1em; height: 1em; border-radius: 50%; border: 1px solid black; vertical-align: -7%'></span>")]
77/// `#ff00ff` Magenta
78pub const MAGENTA: Vec4 = vec4(1.0, 0.0, 1.0, 1.0);
79
80#[cfg_attr(doc, doc="<span style='display: inline-block; background-color: #808080; width: 1em; height: 1em; border-radius: 50%; border: 1px solid black; vertical-align: -7%'></span>")]
81/// `#808080` Gray
82pub const GRAY: Vec4 = vec4(0.5, 0.5, 0.5, 1.0);
83
84#[cfg_attr(doc, doc="<span style='display: inline-block; background-color: #c0c0c0; width: 1em; height: 1em; border-radius: 50%; border: 1px solid black; vertical-align: -7%'></span>")]
85/// `#c0c0c0` Light gray
86pub const LIGHT_GRAY: Vec4 = vec4(0.75, 0.75, 0.75, 1.0);
87
88#[cfg_attr(doc, doc="<span style='display: inline-block; background-color: #404040; width: 1em; height: 1em; border-radius: 50%; border: 1px solid black; vertical-align: -7%'></span>")]
89/// `#404040` Dark gray
90pub const DARK_GRAY: Vec4 = vec4(0.25, 0.25, 0.25, 1.0);
91
92#[cfg_attr(doc, doc="<span style='display: inline-block; background-color: #ff8000; width: 1em; height: 1em; border-radius: 50%; border: 1px solid black; vertical-align: -7%'></span>")]
93/// `#ff8000` Orange
94pub const ORANGE: Vec4 = vec4(1.0, 0.5, 0.0, 1.0);
95
96#[cfg_attr(doc, doc="<span style='display: inline-block; background-color: #804000; width: 1em; height: 1em; border-radius: 50%; border: 1px solid black; vertical-align: -7%'></span>")]
97/// `#804000` Brown
98pub const BROWN: Vec4 = vec4(0.5, 0.25, 0.0, 1.0);
99
100#[cfg_attr(doc, doc="<span style='display: inline-block; background-color: #ff80ff; width: 1em; height: 1em; border-radius: 50%; border: 1px solid black; vertical-align: -7%'></span>")]
101/// `#ff80ff` Pink
102pub const PINK: Vec4 = vec4(1.0, 0.5, 1.0, 1.0);
103
104#[cfg_attr(doc, doc="<span style='display: inline-block; background-color: #800080; width: 1em; height: 1em; border-radius: 50%; border: 1px solid black; vertical-align: -7%'></span>")]
105/// `#800080` Purple
106pub const PURPLE: Vec4 = vec4(0.5, 0.0, 0.5, 1.0);
107
108#[cfg_attr(doc, doc="<span style='display: inline-block; background-color: #80ff00; width: 1em; height: 1em; border-radius: 50%; border: 1px solid black; vertical-align: -7%'></span>")]
109/// `#80ff00` Lime
110pub const LIME: Vec4 = vec4(0.5, 1.0, 0.0, 1.0);
111
112#[cfg_attr(doc, doc="<span style='display: inline-block; background-color: #008080; width: 1em; height: 1em; border-radius: 50%; border: 1px solid black; vertical-align: -7%'></span>")]
113/// `#008080` Teal
114pub const TEAL: Vec4 = vec4(0.0, 0.5, 0.5, 1.0);
115
116#[cfg_attr(doc, doc="<span style='display: inline-block; background-color: #004080; width: 1em; height: 1em; border-radius: 50%; border: 1px solid black; vertical-align: -7%'></span>")]
117/// `#004080` Indigo
118pub const INDIGO: Vec4 = vec4(0.0, 0.25, 0.5, 1.0);
119
120#[cfg_attr(doc, doc="<span style='display: inline-block; background-color: #808000; width: 1em; height: 1em; border-radius: 50%; border: 1px solid black; vertical-align: -7%'></span>")]
121/// `#808000` Olive
122pub const OLIVE: Vec4 = vec4(0.5, 0.5, 0.0, 1.0);
123
124#[cfg_attr(doc, doc="<span style='display: inline-block; background-color: #87ceeb; width: 1em; height: 1em; border-radius: 50%; border: 1px solid black; vertical-align: -7%'></span>")]
125/// `#87ceeb` Sky blue
126pub const SKY_BLUE: Vec4 = vec4(0.53, 0.81, 0.92, 1.0);
127
128//TODO color macro