From b67a7ad0dc4e18e05e11b89ed23441c8b45d42dc Mon Sep 17 00:00:00 2001 From: Tiaan Louw Date: Fri, 9 Dec 2022 20:04:26 +0100 Subject: [PATCH] Ensure serialization takes precision into account. --- src/color.rs | 4 ++-- src/tests.rs | 7 +++++++ 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/color.rs b/src/color.rs index b912f122..34830782 100644 --- a/src/color.rs +++ b/src/color.rs @@ -16,7 +16,7 @@ const OPAQUE: f32 = 1.0; #[inline] fn serialize_alpha(dest: &mut impl fmt::Write, alpha: f32, legacy_syntax: bool) -> fmt::Result { // If the alpha component is full opaque, don't emit the alpha value in CSS. - if alpha == OPAQUE { + if clamp_unit_f32(alpha) == 255 { return Ok(()); } @@ -159,7 +159,7 @@ impl ToCss for RGBA { where W: fmt::Write, { - let has_alpha = self.alpha != OPAQUE; + let has_alpha = clamp_unit_f32(self.alpha) != 255; dest.write_str(if has_alpha { "rgba(" } else { "rgb(" })?; self.red.to_css(dest)?; diff --git a/src/tests.rs b/src/tests.rs index e5d2f792..070ff308 100644 --- a/src/tests.rs +++ b/src/tests.rs @@ -572,6 +572,13 @@ fn serialize_rgb_full_alpha() { fn serialize_rgba() { let c = rgba(26, 51, 77, 0.125); assert_eq!(c.to_css_string(), "rgba(26, 51, 77, 0.125)"); + + let c = rgba(26, 51, 77, 0.99); + assert_eq!(c.to_css_string(), "rgba(26, 51, 77, 0.99)"); + let c = rgba(26, 51, 77, 0.999); + assert_eq!(c.to_css_string(), "rgb(26, 51, 77)"); + let c = rgba(26, 51, 77, 0.9999); + assert_eq!(c.to_css_string(), "rgb(26, 51, 77)"); } #[test]