mirror of
https://github.com/servo/servo.git
synced 2025-07-03 05:23:38 +01:00
style: Handle keywords for color values.
Bug: 1434130 Reviewed-by: emilio MozReview-Commit-ID: 5GvIHSeQuCX
This commit is contained in:
parent
20398491cc
commit
0021c70c08
2 changed files with 21 additions and 3 deletions
|
@ -14,7 +14,7 @@ use parser::{Parse, ParserContext};
|
||||||
use properties::longhands::system_colors::SystemColor;
|
use properties::longhands::system_colors::SystemColor;
|
||||||
use std::fmt::{self, Write};
|
use std::fmt::{self, Write};
|
||||||
use std::io::Write as IoWrite;
|
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 style_traits::{SpecifiedValueInfo, ToCss, ValueParseErrorKind};
|
||||||
use super::AllowQuirks;
|
use super::AllowQuirks;
|
||||||
use values::computed::{Color as ComputedColor, Context, ToComputedValue};
|
use values::computed::{Color as ComputedColor, Context, ToComputedValue};
|
||||||
|
@ -429,6 +429,15 @@ impl From<Color> for RGBAColor {
|
||||||
|
|
||||||
impl SpecifiedValueInfo for Color {
|
impl SpecifiedValueInfo for Color {
|
||||||
const SUPPORTED_TYPES: u8 = CssType::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`
|
/// Specified value for the "color" property, which resolves the `currentcolor`
|
||||||
|
|
|
@ -1012,9 +1012,18 @@ pub unsafe extern "C" fn Servo_Property_GetCSSValuesForProperty(
|
||||||
let mut values = BTreeSet::<&'static str>::new();
|
let mut values = BTreeSet::<&'static str>::new();
|
||||||
prop_id.collect_property_completion_keywords(&mut |list| values.extend(list.iter()));
|
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();
|
let result = result.as_mut().unwrap();
|
||||||
bindings::Gecko_ResizeTArrayForStrings(result, values.len() as u32);
|
let len = extras.len() + values.len();
|
||||||
for (src, dest) in values.iter().zip(result.iter_mut()) {
|
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();
|
dest.write_str(src).unwrap();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue