Merge pull request #2749 from rhysd/const-from-rgb8
Make `Color::from_rgb8` and `Color::from_rgba8` const
This commit is contained in:
commit
da1726b134
6 changed files with 28 additions and 93 deletions
2
.github/workflows/test.yml
vendored
2
.github/workflows/test.yml
vendored
|
|
@ -8,7 +8,7 @@ jobs:
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
os: [ubuntu-latest, windows-latest, macOS-latest]
|
os: [ubuntu-latest, windows-latest, macOS-latest]
|
||||||
rust: [stable, beta, "1.81"]
|
rust: [stable, beta, "1.82"]
|
||||||
steps:
|
steps:
|
||||||
- uses: hecrj/setup-rust-action@v2
|
- uses: hecrj/setup-rust-action@v2
|
||||||
with:
|
with:
|
||||||
|
|
|
||||||
|
|
@ -128,7 +128,7 @@ repository = "https://github.com/iced-rs/iced"
|
||||||
homepage = "https://iced.rs"
|
homepage = "https://iced.rs"
|
||||||
categories = ["gui"]
|
categories = ["gui"]
|
||||||
keywords = ["gui", "ui", "graphics", "interface", "widgets"]
|
keywords = ["gui", "ui", "graphics", "interface", "widgets"]
|
||||||
rust-version = "1.81"
|
rust-version = "1.82"
|
||||||
|
|
||||||
[workspace.dependencies]
|
[workspace.dependencies]
|
||||||
iced = { version = "0.14.0-dev", path = "." }
|
iced = { version = "0.14.0-dev", path = "." }
|
||||||
|
|
|
||||||
|
|
@ -42,22 +42,18 @@ impl Color {
|
||||||
///
|
///
|
||||||
/// In debug mode, it will panic if the values are not in the correct
|
/// In debug mode, it will panic if the values are not in the correct
|
||||||
/// range: 0.0 - 1.0
|
/// 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!(
|
debug_assert!(
|
||||||
(0.0..=1.0).contains(&r),
|
r >= 0.0 && r <= 1.0,
|
||||||
"Red component must be on [0, 1]"
|
"Red component must be in [0, 1] range."
|
||||||
);
|
);
|
||||||
debug_assert!(
|
debug_assert!(
|
||||||
(0.0..=1.0).contains(&g),
|
g >= 0.0 && g <= 1.0,
|
||||||
"Green component must be on [0, 1]"
|
"Green component must be in [0, 1] range."
|
||||||
);
|
);
|
||||||
debug_assert!(
|
debug_assert!(
|
||||||
(0.0..=1.0).contains(&b),
|
b >= 0.0 && b <= 1.0,
|
||||||
"Blue component must be on [0, 1]"
|
"Blue component must be in [0, 1] range."
|
||||||
);
|
|
||||||
debug_assert!(
|
|
||||||
(0.0..=1.0).contains(&a),
|
|
||||||
"Alpha component must be on [0, 1]"
|
|
||||||
);
|
);
|
||||||
|
|
||||||
Color { r, g, b, a }
|
Color { r, g, b, a }
|
||||||
|
|
@ -70,22 +66,17 @@ impl Color {
|
||||||
|
|
||||||
/// Creates a [`Color`] from its RGBA components.
|
/// Creates a [`Color`] from its RGBA components.
|
||||||
pub const fn from_rgba(r: f32, g: f32, b: f32, a: f32) -> Color {
|
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.
|
/// Creates a [`Color`] from its RGB8 components.
|
||||||
pub fn from_rgb8(r: u8, g: u8, b: u8) -> Color {
|
pub const fn from_rgb8(r: u8, g: u8, b: u8) -> Color {
|
||||||
Color::from_rgba8(r, g, b, 1.0)
|
Color::from_rgba8(r, g, b, 1.0)
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Creates a [`Color`] from its RGB8 components and an alpha value.
|
/// Creates a [`Color`] from its RGB8 components and an alpha value.
|
||||||
pub fn from_rgba8(r: u8, g: u8, b: u8, a: f32) -> Color {
|
pub const fn from_rgba8(r: u8, g: u8, b: u8, a: f32) -> Color {
|
||||||
Color {
|
Color::new(r as f32 / 255.0, g as f32 / 255.0, b as f32 / 255.0, a)
|
||||||
r: f32::from(r) / 255.0,
|
|
||||||
g: f32::from(g) / 255.0,
|
|
||||||
b: f32::from(b) / 255.0,
|
|
||||||
a,
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Creates a [`Color`] from its linear RGBA components.
|
/// Creates a [`Color`] from its linear RGBA components.
|
||||||
|
|
@ -234,30 +225,10 @@ impl From<[f32; 4]> for Color {
|
||||||
#[macro_export]
|
#[macro_export]
|
||||||
macro_rules! color {
|
macro_rules! color {
|
||||||
($r:expr, $g:expr, $b:expr) => {
|
($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) => {{
|
($r:expr, $g:expr, $b:expr, $a:expr) => {{
|
||||||
let r = $r as f32 / 255.0;
|
$crate::Color::from_rgba8($r, $g, $b, $a)
|
||||||
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 }
|
|
||||||
}};
|
}};
|
||||||
($hex:expr) => {{
|
($hex:expr) => {{
|
||||||
$crate::color!($hex, 1.0)
|
$crate::color!($hex, 1.0)
|
||||||
|
|
@ -271,7 +242,7 @@ macro_rules! color {
|
||||||
let g = (hex & 0xff00) >> 8;
|
let g = (hex & 0xff00) >> 8;
|
||||||
let b = (hex & 0xff);
|
let b = (hex & 0xff);
|
||||||
|
|
||||||
$crate::color!(r, g, b, $a)
|
$crate::color!(r as u8, g as u8, b as u8, $a)
|
||||||
}};
|
}};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -29,56 +29,20 @@ impl Palette {
|
||||||
pub const LIGHT: Self = Self {
|
pub const LIGHT: Self = Self {
|
||||||
background: Color::WHITE,
|
background: Color::WHITE,
|
||||||
text: Color::BLACK,
|
text: Color::BLACK,
|
||||||
primary: Color::from_rgb(
|
primary: color!(0x5e7ce2),
|
||||||
0x5E as f32 / 255.0,
|
success: color!(0x12664f),
|
||||||
0x7C as f32 / 255.0,
|
warning: color!(0xffc14e),
|
||||||
0xE2 as f32 / 255.0,
|
danger: color!(0xc3423f),
|
||||||
),
|
|
||||||
success: Color::from_rgb(
|
|
||||||
0x12 as f32 / 255.0,
|
|
||||||
0x66 as f32 / 255.0,
|
|
||||||
0x4F as f32 / 255.0,
|
|
||||||
),
|
|
||||||
warning: Color::from_rgb(
|
|
||||||
0xFF as f32 / 255.0,
|
|
||||||
0xC1 as f32 / 255.0,
|
|
||||||
0x4E as f32 / 255.0,
|
|
||||||
),
|
|
||||||
danger: Color::from_rgb(
|
|
||||||
0xC3 as f32 / 255.0,
|
|
||||||
0x42 as f32 / 255.0,
|
|
||||||
0x3F as f32 / 255.0,
|
|
||||||
),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/// The built-in dark variant of a [`Palette`].
|
/// The built-in dark variant of a [`Palette`].
|
||||||
pub const DARK: Self = Self {
|
pub const DARK: Self = Self {
|
||||||
background: Color::from_rgb(
|
background: color!(0x202225),
|
||||||
0x20 as f32 / 255.0,
|
|
||||||
0x22 as f32 / 255.0,
|
|
||||||
0x25 as f32 / 255.0,
|
|
||||||
),
|
|
||||||
text: Color::from_rgb(0.90, 0.90, 0.90),
|
text: Color::from_rgb(0.90, 0.90, 0.90),
|
||||||
primary: Color::from_rgb(
|
primary: color!(0x5e7ce2),
|
||||||
0x5E as f32 / 255.0,
|
success: color!(0x12664f),
|
||||||
0x7C as f32 / 255.0,
|
warning: color!(0xffc14e),
|
||||||
0xE2 as f32 / 255.0,
|
danger: color!(0xc3423f),
|
||||||
),
|
|
||||||
success: Color::from_rgb(
|
|
||||||
0x12 as f32 / 255.0,
|
|
||||||
0x66 as f32 / 255.0,
|
|
||||||
0x4F as f32 / 255.0,
|
|
||||||
),
|
|
||||||
warning: Color::from_rgb(
|
|
||||||
0xFF as f32 / 255.0,
|
|
||||||
0xC1 as f32 / 255.0,
|
|
||||||
0x4E as f32 / 255.0,
|
|
||||||
),
|
|
||||||
danger: Color::from_rgb(
|
|
||||||
0xC3 as f32 / 255.0,
|
|
||||||
0x42 as f32 / 255.0,
|
|
||||||
0x3F as f32 / 255.0,
|
|
||||||
),
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/// The built-in [Dracula] variant of a [`Palette`].
|
/// The built-in [Dracula] variant of a [`Palette`].
|
||||||
|
|
|
||||||
|
|
@ -3,7 +3,7 @@ use iced::theme;
|
||||||
use iced::widget::{
|
use iced::widget::{
|
||||||
checkbox, column, container, horizontal_space, row, slider, text,
|
checkbox, column, container, horizontal_space, row, slider, text,
|
||||||
};
|
};
|
||||||
use iced::{Center, Color, Element, Fill, Radians, Theme};
|
use iced::{color, Center, Color, Element, Fill, Radians, Theme};
|
||||||
|
|
||||||
pub fn main() -> iced::Result {
|
pub fn main() -> iced::Result {
|
||||||
tracing_subscriber::fmt::init();
|
tracing_subscriber::fmt::init();
|
||||||
|
|
@ -34,7 +34,7 @@ impl Gradient {
|
||||||
fn new() -> Self {
|
fn new() -> Self {
|
||||||
Self {
|
Self {
|
||||||
start: Color::WHITE,
|
start: Color::WHITE,
|
||||||
end: Color::new(0.0, 0.0, 1.0, 1.0),
|
end: color!(0x0000ff),
|
||||||
angle: Radians(0.0),
|
angle: Radians(0.0),
|
||||||
transparent: false,
|
transparent: false,
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -423,7 +423,7 @@ impl Renderer {
|
||||||
renderer.fill_text(
|
renderer.fill_text(
|
||||||
text.clone(),
|
text.clone(),
|
||||||
Point::new(11.0, 11.0 + 25.0 * i as f32),
|
Point::new(11.0, 11.0 + 25.0 * i as f32),
|
||||||
Color::new(0.9, 0.9, 0.9, 1.0),
|
Color::from_rgba(0.9, 0.9, 0.9, 1.0),
|
||||||
Rectangle::with_size(Size::INFINITY),
|
Rectangle::with_size(Size::INFINITY),
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue