From 74648fb79e9e65656cb199c3b1fd68145c168051 Mon Sep 17 00:00:00 2001 From: Diggory Hardy Date: Tue, 27 Aug 2024 13:58:10 +0100 Subject: [PATCH] Rgba8Srgb::[try_]parse_srgb methods: remove redundant stem and take &str --- crates/kas-core/src/draw/color.rs | 22 +++++---- crates/kas-core/src/theme/colors.rs | 72 ++++++++++++++--------------- examples/clock.rs | 2 +- 3 files changed, 49 insertions(+), 47 deletions(-) diff --git a/crates/kas-core/src/draw/color.rs b/crates/kas-core/src/draw/color.rs index 8a919bf85..d577940a8 100644 --- a/crates/kas-core/src/draw/color.rs +++ b/crates/kas-core/src/draw/color.rs @@ -266,7 +266,8 @@ impl Rgba8Srgb { } /// Compile-time parser for sRGB and sRGBA colours - pub const fn try_parse_srgb(s: &[u8]) -> Result { + pub const fn try_parse(s: &str) -> Result { + let s = s.as_bytes(); if s.len() != 6 && s.len() != 8 { return Err(ParseError::Length); } @@ -303,11 +304,11 @@ impl Rgba8Srgb { /// Compile-time parser for sRGB and sRGBA colours /// - /// This method has worse diagnostics on error due to limited const- - pub const fn parse_srgb(s: &[u8]) -> Rgba8Srgb { - match Self::try_parse_srgb(s) { + /// This method has worse diagnostics on error due to limited error handling in `const fn`. + pub const fn parse(s: &str) -> Rgba8Srgb { + match Self::try_parse(s) { Ok(result) => result, - Err(ParseError::Length) => panic!("invalid length (expected 6 or 8 bytes"), + Err(ParseError::Length) => panic!("invalid length (expected 6 or 8 bytes)"), Err(ParseError::InvalidHex) => panic!("invalid hex byte (expected 0-9, a-f or A-F)"), } } @@ -345,12 +346,13 @@ pub enum ParseError { impl std::str::FromStr for Rgba8Srgb { type Err = ParseError; - fn from_str(s: &str) -> Result { - let mut s = s.as_bytes(); - if s[0] == b'#' { - s = &s[1..]; + fn from_str(mut s: &str) -> Result { + if s.starts_with("#") { + let a; + (a, s) = s.split_at(1); + debug_assert_eq!(a, "#"); } - Rgba8Srgb::try_parse_srgb(&s) + Rgba8Srgb::try_parse(s) } } diff --git a/crates/kas-core/src/theme/colors.rs b/crates/kas-core/src/theme/colors.rs index 067ae6ac2..5de90c334 100644 --- a/crates/kas-core/src/theme/colors.rs +++ b/crates/kas-core/src/theme/colors.rs @@ -226,52 +226,52 @@ impl ColorsSrgb { /// Default "light" scheme pub const LIGHT: ColorsSrgb = Colors { is_dark: false, - background: Rgba8Srgb::parse_srgb(b"FAFAFA"), - frame: Rgba8Srgb::parse_srgb(b"BCBCBC"), - accent: Rgba8Srgb::parse_srgb(b"8347f2"), - accent_soft: Rgba8Srgb::parse_srgb(b"B38DF9"), - nav_focus: Rgba8Srgb::parse_srgb(b"7E3FF2"), - edit_bg: Rgba8Srgb::parse_srgb(b"FAFAFA"), - edit_bg_disabled: Rgba8Srgb::parse_srgb(b"DCDCDC"), - edit_bg_error: Rgba8Srgb::parse_srgb(b"FFBCBC"), - text: Rgba8Srgb::parse_srgb(b"000000"), - text_invert: Rgba8Srgb::parse_srgb(b"FFFFFF"), - text_disabled: Rgba8Srgb::parse_srgb(b"AAAAAA"), - text_sel_bg: Rgba8Srgb::parse_srgb(b"A172FA"), + background: Rgba8Srgb::parse("FAFAFA"), + frame: Rgba8Srgb::parse("BCBCBC"), + accent: Rgba8Srgb::parse("8347f2"), + accent_soft: Rgba8Srgb::parse("B38DF9"), + nav_focus: Rgba8Srgb::parse("7E3FF2"), + edit_bg: Rgba8Srgb::parse("FAFAFA"), + edit_bg_disabled: Rgba8Srgb::parse("DCDCDC"), + edit_bg_error: Rgba8Srgb::parse("FFBCBC"), + text: Rgba8Srgb::parse("000000"), + text_invert: Rgba8Srgb::parse("FFFFFF"), + text_disabled: Rgba8Srgb::parse("AAAAAA"), + text_sel_bg: Rgba8Srgb::parse("A172FA"), }; /// Dark scheme pub const DARK: ColorsSrgb = Colors { is_dark: true, - background: Rgba8Srgb::parse_srgb(b"404040"), - frame: Rgba8Srgb::parse_srgb(b"AAAAAA"), - accent: Rgba8Srgb::parse_srgb(b"F74C00"), - accent_soft: Rgba8Srgb::parse_srgb(b"E77346"), - nav_focus: Rgba8Srgb::parse_srgb(b"D03E00"), - edit_bg: Rgba8Srgb::parse_srgb(b"303030"), - edit_bg_disabled: Rgba8Srgb::parse_srgb(b"606060"), - edit_bg_error: Rgba8Srgb::parse_srgb(b"a06868"), - text: Rgba8Srgb::parse_srgb(b"FFFFFF"), - text_invert: Rgba8Srgb::parse_srgb(b"000000"), - text_disabled: Rgba8Srgb::parse_srgb(b"CBCBCB"), - text_sel_bg: Rgba8Srgb::parse_srgb(b"E77346"), + background: Rgba8Srgb::parse("404040"), + frame: Rgba8Srgb::parse("AAAAAA"), + accent: Rgba8Srgb::parse("F74C00"), + accent_soft: Rgba8Srgb::parse("E77346"), + nav_focus: Rgba8Srgb::parse("D03E00"), + edit_bg: Rgba8Srgb::parse("303030"), + edit_bg_disabled: Rgba8Srgb::parse("606060"), + edit_bg_error: Rgba8Srgb::parse("a06868"), + text: Rgba8Srgb::parse("FFFFFF"), + text_invert: Rgba8Srgb::parse("000000"), + text_disabled: Rgba8Srgb::parse("CBCBCB"), + text_sel_bg: Rgba8Srgb::parse("E77346"), }; /// Blue scheme pub const BLUE: ColorsSrgb = Colors { is_dark: false, - background: Rgba8Srgb::parse_srgb(b"FFFFFF"), - frame: Rgba8Srgb::parse_srgb(b"DADADA"), - accent: Rgba8Srgb::parse_srgb(b"3fafd7"), - accent_soft: Rgba8Srgb::parse_srgb(b"7CDAFF"), - nav_focus: Rgba8Srgb::parse_srgb(b"3B697A"), - edit_bg: Rgba8Srgb::parse_srgb(b"FFFFFF"), - edit_bg_disabled: Rgba8Srgb::parse_srgb(b"DCDCDC"), - edit_bg_error: Rgba8Srgb::parse_srgb(b"FFBCBC"), - text: Rgba8Srgb::parse_srgb(b"000000"), - text_invert: Rgba8Srgb::parse_srgb(b"FFFFFF"), - text_disabled: Rgba8Srgb::parse_srgb(b"AAAAAA"), - text_sel_bg: Rgba8Srgb::parse_srgb(b"6CC0E1"), + background: Rgba8Srgb::parse("FFFFFF"), + frame: Rgba8Srgb::parse("DADADA"), + accent: Rgba8Srgb::parse("3fafd7"), + accent_soft: Rgba8Srgb::parse("7CDAFF"), + nav_focus: Rgba8Srgb::parse("3B697A"), + edit_bg: Rgba8Srgb::parse("FFFFFF"), + edit_bg_disabled: Rgba8Srgb::parse("DCDCDC"), + edit_bg_error: Rgba8Srgb::parse("FFBCBC"), + text: Rgba8Srgb::parse("000000"), + text_invert: Rgba8Srgb::parse("FFFFFF"), + text_disabled: Rgba8Srgb::parse("AAAAAA"), + text_sel_bg: Rgba8Srgb::parse("6CC0E1"), }; } diff --git a/examples/clock.rs b/examples/clock.rs index b8b96a605..e168ca82a 100644 --- a/examples/clock.rs +++ b/examples/clock.rs @@ -69,7 +69,7 @@ impl_scope! { } fn draw(&mut self, mut draw: DrawCx) { - let accent: Rgba = Rgba8Srgb::parse_srgb(b"d7916f").into(); + let accent: Rgba = Rgba8Srgb::parse("d7916f").into(); let col_back = Rgba::ga(0.0, 0.5); let col_face = accent.multiply(0.4); let col_time = Rgba::grey(1.0);