mirror of
https://github.com/servo/servo.git
synced 2025-08-03 12:40:06 +01:00
style: Have scale function and scale property accept percentage value.
Differential Revision: https://phabricator.services.mozilla.com/D55012
This commit is contained in:
parent
d06212c6c0
commit
001c511f9c
1 changed files with 17 additions and 13 deletions
|
@ -12,7 +12,7 @@ use crate::values::generics::transform::{Matrix, Matrix3D};
|
|||
use crate::values::specified::position::{
|
||||
HorizontalPositionKeyword, Side, VerticalPositionKeyword,
|
||||
};
|
||||
use crate::values::specified::{self, Angle, Integer, Length, LengthPercentage, Number};
|
||||
use crate::values::specified::{self, Angle, Integer, Length, LengthPercentage, Number, NumberOrPercentage};
|
||||
use crate::Zero;
|
||||
use cssparser::Parser;
|
||||
use style_traits::{ParseError, StyleParseErrorKind};
|
||||
|
@ -163,32 +163,32 @@ impl Transform {
|
|||
Ok(generic::TransformOperation::Translate3D(tx, ty, tz))
|
||||
},
|
||||
"scale" => {
|
||||
let sx = Number::parse(context, input)?;
|
||||
let sx = NumberOrPercentage::parse(context, input)?.to_number();
|
||||
if input.try(|input| input.expect_comma()).is_ok() {
|
||||
let sy = Number::parse(context, input)?;
|
||||
let sy = NumberOrPercentage::parse(context, input)?.to_number();
|
||||
Ok(generic::TransformOperation::Scale(sx, sy))
|
||||
} else {
|
||||
Ok(generic::TransformOperation::Scale(sx, sx))
|
||||
}
|
||||
},
|
||||
"scalex" => {
|
||||
let sx = Number::parse(context, input)?;
|
||||
let sx = NumberOrPercentage::parse(context, input)?.to_number();
|
||||
Ok(generic::TransformOperation::ScaleX(sx))
|
||||
},
|
||||
"scaley" => {
|
||||
let sy = Number::parse(context, input)?;
|
||||
let sy = NumberOrPercentage::parse(context, input)?.to_number();
|
||||
Ok(generic::TransformOperation::ScaleY(sy))
|
||||
},
|
||||
"scalez" => {
|
||||
let sz = Number::parse(context, input)?;
|
||||
let sz = NumberOrPercentage::parse(context, input)?.to_number();
|
||||
Ok(generic::TransformOperation::ScaleZ(sz))
|
||||
},
|
||||
"scale3d" => {
|
||||
let sx = Number::parse(context, input)?;
|
||||
let sx = NumberOrPercentage::parse(context, input)?.to_number();
|
||||
input.expect_comma()?;
|
||||
let sy = Number::parse(context, input)?;
|
||||
let sy = NumberOrPercentage::parse(context, input)?.to_number();
|
||||
input.expect_comma()?;
|
||||
let sz = Number::parse(context, input)?;
|
||||
let sz = NumberOrPercentage::parse(context, input)?.to_number();
|
||||
Ok(generic::TransformOperation::Scale3D(sx, sy, sz))
|
||||
},
|
||||
"rotate" => {
|
||||
|
@ -445,6 +445,9 @@ impl Parse for Translate {
|
|||
pub type Scale = generic::Scale<Number>;
|
||||
|
||||
impl Parse for Scale {
|
||||
/// Scale accepts <number> | <percentage>, so we parse it as NumberOrPercentage,
|
||||
/// and then convert into an Number if it's a Percentage.
|
||||
/// https://github.com/w3c/csswg-drafts/pull/4396
|
||||
fn parse<'i, 't>(
|
||||
context: &ParserContext,
|
||||
input: &mut Parser<'i, 't>,
|
||||
|
@ -453,11 +456,12 @@ impl Parse for Scale {
|
|||
return Ok(generic::Scale::None);
|
||||
}
|
||||
|
||||
let sx = Number::parse(context, input)?;
|
||||
if let Ok(sy) = input.try(|i| Number::parse(context, i)) {
|
||||
if let Ok(sz) = input.try(|i| Number::parse(context, i)) {
|
||||
let sx = NumberOrPercentage::parse(context, input)?.to_number();
|
||||
if let Ok(sy) = input.try(|i| NumberOrPercentage::parse(context, i)) {
|
||||
let sy = sy.to_number();
|
||||
if let Ok(sz) = input.try(|i| NumberOrPercentage::parse(context, i)) {
|
||||
// 'scale: <number> <number> <number>'
|
||||
return Ok(generic::Scale::Scale(sx, sy, sz));
|
||||
return Ok(generic::Scale::Scale(sx, sy, sz.to_number()));
|
||||
}
|
||||
|
||||
// 'scale: <number> <number>'
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue