diff options
author | 2023-05-31 21:31:58 +0200 | |
---|---|---|
committer | 2023-05-31 21:31:58 +0200 | |
commit | faa7627ea41b1ce372bae7f0d2ae36e9b15a97a3 (patch) | |
tree | a4e8dfb4fb901bdf8fa401b45601af6cf44c4567 /graphics/src/gradient.rs | |
parent | b5f102c55835cf42427f9f8672634e81a5d724f6 (diff) | |
download | iced-faa7627ea41b1ce372bae7f0d2ae36e9b15a97a3.tar.gz iced-faa7627ea41b1ce372bae7f0d2ae36e9b15a97a3.tar.bz2 iced-faa7627ea41b1ce372bae7f0d2ae36e9b15a97a3.zip |
Introduce `web-colors` feature flag to enable sRGB linear blending
This is how browsers perform color management. They treat
gamma-corrected sRGB colors as if they were linear RGB.
Correctness aside, this mode is introduced for legacy reasons. Most
UI/UX tooling uses this color management as well, and many have created
an intuition about how color should behave from interacting with a
browser.
This feature flag should facilitate application development with `iced`
in those cases.
More details: https://webcolorisstillbroken.com/
Diffstat (limited to 'graphics/src/gradient.rs')
-rw-r--r-- | graphics/src/gradient.rs | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/graphics/src/gradient.rs b/graphics/src/gradient.rs index d3eabb6f..d26b5665 100644 --- a/graphics/src/gradient.rs +++ b/graphics/src/gradient.rs @@ -3,8 +3,10 @@ //! For a gradient that you can use as a background variant for a widget, see [`Gradient`]. //! //! [`Gradient`]: crate::core::Gradient; +use crate::color; use crate::core::gradient::ColorStop; use crate::core::{self, Color, Point, Rectangle}; + use std::cmp::Ordering; #[derive(Debug, Clone, PartialEq)] @@ -101,7 +103,8 @@ impl Linear { for (index, stop) in self.stops.iter().enumerate() { let [r, g, b, a] = - stop.map_or(Color::default(), |s| s.color).into_linear(); + color::pack(stop.map_or(Color::default(), |s| s.color)) + .components(); data[index * 4] = r; data[(index * 4) + 1] = g; @@ -133,7 +136,8 @@ pub fn pack(gradient: &core::Gradient, bounds: Rectangle) -> Packed { for (index, stop) in linear.stops.iter().enumerate() { let [r, g, b, a] = - stop.map_or(Color::default(), |s| s.color).into_linear(); + color::pack(stop.map_or(Color::default(), |s| s.color)) + .components(); data[index * 4] = r; data[(index * 4) + 1] = g; |