Skip to content

Commit 0c02829

Browse files
committed
💥 Change perceived_lightness to return a float
1 parent 9478682 commit 0c02829

File tree

4 files changed

+19
-25
lines changed

4 files changed

+19
-25
lines changed

crates/pycolorsaurus/src/lib.rs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -197,10 +197,7 @@ impl Color {
197197
self.0.scale_to_8bit().2
198198
}
199199

200-
/// The perceived lightness of the color
201-
/// as a value between 0 (black) and 100 (white)
202-
/// where 50 is the perceptual "middle grey".
203-
fn perceived_lightness(&self) -> u8 {
200+
fn perceived_lightness(&self) -> f32 {
204201
self.0.perceived_lightness()
205202
}
206203

crates/terminal-colorsaurus/src/color.rs

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -12,16 +12,18 @@ pub struct Color {
1212
}
1313

1414
impl Color {
15-
/// The perceived lightness of the color
16-
/// as a value between `0` (black) and `100` (white)
17-
/// where `50` is the perceptual "middle grey".
15+
/// Perceptual lightness (L*) as a value between 0.0 (black) and 1.0 (white)
16+
/// where 0.5 is the perceptual middle gray.
17+
///
18+
/// Note that the color's alpha is ignored.
1819
/// ```
1920
/// # use terminal_colorsaurus::Color;
2021
/// # let color = Color::default();
21-
/// let is_dark = color.perceived_lightness() <= 50;
22+
/// let is_dark = color.perceived_lightness() <= 0.5;
2223
/// ```
23-
pub fn perceived_lightness(&self) -> u8 {
24-
(self.perceived_lightness_f32() * 100.) as u8
24+
pub fn perceived_lightness(&self) -> f32 {
25+
let color = xterm_color::Color::rgb(self.r, self.g, self.b);
26+
color.perceived_lightness()
2527
}
2628

2729
/// Converts the color to 8 bit precision per channel by scaling each channel.
@@ -41,11 +43,6 @@ impl Color {
4143
scale_to_u8(self.b),
4244
)
4345
}
44-
45-
pub(crate) fn perceived_lightness_f32(&self) -> f32 {
46-
let color = xterm_color::Color::rgb(self.r, self.g, self.b);
47-
color.perceived_lightness()
48-
}
4946
}
5047

5148
fn scale_to_u8(channel: u16) -> u8 {
@@ -97,7 +94,7 @@ mod tests {
9794
#[test]
9895
fn black_has_perceived_lightness_zero() {
9996
let black = Color::default();
100-
assert_eq!(0, black.perceived_lightness())
97+
assert_eq!(0.0, black.perceived_lightness())
10198
}
10299

103100
#[test]
@@ -107,6 +104,6 @@ mod tests {
107104
g: u16::MAX,
108105
b: u16::MAX,
109106
};
110-
assert_eq!(100, white.perceived_lightness())
107+
assert_eq!(1.0, white.perceived_lightness())
111108
}
112109
}

crates/terminal-colorsaurus/src/color_scheme_tests.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -54,9 +54,9 @@ mod dark {
5454
#[test]
5555
fn fg_and_bg_both_dark() {
5656
for (foreground, background) in [(DARK_GRAY, DARKER_GRAY), (DARKER_GRAY, BLACK)] {
57-
assert!(foreground.perceived_lightness_f32() < 0.5);
58-
assert!(background.perceived_lightness_f32() < 0.5);
59-
assert!(foreground.perceived_lightness_f32() != background.perceived_lightness_f32());
57+
assert!(foreground.perceived_lightness() < 0.5);
58+
assert!(background.perceived_lightness() < 0.5);
59+
assert!(foreground.perceived_lightness() != background.perceived_lightness());
6060

6161
let palette = ColorPalette {
6262
foreground,
@@ -93,10 +93,10 @@ mod light {
9393
#[test]
9494
fn fg_and_bg_both_light() {
9595
for (foreground, background) in [(LIGHT_GRAY, LIGHTER_GRAY), (LIGHTER_GRAY, WHITE)] {
96-
assert!(foreground.perceived_lightness_f32() > 0.5);
97-
assert!(background.perceived_lightness_f32() > 0.5);
96+
assert!(foreground.perceived_lightness() > 0.5);
97+
assert!(background.perceived_lightness() > 0.5);
9898
assert!(
99-
(foreground.perceived_lightness_f32() - background.perceived_lightness_f32()).abs()
99+
(foreground.perceived_lightness() - background.perceived_lightness()).abs()
100100
>= f32::EPSILON
101101
);
102102

crates/terminal-colorsaurus/src/lib.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -111,8 +111,8 @@ pub enum ColorScheme {
111111
impl ColorPalette {
112112
/// Determines if the terminal uses a dark or light background.
113113
pub fn color_scheme(&self) -> ColorScheme {
114-
let fg = self.foreground.perceived_lightness_f32();
115-
let bg = self.background.perceived_lightness_f32();
114+
let fg = self.foreground.perceived_lightness();
115+
let bg = self.background.perceived_lightness();
116116
if bg < fg {
117117
ColorScheme::Dark
118118
} else if bg > fg || bg > 0.5 {

0 commit comments

Comments
 (0)