summaryrefslogtreecommitdiffstats
path: root/core/src
diff options
context:
space:
mode:
authorLibravatar Héctor Ramón Jiménez <hector@hecrj.dev>2025-01-27 01:09:16 +0100
committerLibravatar Héctor Ramón Jiménez <hector@hecrj.dev>2025-01-27 01:09:16 +0100
commitce07acf6fedd705d6380739fbc5da40f95739e04 (patch)
tree183322ddbbe61c0c2dba4cdc4d69e9da0504fae4 /core/src
parentd9a454ac4d60a259931f13e844680b2fcd18853b (diff)
downloadiced-ce07acf6fedd705d6380739fbc5da40f95739e04.tar.gz
iced-ce07acf6fedd705d6380739fbc5da40f95739e04.tar.bz2
iced-ce07acf6fedd705d6380739fbc5da40f95739e04.zip
Make all `Color` constructors `const` :tada:
Diffstat (limited to 'core/src')
-rw-r--r--core/src/color.rs53
1 files changed, 12 insertions, 41 deletions
diff --git a/core/src/color.rs b/core/src/color.rs
index 7b4b772f..a2e076ae 100644
--- a/core/src/color.rs
+++ b/core/src/color.rs
@@ -42,22 +42,18 @@ impl Color {
///
/// In debug mode, it will panic if the values are not in the correct
/// range: 0.0 - 1.0
- pub fn new(r: f32, g: f32, b: f32, a: f32) -> Color {
+ const fn new(r: f32, g: f32, b: f32, a: f32) -> Color {
debug_assert!(
- (0.0..=1.0).contains(&r),
- "Red component must be on [0, 1]"
+ r >= 0.0 && r <= 1.0,
+ "Red component must be in [0, 1] range."
);
debug_assert!(
- (0.0..=1.0).contains(&g),
- "Green component must be on [0, 1]"
+ g >= 0.0 && g <= 1.0,
+ "Green component must be in [0, 1] range."
);
debug_assert!(
- (0.0..=1.0).contains(&b),
- "Blue component must be on [0, 1]"
- );
- debug_assert!(
- (0.0..=1.0).contains(&a),
- "Alpha component must be on [0, 1]"
+ b >= 0.0 && b <= 1.0,
+ "Blue component must be in [0, 1] range."
);
Color { r, g, b, a }
@@ -70,7 +66,7 @@ impl Color {
/// Creates a [`Color`] from its RGBA components.
pub const fn from_rgba(r: f32, g: f32, b: f32, a: f32) -> Color {
- Color { r, g, b, a }
+ Color::new(r, g, b, a)
}
/// Creates a [`Color`] from its RGB8 components.
@@ -80,12 +76,7 @@ impl Color {
/// Creates a [`Color`] from its RGB8 components and an alpha value.
pub const fn from_rgba8(r: u8, g: u8, b: u8, a: f32) -> Color {
- Color {
- r: r as f32 / 255.0,
- g: g as f32 / 255.0,
- b: b as f32 / 255.0,
- a,
- }
+ Color::new(r as f32 / 255.0, g as f32 / 255.0, b as f32 / 255.0, a)
}
/// Creates a [`Color`] from its linear RGBA components.
@@ -234,30 +225,10 @@ impl From<[f32; 4]> for Color {
#[macro_export]
macro_rules! color {
($r:expr, $g:expr, $b:expr) => {
- $crate::color!($r, $g, $b, 1.0)
+ $crate::Color::from_rgb8($r, $g, $b)
};
($r:expr, $g:expr, $b:expr, $a:expr) => {{
- let r = $r as f32 / 255.0;
- let g = $g as f32 / 255.0;
- let b = $b as f32 / 255.0;
-
- #[allow(clippy::manual_range_contains)]
- {
- debug_assert!(
- r >= 0.0 && r <= 1.0,
- "R channel must be in [0, 255] range."
- );
- debug_assert!(
- g >= 0.0 && g <= 1.0,
- "G channel must be in [0, 255] range."
- );
- debug_assert!(
- b >= 0.0 && b <= 1.0,
- "B channel must be in [0, 255] range."
- );
- }
-
- $crate::Color { r, g, b, a: $a }
+ $crate::Color::from_rgba8($r, $g, $b, $a)
}};
($hex:expr) => {{
$crate::color!($hex, 1.0)
@@ -271,7 +242,7 @@ macro_rules! color {
let g = (hex & 0xff00) >> 8;
let b = (hex & 0xff);
- $crate::color!(r, g, b, $a)
+ $crate::color!(r as u8, g as u8, b as u8, $a)
}};
}