mirror of
https://github.com/servo/servo.git
synced 2025-08-03 12:40:06 +01:00
gfx: Add elliptical border-radius shorthand parsing
Adds elliptical border-radius shorthand parsing, e.g.: /* The syntax of the second radius allows one to four values */ /* (first radius values) / radius */ border-radius: 10px 5% / 20px; /* (first radius values) / top-left-and-bottom-right | top-right-and-bottom-left */ border-radius: 10px 5% / 20px 30px; /* (first radius values) / top-left | top-right-and-bottom-left | bottom-right */ border-radius: 10px 5px 2em / 20px 25px 30%; /* (first radius values) / top-left | top-right | bottom-right | bottom-left */ border-radius: 10px 5% / 20px 25em 30px 35em;
This commit is contained in:
parent
67cf241acd
commit
48f1159845
5 changed files with 83 additions and 27 deletions
|
@ -5135,16 +5135,18 @@ pub mod shorthands {
|
|||
'border-%s-radius' % (corner)
|
||||
for corner in ['top-left', 'top-right', 'bottom-right', 'bottom-left']
|
||||
)}">
|
||||
use util::geometry::Au;
|
||||
use values::specified::{Length, LengthOrPercentage};
|
||||
use values::specified::BorderRadiusSize;
|
||||
|
||||
let _ignored = context;
|
||||
|
||||
fn parse_one_set_of_border_radii(mut input: &mut Parser)
|
||||
-> Result<[BorderRadiusSize; 4], ()> {
|
||||
fn parse_one_set_of_border_values(mut input: &mut Parser)
|
||||
-> Result<[LengthOrPercentage; 4], ()> {
|
||||
let mut count = 0;
|
||||
let mut values = [BorderRadiusSize::zero(); 4];
|
||||
let mut values = [LengthOrPercentage::Length(Length::Absolute(Au(0))); 4];
|
||||
while count < 4 {
|
||||
if let Ok(value) = input.try(BorderRadiusSize::parse_one_radii) {
|
||||
if let Ok(value) = input.try(LengthOrPercentage::parse) {
|
||||
values[count] = value;
|
||||
count += 1;
|
||||
} else {
|
||||
|
@ -5161,9 +5163,21 @@ pub mod shorthands {
|
|||
}
|
||||
}
|
||||
|
||||
let radii = try!(parse_one_set_of_border_radii(input));
|
||||
// TODO(bjwbell): Finish parsing code for elliptical borders.
|
||||
fn parse_one_set_of_border_radii(mut input: &mut Parser)
|
||||
-> Result<[BorderRadiusSize; 4], ()> {
|
||||
let widths = try!(parse_one_set_of_border_values(input));
|
||||
let mut heights = widths.clone();
|
||||
let mut radii_values = [BorderRadiusSize::zero(); 4];
|
||||
if input.try(|input| input.expect_delim('/')).is_ok() {
|
||||
heights = try!(parse_one_set_of_border_values(input));
|
||||
}
|
||||
for i in 0..radii_values.len() {
|
||||
radii_values[i] = BorderRadiusSize::new(widths[i], heights[i]);
|
||||
}
|
||||
Ok(radii_values)
|
||||
}
|
||||
|
||||
let radii = try!(parse_one_set_of_border_radii(input));
|
||||
Ok(Longhands {
|
||||
border_top_left_radius: Some(radii[0]),
|
||||
border_top_right_radius: Some(radii[1]),
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue