From 0f57b7b83307862ce91351262638db9ee59c5aa8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emilio=20Cobos=20=C3=81lvarez?= Date: Wed, 10 Apr 2019 12:10:49 +0000 Subject: [PATCH] style: Fix ToResolvedValue implementation for caret-color, and serialize some color properties with Servo. Differential Revision: https://phabricator.services.mozilla.com/D26785 --- components/style/values/generics/color.rs | 1 - components/style/values/resolved/color.rs | 45 +++++++++++++++++++++++ components/style/values/resolved/mod.rs | 22 ++--------- 3 files changed, 48 insertions(+), 20 deletions(-) create mode 100644 components/style/values/resolved/color.rs diff --git a/components/style/values/generics/color.rs b/components/style/values/generics/color.rs index 0f67f4eb7ca..5aa287baadf 100644 --- a/components/style/values/generics/color.rs +++ b/components/style/values/generics/color.rs @@ -99,7 +99,6 @@ impl From for Color { ToAnimatedZero, ToComputedValue, ToCss, - ToResolvedValue, ToShmem, )] #[repr(C, u8)] diff --git a/components/style/values/resolved/color.rs b/components/style/values/resolved/color.rs new file mode 100644 index 00000000000..1b845c58e9f --- /dev/null +++ b/components/style/values/resolved/color.rs @@ -0,0 +1,45 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ + +//! Resolved color values. + +use super::{Context, ToResolvedValue}; + +use crate::values::computed; +use crate::values::generics::color as generics; + +impl ToResolvedValue for computed::Color { + // A resolved color value is an rgba color, with currentcolor resolved. + type ResolvedValue = cssparser::RGBA; + + #[inline] + fn to_resolved_value(self, context: &Context) -> Self::ResolvedValue { + context.style.resolve_color(self) + } + + #[inline] + fn from_resolved_value(resolved: Self::ResolvedValue) -> Self { + generics::Color::Numeric(resolved) + } +} + +impl ToResolvedValue for computed::ColorOrAuto { + // A resolved caret-color value is an rgba color, with auto resolving to + // currentcolor. + type ResolvedValue = cssparser::RGBA; + + #[inline] + fn to_resolved_value(self, context: &Context) -> Self::ResolvedValue { + let color = match self { + generics::ColorOrAuto::Color(color) => color, + generics::ColorOrAuto::Auto => generics::Color::CurrentColor, + }; + color.to_resolved_value(context) + } + + #[inline] + fn from_resolved_value(resolved: Self::ResolvedValue) -> Self { + generics::ColorOrAuto::Color(computed::Color::from_resolved_value(resolved)) + } +} diff --git a/components/style/values/resolved/mod.rs b/components/style/values/resolved/mod.rs index 8d5aa221157..33609cbd89d 100644 --- a/components/style/values/resolved/mod.rs +++ b/components/style/values/resolved/mod.rs @@ -8,6 +8,9 @@ use cssparser; use smallvec::SmallVec; use crate::properties::ComputedValues; + +mod color; + use crate::values::computed; /// Information needed to resolve a given value. @@ -187,22 +190,3 @@ where Vec::from_resolved_value(Vec::from(resolved)).into_boxed_slice() } } - - -/// A resolved color value is an rgba color, with currentcolor resolved. -pub type Color = cssparser::RGBA; - -impl ToResolvedValue for computed::Color { - type ResolvedValue = Color; - - #[inline] - fn to_resolved_value(self, context: &Context) -> Self::ResolvedValue { - context.style.resolve_color(self) - } - - #[inline] - fn from_resolved_value(resolved: Self::ResolvedValue) -> Self { - use crate::values::generics::color::Color as GenericColor; - GenericColor::Numeric(resolved) - } -}