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