1 /* This Source Code Form is subject to the terms of the Mozilla Public
2  * License, v. 2.0. If a copy of the MPL was not distributed with this
3  * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4 
5 //! Resolved color values.
6 
7 use super::{Context, ToResolvedValue};
8 
9 use crate::values::computed::color as computed;
10 use crate::values::generics::color as generics;
11 
12 impl ToResolvedValue for computed::Color {
13     // A resolved color value is an rgba color, with currentcolor resolved.
14     type ResolvedValue = cssparser::RGBA;
15 
16     #[inline]
to_resolved_value(self, context: &Context) -> Self::ResolvedValue17     fn to_resolved_value(self, context: &Context) -> Self::ResolvedValue {
18         context.style.resolve_color(self)
19     }
20 
21     #[inline]
from_resolved_value(resolved: Self::ResolvedValue) -> Self22     fn from_resolved_value(resolved: Self::ResolvedValue) -> Self {
23         generics::Color::rgba(resolved)
24     }
25 }
26 
27 impl ToResolvedValue for computed::CaretColor {
28     // A resolved caret-color value is an rgba color, with auto resolving to
29     // currentcolor.
30     type ResolvedValue = cssparser::RGBA;
31 
32     #[inline]
to_resolved_value(self, context: &Context) -> Self::ResolvedValue33     fn to_resolved_value(self, context: &Context) -> Self::ResolvedValue {
34         let color = match self.0 {
35             generics::ColorOrAuto::Color(color) => color,
36             generics::ColorOrAuto::Auto => generics::Color::currentcolor(),
37         };
38         color.to_resolved_value(context)
39     }
40 
41     #[inline]
from_resolved_value(resolved: Self::ResolvedValue) -> Self42     fn from_resolved_value(resolved: Self::ResolvedValue) -> Self {
43         generics::CaretColor(generics::ColorOrAuto::Color(
44             computed::Color::from_resolved_value(resolved),
45         ))
46     }
47 }
48