style: Fix ToResolvedValue implementation for caret-color, and serialize some color properties with Servo.

Differential Revision: https://phabricator.services.mozilla.com/D26785
This commit is contained in:
Emilio Cobos Álvarez 2019-04-10 12:10:49 +00:00
parent 5fd4e17020
commit 0f57b7b833
3 changed files with 48 additions and 20 deletions

View file

@ -99,7 +99,6 @@ impl<RGBA> From<RGBA> for Color<RGBA> {
ToAnimatedZero,
ToComputedValue,
ToCss,
ToResolvedValue,
ToShmem,
)]
#[repr(C, u8)]

View file

@ -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))
}
}

View file

@ -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)
}
}