aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorXidorn Quan <me@upsuper.org>2017-06-08 10:42:22 +1000
committerXidorn Quan <me@upsuper.org>2017-06-08 10:42:22 +1000
commitf3610d2724a19d1451a78e53ec5f27aa267ed3b1 (patch)
tree0e685bd7fedccfd312fce381cf017f414b02dc4d
parentb7d8fd0ff5334ae92fd5de0dead7862fd6418b4b (diff)
downloadservo-f3610d2724a19d1451a78e53ec5f27aa267ed3b1.tar.gz
servo-f3610d2724a19d1451a78e53ec5f27aa267ed3b1.zip
Factor out Gecko-specific color keywords.
-rw-r--r--components/style/values/specified/color.rs53
1 files changed, 24 insertions, 29 deletions
diff --git a/components/style/values/specified/color.rs b/components/style/values/specified/color.rs
index 4d2443e5081..3a3b45651ec 100644
--- a/components/style/values/specified/color.rs
+++ b/components/style/values/specified/color.rs
@@ -37,6 +37,14 @@ mod gecko {
use std::fmt;
use style_traits::ToCss;
+ define_css_keyword_enum! { SpecialColorKeyword:
+ "-moz-default-color" => MozDefaultColor,
+ "-moz-default-background-color" => MozDefaultBackgroundColor,
+ "-moz-hyperlinktext" => MozHyperlinktext,
+ "-moz-activehyperlinktext" => MozActiveHyperlinktext,
+ "-moz-visitedhyperlinktext" => MozVisitedHyperlinktext,
+ }
+
/// Color value including non-standard -moz prefixed values.
#[derive(Clone, Copy, PartialEq, Debug)]
pub enum Color {
@@ -46,16 +54,8 @@ mod gecko {
RGBA(RGBA),
/// A system color
System(SystemColor),
- /// -moz-default-color
- MozDefaultColor,
- /// -moz-default-background-color
- MozDefaultBackgroundColor,
- /// -moz-hyperlinktext
- MozHyperlinktext,
- /// -moz-activehyperlinktext
- MozActiveHyperlinktext,
- /// -moz-visitedhyperlinktext
- MozVisitedHyperlinktext,
+ /// A special color keyword value used in Gecko
+ Special(SpecialColorKeyword),
/// Quirksmode-only rule for inheriting color from the body
InheritFromBodyQuirk,
}
@@ -77,16 +77,10 @@ mod gecko {
Ok(value.into())
} else if let Ok(system) = input.try(SystemColor::parse) {
Ok(Color::System(system))
+ } else if let Ok(special) = input.try(SpecialColorKeyword::parse) {
+ Ok(Color::Special(special))
} else {
- let ident = input.expect_ident()?;
- match_ignore_ascii_case! { &ident,
- "-moz-default-color" => Ok(Color::MozDefaultColor),
- "-moz-default-background-color" => Ok(Color::MozDefaultBackgroundColor),
- "-moz-hyperlinktext" => Ok(Color::MozHyperlinktext),
- "-moz-activehyperlinktext" => Ok(Color::MozActiveHyperlinktext),
- "-moz-visitedhyperlinktext" => Ok(Color::MozVisitedHyperlinktext),
- _ => Err(())
- }
+ Err(())
}
}
}
@@ -100,11 +94,7 @@ mod gecko {
Color::System(system) => system.to_css(dest),
// Non-standard values:
- Color::MozDefaultColor => dest.write_str("-moz-default-color"),
- Color::MozDefaultBackgroundColor => dest.write_str("-moz-default-background-color"),
- Color::MozHyperlinktext => dest.write_str("-moz-hyperlinktext"),
- Color::MozActiveHyperlinktext => dest.write_str("-moz-activehyperlinktext"),
- Color::MozVisitedHyperlinktext => dest.write_str("-moz-visitedhyperlinktext"),
+ Color::Special(special) => special.to_css(dest),
Color::InheritFromBodyQuirk => Ok(()),
}
}
@@ -272,11 +262,16 @@ impl ToComputedValue for Color {
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::Special(special) => {
+ use self::gecko::SpecialColorKeyword as Keyword;
+ to_rgba(match special {
+ Keyword::MozDefaultColor => pres_context.mDefaultColor,
+ Keyword::MozDefaultBackgroundColor => pres_context.mBackgroundColor,
+ Keyword::MozHyperlinktext => pres_context.mLinkColor,
+ Keyword::MozActiveHyperlinktext => pres_context.mActiveLinkColor,
+ Keyword::MozVisitedHyperlinktext => pres_context.mVisitedLinkColor,
+ })
+ }
Color::InheritFromBodyQuirk => {
use dom::TElement;
use gecko::wrapper::GeckoElement;