From efa75607baa073aba333ab0bfdee1e490a016097 Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Sun, 7 Apr 2024 18:52:07 +0200 Subject: Revert "Merge pull request #2376 from Davidster/fix_palette_readable_color_contrast" This reverts commit 63042354fc51884098f88e240f73e689295df31c, reversing changes made to 31d1d5fecbef50fa319cabd5d4194f1e4aaefa21. --- core/src/theme/palette.rs | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) (limited to 'core/src') diff --git a/core/src/theme/palette.rs b/core/src/theme/palette.rs index 91543567..ca91c248 100644 --- a/core/src/theme/palette.rs +++ b/core/src/theme/palette.rs @@ -612,19 +612,11 @@ fn mix(a: Color, b: Color, factor: f32) -> Color { fn readable(background: Color, text: Color) -> Color { if is_readable(background, text) { - return text; - } - - let fallback = if is_dark(background) { + text + } else if is_dark(background) { Color::WHITE } else { Color::BLACK - }; - - if is_readable(background, fallback) { - fallback - } else { - fallback.inverse() } } -- cgit From ee86aea7f298c0bdc72733b47c40270ff38c2ba6 Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Sun, 7 Apr 2024 19:32:49 +0200 Subject: Use `Lch` to choose white text when not readable in `theme::palette` --- core/src/theme/palette.rs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'core/src') diff --git a/core/src/theme/palette.rs b/core/src/theme/palette.rs index ca91c248..aca72eb0 100644 --- a/core/src/theme/palette.rs +++ b/core/src/theme/palette.rs @@ -4,7 +4,7 @@ use crate::{color, Color}; use once_cell::sync::Lazy; use palette::color_difference::Wcag21RelativeContrast; use palette::rgb::Rgb; -use palette::{FromColor, Hsl, Mix}; +use palette::{FromColor, Hsl, Lch, Mix}; /// A color palette. #[derive(Debug, Clone, Copy, PartialEq)] @@ -613,7 +613,7 @@ fn mix(a: Color, b: Color, factor: f32) -> Color { fn readable(background: Color, text: Color) -> Color { if is_readable(background, text) { text - } else if is_dark(background) { + } else if to_lch(background).l < 70.0 { Color::WHITE } else { Color::BLACK @@ -635,6 +635,10 @@ fn to_hsl(color: Color) -> Hsl { Hsl::from_color(Rgb::from(color)) } +fn to_lch(color: Color) -> Lch { + Lch::from_color(Rgb::from(color)) +} + fn from_hsl(hsl: Hsl) -> Color { Rgb::from_color(hsl).into() } -- cgit From 72b975ec82660b39f27b6cb015b763caf20e6483 Mon Sep 17 00:00:00 2001 From: Héctor Ramón Jiménez Date: Sun, 7 Apr 2024 19:37:35 +0200 Subject: Pick best contrast between black/white in `theme::palette` --- core/src/theme/palette.rs | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) (limited to 'core/src') diff --git a/core/src/theme/palette.rs b/core/src/theme/palette.rs index aca72eb0..e0ff397a 100644 --- a/core/src/theme/palette.rs +++ b/core/src/theme/palette.rs @@ -4,7 +4,7 @@ use crate::{color, Color}; use once_cell::sync::Lazy; use palette::color_difference::Wcag21RelativeContrast; use palette::rgb::Rgb; -use palette::{FromColor, Hsl, Lch, Mix}; +use palette::{FromColor, Hsl, Mix}; /// A color palette. #[derive(Debug, Clone, Copy, PartialEq)] @@ -613,10 +613,15 @@ fn mix(a: Color, b: Color, factor: f32) -> Color { fn readable(background: Color, text: Color) -> Color { if is_readable(background, text) { text - } else if to_lch(background).l < 70.0 { - Color::WHITE } else { - Color::BLACK + let white_contrast = relative_contrast(background, Color::WHITE); + let black_contrast = relative_contrast(background, Color::BLACK); + + if white_contrast >= black_contrast { + Color::WHITE + } else { + Color::BLACK + } } } @@ -631,12 +636,15 @@ fn is_readable(a: Color, b: Color) -> bool { a_srgb.has_enhanced_contrast_text(b_srgb) } -fn to_hsl(color: Color) -> Hsl { - Hsl::from_color(Rgb::from(color)) +fn relative_contrast(a: Color, b: Color) -> f32 { + let a_srgb = Rgb::from(a); + let b_srgb = Rgb::from(b); + + a_srgb.relative_contrast(b_srgb) } -fn to_lch(color: Color) -> Lch { - Lch::from_color(Rgb::from(color)) +fn to_hsl(color: Color) -> Hsl { + Hsl::from_color(Rgb::from(color)) } fn from_hsl(hsl: Hsl) -> Color { -- cgit