mirror of
https://github.com/servo/servo.git
synced 2025-06-25 01:24:37 +01:00
Move ToComputedValue impl of color types into specified::color.
This commit is contained in:
parent
a7dda61158
commit
b7d8fd0ff5
2 changed files with 82 additions and 81 deletions
|
@ -360,86 +360,6 @@ impl ToCss for Time {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
impl ToComputedValue for specified::Color {
|
|
||||||
type ComputedValue = RGBA;
|
|
||||||
|
|
||||||
#[cfg(not(feature = "gecko"))]
|
|
||||||
fn to_computed_value(&self, context: &Context) -> RGBA {
|
|
||||||
match *self {
|
|
||||||
specified::Color::RGBA(rgba) => rgba,
|
|
||||||
specified::Color::CurrentColor => context.inherited_style.get_color().clone_color(),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg(feature = "gecko")]
|
|
||||||
fn to_computed_value(&self, context: &Context) -> RGBA {
|
|
||||||
use gecko::values::convert_nscolor_to_rgba as to_rgba;
|
|
||||||
// It's safe to access the nsPresContext immutably during style computation.
|
|
||||||
let pres_context = unsafe { &*context.device.pres_context };
|
|
||||||
match *self {
|
|
||||||
specified::Color::RGBA(rgba) => rgba,
|
|
||||||
specified::Color::System(system) => to_rgba(system.to_computed_value(context)),
|
|
||||||
specified::Color::CurrentColor => context.inherited_style.get_color().clone_color(),
|
|
||||||
specified::Color::MozDefaultColor => to_rgba(pres_context.mDefaultColor),
|
|
||||||
specified::Color::MozDefaultBackgroundColor => to_rgba(pres_context.mBackgroundColor),
|
|
||||||
specified::Color::MozHyperlinktext => to_rgba(pres_context.mLinkColor),
|
|
||||||
specified::Color::MozActiveHyperlinktext => to_rgba(pres_context.mActiveLinkColor),
|
|
||||||
specified::Color::MozVisitedHyperlinktext => to_rgba(pres_context.mVisitedLinkColor),
|
|
||||||
specified::Color::InheritFromBodyQuirk => {
|
|
||||||
use dom::TElement;
|
|
||||||
use gecko::wrapper::GeckoElement;
|
|
||||||
use gecko_bindings::bindings::Gecko_GetBody;
|
|
||||||
let body = unsafe {
|
|
||||||
Gecko_GetBody(pres_context)
|
|
||||||
};
|
|
||||||
if let Some(body) = body {
|
|
||||||
let wrap = GeckoElement(body);
|
|
||||||
let borrow = wrap.borrow_data();
|
|
||||||
borrow.as_ref().unwrap()
|
|
||||||
.styles().primary.values()
|
|
||||||
.get_color()
|
|
||||||
.clone_color()
|
|
||||||
} else {
|
|
||||||
to_rgba(pres_context.mDefaultColor)
|
|
||||||
}
|
|
||||||
},
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn from_computed_value(computed: &RGBA) -> Self {
|
|
||||||
specified::Color::RGBA(*computed)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
impl ToComputedValue for specified::CSSColor {
|
|
||||||
type ComputedValue = CSSColor;
|
|
||||||
|
|
||||||
#[cfg(not(feature = "gecko"))]
|
|
||||||
#[inline]
|
|
||||||
fn to_computed_value(&self, _context: &Context) -> CSSColor {
|
|
||||||
self.parsed
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg(feature = "gecko")]
|
|
||||||
#[inline]
|
|
||||||
fn to_computed_value(&self, context: &Context) -> CSSColor {
|
|
||||||
match self.parsed {
|
|
||||||
specified::Color::RGBA(rgba) => CSSColor::RGBA(rgba),
|
|
||||||
specified::Color::CurrentColor => CSSColor::CurrentColor,
|
|
||||||
// Resolve non-standard -moz keywords to RGBA:
|
|
||||||
non_standard => CSSColor::RGBA(non_standard.to_computed_value(context)),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[inline]
|
|
||||||
fn from_computed_value(computed: &CSSColor) -> Self {
|
|
||||||
(match *computed {
|
|
||||||
CSSColor::RGBA(rgba) => specified::Color::RGBA(rgba),
|
|
||||||
CSSColor::CurrentColor => specified::Color::CurrentColor,
|
|
||||||
}).into()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#[cfg(feature = "gecko")]
|
#[cfg(feature = "gecko")]
|
||||||
impl ToComputedValue for specified::JustifyItems {
|
impl ToComputedValue for specified::JustifyItems {
|
||||||
type ComputedValue = JustifyItems;
|
type ComputedValue = JustifyItems;
|
||||||
|
|
|
@ -4,13 +4,14 @@
|
||||||
|
|
||||||
//! Specified color values.
|
//! Specified color values.
|
||||||
|
|
||||||
use cssparser::{self, Parser, Token};
|
use cssparser::{self, Color as CSSParserColor, Parser, RGBA, Token};
|
||||||
use itoa;
|
use itoa;
|
||||||
use parser::{ParserContext, Parse};
|
use parser::{ParserContext, Parse};
|
||||||
use std::fmt;
|
use std::fmt;
|
||||||
use std::io::Write;
|
use std::io::Write;
|
||||||
use style_traits::ToCss;
|
use style_traits::ToCss;
|
||||||
use super::AllowQuirks;
|
use super::AllowQuirks;
|
||||||
|
use values::computed::{Context, ToComputedValue};
|
||||||
|
|
||||||
#[cfg(not(feature = "gecko"))] pub use self::servo::Color;
|
#[cfg(not(feature = "gecko"))] pub use self::servo::Color;
|
||||||
#[cfg(feature = "gecko")] pub use self::gecko::Color;
|
#[cfg(feature = "gecko")] pub use self::gecko::Color;
|
||||||
|
@ -250,3 +251,83 @@ impl CSSColor {
|
||||||
Color::RGBA(cssparser::RGBA::transparent()).into()
|
Color::RGBA(cssparser::RGBA::transparent()).into()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl ToComputedValue for Color {
|
||||||
|
type ComputedValue = RGBA;
|
||||||
|
|
||||||
|
#[cfg(not(feature = "gecko"))]
|
||||||
|
fn to_computed_value(&self, context: &Context) -> RGBA {
|
||||||
|
match *self {
|
||||||
|
Color::RGBA(rgba) => rgba,
|
||||||
|
Color::CurrentColor => context.inherited_style.get_color().clone_color(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "gecko")]
|
||||||
|
fn to_computed_value(&self, context: &Context) -> RGBA {
|
||||||
|
use gecko::values::convert_nscolor_to_rgba as to_rgba;
|
||||||
|
// It's safe to access the nsPresContext immutably during style computation.
|
||||||
|
let pres_context = unsafe { &*context.device.pres_context };
|
||||||
|
match *self {
|
||||||
|
Color::RGBA(rgba) => rgba,
|
||||||
|
Color::System(system) => to_rgba(system.to_computed_value(context)),
|
||||||
|
Color::CurrentColor => context.inherited_style.get_color().clone_color(),
|
||||||
|
Color::MozDefaultColor => to_rgba(pres_context.mDefaultColor),
|
||||||
|
Color::MozDefaultBackgroundColor => to_rgba(pres_context.mBackgroundColor),
|
||||||
|
Color::MozHyperlinktext => to_rgba(pres_context.mLinkColor),
|
||||||
|
Color::MozActiveHyperlinktext => to_rgba(pres_context.mActiveLinkColor),
|
||||||
|
Color::MozVisitedHyperlinktext => to_rgba(pres_context.mVisitedLinkColor),
|
||||||
|
Color::InheritFromBodyQuirk => {
|
||||||
|
use dom::TElement;
|
||||||
|
use gecko::wrapper::GeckoElement;
|
||||||
|
use gecko_bindings::bindings::Gecko_GetBody;
|
||||||
|
let body = unsafe {
|
||||||
|
Gecko_GetBody(pres_context)
|
||||||
|
};
|
||||||
|
if let Some(body) = body {
|
||||||
|
let wrap = GeckoElement(body);
|
||||||
|
let borrow = wrap.borrow_data();
|
||||||
|
borrow.as_ref().unwrap()
|
||||||
|
.styles().primary.values()
|
||||||
|
.get_color()
|
||||||
|
.clone_color()
|
||||||
|
} else {
|
||||||
|
to_rgba(pres_context.mDefaultColor)
|
||||||
|
}
|
||||||
|
},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
fn from_computed_value(computed: &RGBA) -> Self {
|
||||||
|
Color::RGBA(*computed)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
impl ToComputedValue for CSSColor {
|
||||||
|
type ComputedValue = CSSParserColor;
|
||||||
|
|
||||||
|
#[cfg(not(feature = "gecko"))]
|
||||||
|
#[inline]
|
||||||
|
fn to_computed_value(&self, _context: &Context) -> CSSParserColor {
|
||||||
|
self.parsed
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(feature = "gecko")]
|
||||||
|
#[inline]
|
||||||
|
fn to_computed_value(&self, context: &Context) -> CSSParserColor {
|
||||||
|
match self.parsed {
|
||||||
|
Color::RGBA(rgba) => CSSParserColor::RGBA(rgba),
|
||||||
|
Color::CurrentColor => CSSParserColor::CurrentColor,
|
||||||
|
// Resolve non-standard -moz keywords to RGBA:
|
||||||
|
non_standard => CSSParserColor::RGBA(non_standard.to_computed_value(context)),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[inline]
|
||||||
|
fn from_computed_value(computed: &CSSParserColor) -> Self {
|
||||||
|
(match *computed {
|
||||||
|
CSSParserColor::RGBA(rgba) => Color::RGBA(rgba),
|
||||||
|
CSSParserColor::CurrentColor => Color::CurrentColor,
|
||||||
|
}).into()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue