author | Xidorn Quan <me@upsuper.org> |
Sun, 29 Apr 2018 09:03:31 +1000 | |
changeset 416182 | 83df94ad2416a8f603acdbdc9fccdfccea90ffba |
parent 416181 | e615f3f0029a0b7b5d169b9dbf7ea61cc86ccfd6 |
child 416183 | b9e4fda9a50f2cc7ab722df3e9549a9b4e653970 |
push id | 33918 |
push user | nerli@mozilla.com |
push date | Sun, 29 Apr 2018 09:47:13 +0000 |
treeherder | mozilla-central@afbec7f03bd8 [default view] [failures only] |
perfherder | [talos] [build metrics] [platform microbench] (compared to previous push) |
reviewers | emilio |
bugs | 1434130 |
milestone | 61.0a1 |
first release with | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
last release without | nightly linux32
nightly linux64
nightly mac
nightly win32
nightly win64
|
servo/components/style/values/specified/color.rs | file | annotate | diff | comparison | revisions | |
servo/ports/geckolib/glue.rs | file | annotate | diff | comparison | revisions |
--- a/servo/components/style/values/specified/color.rs +++ b/servo/components/style/values/specified/color.rs @@ -9,17 +9,17 @@ use cssparser::{BasicParseErrorKind, Num #[cfg(feature = "gecko")] use gecko_bindings::structs::nscolor; use itoa; use parser::{Parse, ParserContext}; #[cfg(feature = "gecko")] use properties::longhands::system_colors::SystemColor; use std::fmt::{self, Write}; use std::io::Write as IoWrite; -use style_traits::{CssType, CssWriter, ParseError, StyleParseErrorKind}; +use style_traits::{CssType, CssWriter, KeywordsCollectFn, ParseError, StyleParseErrorKind}; use style_traits::{SpecifiedValueInfo, ToCss, ValueParseErrorKind}; use super::AllowQuirks; use values::computed::{Color as ComputedColor, Context, ToComputedValue}; use values::specified::calc::CalcNode; /// Specified color value #[derive(Clone, Debug, MallocSizeOf, PartialEq)] pub enum Color { @@ -424,16 +424,25 @@ impl ToComputedValue for RGBAColor { impl From<Color> for RGBAColor { fn from(color: Color) -> RGBAColor { RGBAColor(color) } } impl SpecifiedValueInfo for Color { const SUPPORTED_TYPES: u8 = CssType::COLOR; + + fn collect_completion_keywords(f: KeywordsCollectFn) { + // We are not going to insert all the color names here. Caller and + // devtools should take care of them. XXX Actually, transparent + // should probably be handled that way as well. + // XXX `currentColor` should really be `currentcolor`. But let's + // keep it consistent with the old system for now. + f(&["rgb", "rgba", "hsl", "hsla", "currentColor", "transparent"]); + } } /// Specified value for the "color" property, which resolves the `currentcolor` /// keyword to the parent color instead of self's color. #[cfg_attr(feature = "gecko", derive(MallocSizeOf))] #[derive(Clone, Debug, PartialEq, SpecifiedValueInfo, ToCss)] pub struct ColorPropertyValue(pub Color);
--- a/servo/ports/geckolib/glue.rs +++ b/servo/ports/geckolib/glue.rs @@ -1007,19 +1007,28 @@ pub unsafe extern "C" fn Servo_Property_ found: *mut bool, result: *mut nsTArray<nsStringRepr>, ) { let prop_id = parse_enabled_property_name!(prop_name, found, ()); // Use B-tree set for unique and sorted result. let mut values = BTreeSet::<&'static str>::new(); prop_id.collect_property_completion_keywords(&mut |list| values.extend(list.iter())); + let mut extras = vec![]; + if values.contains("transparent") { + // This is a special value devtools use to avoid inserting the + // long list of color keywords. We need to prepend it to values. + extras.push("COLOR"); + } + let result = result.as_mut().unwrap(); - bindings::Gecko_ResizeTArrayForStrings(result, values.len() as u32); - for (src, dest) in values.iter().zip(result.iter_mut()) { + let len = extras.len() + values.len(); + bindings::Gecko_ResizeTArrayForStrings(result, len as u32); + + for (src, dest) in extras.iter().chain(values.iter()).zip(result.iter_mut()) { dest.write_str(src).unwrap(); } } #[no_mangle] pub extern "C" fn Servo_Property_IsAnimatable(property: nsCSSPropertyID) -> bool { use style::properties::animated_properties; animated_properties::nscsspropertyid_is_animatable(property)