mirror of
https://github.com/servo/servo.git
synced 2025-07-25 16:20:36 +01:00
Change LengthOrPercentageOrAuto to make use of NoCalcLength
This commit is contained in:
parent
590c9579f0
commit
bdb08b9a82
5 changed files with 35 additions and 42 deletions
|
@ -503,14 +503,12 @@ impl LayoutElementHelpers for LayoutJS<Element> {
|
||||||
};
|
};
|
||||||
|
|
||||||
if let Some(size) = size {
|
if let Some(size) = size {
|
||||||
let value = specified::Length::NoCalc(
|
let value = specified::NoCalcLength::ServoCharacterWidth(specified::CharacterWidth(size));
|
||||||
specified::NoCalcLength::ServoCharacterWidth(specified::CharacterWidth(size)));
|
|
||||||
hints.push(from_declaration(
|
hints.push(from_declaration(
|
||||||
PropertyDeclaration::Width(DeclaredValue::Value(
|
PropertyDeclaration::Width(DeclaredValue::Value(
|
||||||
specified::LengthOrPercentageOrAuto::Length(value)))));
|
specified::LengthOrPercentageOrAuto::Length(value)))));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
let width = if let Some(this) = self.downcast::<HTMLIFrameElement>() {
|
let width = if let Some(this) = self.downcast::<HTMLIFrameElement>() {
|
||||||
this.get_width()
|
this.get_width()
|
||||||
} else if let Some(this) = self.downcast::<HTMLImageElement>() {
|
} else if let Some(this) = self.downcast::<HTMLImageElement>() {
|
||||||
|
@ -536,7 +534,7 @@ impl LayoutElementHelpers for LayoutJS<Element> {
|
||||||
}
|
}
|
||||||
LengthOrPercentageOrAuto::Length(length) => {
|
LengthOrPercentageOrAuto::Length(length) => {
|
||||||
let width_value = specified::LengthOrPercentageOrAuto::Length(
|
let width_value = specified::LengthOrPercentageOrAuto::Length(
|
||||||
specified::Length::NoCalc(specified::NoCalcLength::Absolute(length)));
|
specified::NoCalcLength::Absolute(length));
|
||||||
hints.push(from_declaration(
|
hints.push(from_declaration(
|
||||||
PropertyDeclaration::Width(DeclaredValue::Value(width_value))));
|
PropertyDeclaration::Width(DeclaredValue::Value(width_value))));
|
||||||
}
|
}
|
||||||
|
@ -561,7 +559,7 @@ impl LayoutElementHelpers for LayoutJS<Element> {
|
||||||
}
|
}
|
||||||
LengthOrPercentageOrAuto::Length(length) => {
|
LengthOrPercentageOrAuto::Length(length) => {
|
||||||
let height_value = specified::LengthOrPercentageOrAuto::Length(
|
let height_value = specified::LengthOrPercentageOrAuto::Length(
|
||||||
specified::Length::NoCalc(specified::NoCalcLength::Absolute(length)));
|
specified::NoCalcLength::Absolute(length));
|
||||||
hints.push(from_declaration(
|
hints.push(from_declaration(
|
||||||
PropertyDeclaration::Height(DeclaredValue::Value(height_value))));
|
PropertyDeclaration::Height(DeclaredValue::Value(height_value))));
|
||||||
}
|
}
|
||||||
|
@ -583,14 +581,12 @@ impl LayoutElementHelpers for LayoutJS<Element> {
|
||||||
// scrollbar size into consideration (but we don't have a scrollbar yet!)
|
// scrollbar size into consideration (but we don't have a scrollbar yet!)
|
||||||
//
|
//
|
||||||
// https://html.spec.whatwg.org/multipage/#textarea-effective-width
|
// https://html.spec.whatwg.org/multipage/#textarea-effective-width
|
||||||
let value = specified::Length::NoCalc(
|
let value = specified::NoCalcLength::ServoCharacterWidth(specified::CharacterWidth(cols));
|
||||||
specified::NoCalcLength::ServoCharacterWidth(specified::CharacterWidth(cols)));
|
|
||||||
hints.push(from_declaration(
|
hints.push(from_declaration(
|
||||||
PropertyDeclaration::Width(DeclaredValue::Value(
|
PropertyDeclaration::Width(DeclaredValue::Value(
|
||||||
specified::LengthOrPercentageOrAuto::Length(value)))));
|
specified::LengthOrPercentageOrAuto::Length(value)))));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
let rows = if let Some(this) = self.downcast::<HTMLTextAreaElement>() {
|
let rows = if let Some(this) = self.downcast::<HTMLTextAreaElement>() {
|
||||||
match this.get_rows() {
|
match this.get_rows() {
|
||||||
0 => None,
|
0 => None,
|
||||||
|
@ -604,8 +600,7 @@ impl LayoutElementHelpers for LayoutJS<Element> {
|
||||||
// TODO(mttr) This should take scrollbar size into consideration.
|
// TODO(mttr) This should take scrollbar size into consideration.
|
||||||
//
|
//
|
||||||
// https://html.spec.whatwg.org/multipage/#textarea-effective-height
|
// https://html.spec.whatwg.org/multipage/#textarea-effective-height
|
||||||
let value = specified::Length::NoCalc(
|
let value = specified::NoCalcLength::FontRelative(specified::FontRelativeLength::Em(rows as CSSFloat));
|
||||||
specified::NoCalcLength::FontRelative(specified::FontRelativeLength::Em(rows as CSSFloat)));
|
|
||||||
hints.push(from_declaration(
|
hints.push(from_declaration(
|
||||||
PropertyDeclaration::Height(DeclaredValue::Value(
|
PropertyDeclaration::Height(DeclaredValue::Value(
|
||||||
specified::LengthOrPercentageOrAuto::Length(value)))));
|
specified::LengthOrPercentageOrAuto::Length(value)))));
|
||||||
|
|
|
@ -989,7 +989,7 @@ impl Parse for LengthOrPercentage {
|
||||||
#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
|
#[cfg_attr(feature = "servo", derive(HeapSizeOf))]
|
||||||
#[allow(missing_docs)]
|
#[allow(missing_docs)]
|
||||||
pub enum LengthOrPercentageOrAuto {
|
pub enum LengthOrPercentageOrAuto {
|
||||||
Length(Length),
|
Length(NoCalcLength),
|
||||||
Percentage(Percentage),
|
Percentage(Percentage),
|
||||||
Auto,
|
Auto,
|
||||||
Calc(Box<CalcLengthOrPercentage>),
|
Calc(Box<CalcLengthOrPercentage>),
|
||||||
|
@ -1022,11 +1022,11 @@ impl LengthOrPercentageOrAuto {
|
||||||
{
|
{
|
||||||
match try!(input.next()) {
|
match try!(input.next()) {
|
||||||
Token::Dimension(ref value, ref unit) if context.is_ok(value.value) =>
|
Token::Dimension(ref value, ref unit) if context.is_ok(value.value) =>
|
||||||
Length::parse_dimension(value.value, unit).map(LengthOrPercentageOrAuto::Length),
|
NoCalcLength::parse_dimension(value.value, unit).map(LengthOrPercentageOrAuto::Length),
|
||||||
Token::Percentage(ref value) if context.is_ok(value.unit_value) =>
|
Token::Percentage(ref value) if context.is_ok(value.unit_value) =>
|
||||||
Ok(LengthOrPercentageOrAuto::Percentage(Percentage(value.unit_value))),
|
Ok(LengthOrPercentageOrAuto::Percentage(Percentage(value.unit_value))),
|
||||||
Token::Number(ref value) if value.value == 0. =>
|
Token::Number(ref value) if value.value == 0. =>
|
||||||
Ok(LengthOrPercentageOrAuto::Length(Length::zero())),
|
Ok(LengthOrPercentageOrAuto::Length(NoCalcLength::zero())),
|
||||||
Token::Ident(ref value) if value.eq_ignore_ascii_case("auto") =>
|
Token::Ident(ref value) if value.eq_ignore_ascii_case("auto") =>
|
||||||
Ok(LengthOrPercentageOrAuto::Auto),
|
Ok(LengthOrPercentageOrAuto::Auto),
|
||||||
Token::Function(ref name) if name.eq_ignore_ascii_case("calc") => {
|
Token::Function(ref name) if name.eq_ignore_ascii_case("calc") => {
|
||||||
|
|
|
@ -25,7 +25,7 @@ use style_traits::ToCss;
|
||||||
use style_traits::viewport::{Orientation, UserZoom, ViewportConstraints, Zoom};
|
use style_traits::viewport::{Orientation, UserZoom, ViewportConstraints, Zoom};
|
||||||
use stylesheets::{Stylesheet, Origin};
|
use stylesheets::{Stylesheet, Origin};
|
||||||
use values::computed::{Context, ToComputedValue};
|
use values::computed::{Context, ToComputedValue};
|
||||||
use values::specified::{Length, NoCalcLength, LengthOrPercentageOrAuto, ViewportPercentageLength};
|
use values::specified::{NoCalcLength, LengthOrPercentageOrAuto, ViewportPercentageLength};
|
||||||
|
|
||||||
macro_rules! declare_viewport_descriptor {
|
macro_rules! declare_viewport_descriptor {
|
||||||
( $( $variant_name: expr => $variant: ident($data: ident), )+ ) => {
|
( $( $variant_name: expr => $variant: ident($data: ident), )+ ) => {
|
||||||
|
@ -150,16 +150,14 @@ impl FromMeta for ViewportLength {
|
||||||
|
|
||||||
Some(match value {
|
Some(match value {
|
||||||
v if v.eq_ignore_ascii_case("device-width") =>
|
v if v.eq_ignore_ascii_case("device-width") =>
|
||||||
specified!(Length::NoCalc(
|
specified!(NoCalcLength::ViewportPercentage(ViewportPercentageLength::Vw(100.))),
|
||||||
NoCalcLength::ViewportPercentage(ViewportPercentageLength::Vw(100.)))),
|
|
||||||
v if v.eq_ignore_ascii_case("device-height") =>
|
v if v.eq_ignore_ascii_case("device-height") =>
|
||||||
specified!(Length::NoCalc(
|
specified!(NoCalcLength::ViewportPercentage(ViewportPercentageLength::Vh(100.))),
|
||||||
NoCalcLength::ViewportPercentage(ViewportPercentageLength::Vh(100.)))),
|
|
||||||
_ => {
|
_ => {
|
||||||
match value.parse::<f32>() {
|
match value.parse::<f32>() {
|
||||||
Ok(n) if n >= 0. => specified!(Length::from_px(n.max(1.).min(10000.))),
|
Ok(n) if n >= 0. => specified!(NoCalcLength::from_px(n.max(1.).min(10000.))),
|
||||||
Ok(_) => return None,
|
Ok(_) => return None,
|
||||||
Err(_) => specified!(Length::from_px(1.))
|
Err(_) => specified!(NoCalcLength::from_px(1.))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
|
@ -19,7 +19,7 @@ fn property_declaration_block_should_serialize_correctly() {
|
||||||
|
|
||||||
let declarations = vec![
|
let declarations = vec![
|
||||||
(PropertyDeclaration::Width(
|
(PropertyDeclaration::Width(
|
||||||
DeclaredValue::Value(LengthOrPercentageOrAuto::Length(Length::from_px(70f32)))),
|
DeclaredValue::Value(LengthOrPercentageOrAuto::Length(NoCalcLength::from_px(70f32)))),
|
||||||
Importance::Normal),
|
Importance::Normal),
|
||||||
|
|
||||||
(PropertyDeclaration::MinHeight(
|
(PropertyDeclaration::MinHeight(
|
||||||
|
@ -27,7 +27,7 @@ fn property_declaration_block_should_serialize_correctly() {
|
||||||
Importance::Normal),
|
Importance::Normal),
|
||||||
|
|
||||||
(PropertyDeclaration::Height(
|
(PropertyDeclaration::Height(
|
||||||
DeclaredValue::Value(LengthOrPercentageOrAuto::Length(Length::from_px(20f32)))),
|
DeclaredValue::Value(LengthOrPercentageOrAuto::Length(NoCalcLength::from_px(20f32)))),
|
||||||
Importance::Important),
|
Importance::Important),
|
||||||
|
|
||||||
(PropertyDeclaration::Display(
|
(PropertyDeclaration::Display(
|
||||||
|
@ -113,7 +113,7 @@ mod shorthand_serialization {
|
||||||
fn all_equal_properties_should_serialize_to_one_value() {
|
fn all_equal_properties_should_serialize_to_one_value() {
|
||||||
let mut properties = Vec::new();
|
let mut properties = Vec::new();
|
||||||
|
|
||||||
let px_70 = DeclaredValue::Value(LengthOrPercentageOrAuto::Length(Length::from_px(70f32)));
|
let px_70 = DeclaredValue::Value(LengthOrPercentageOrAuto::Length(NoCalcLength::from_px(70f32)));
|
||||||
properties.push(PropertyDeclaration::MarginTop(px_70.clone()));
|
properties.push(PropertyDeclaration::MarginTop(px_70.clone()));
|
||||||
properties.push(PropertyDeclaration::MarginRight(px_70.clone()));
|
properties.push(PropertyDeclaration::MarginRight(px_70.clone()));
|
||||||
properties.push(PropertyDeclaration::MarginBottom(px_70.clone()));
|
properties.push(PropertyDeclaration::MarginBottom(px_70.clone()));
|
||||||
|
@ -127,8 +127,8 @@ mod shorthand_serialization {
|
||||||
fn equal_vertical_and_equal_horizontal_properties_should_serialize_to_two_value() {
|
fn equal_vertical_and_equal_horizontal_properties_should_serialize_to_two_value() {
|
||||||
let mut properties = Vec::new();
|
let mut properties = Vec::new();
|
||||||
|
|
||||||
let vertical_px = DeclaredValue::Value(LengthOrPercentageOrAuto::Length(Length::from_px(10f32)));
|
let vertical_px = DeclaredValue::Value(LengthOrPercentageOrAuto::Length(NoCalcLength::from_px(10f32)));
|
||||||
let horizontal_px = DeclaredValue::Value(LengthOrPercentageOrAuto::Length(Length::from_px(5f32)));
|
let horizontal_px = DeclaredValue::Value(LengthOrPercentageOrAuto::Length(NoCalcLength::from_px(5f32)));
|
||||||
|
|
||||||
properties.push(PropertyDeclaration::MarginTop(vertical_px.clone()));
|
properties.push(PropertyDeclaration::MarginTop(vertical_px.clone()));
|
||||||
properties.push(PropertyDeclaration::MarginRight(horizontal_px.clone()));
|
properties.push(PropertyDeclaration::MarginRight(horizontal_px.clone()));
|
||||||
|
@ -143,9 +143,9 @@ mod shorthand_serialization {
|
||||||
fn different_vertical_and_equal_horizontal_properties_should_serialize_to_three_values() {
|
fn different_vertical_and_equal_horizontal_properties_should_serialize_to_three_values() {
|
||||||
let mut properties = Vec::new();
|
let mut properties = Vec::new();
|
||||||
|
|
||||||
let top_px = DeclaredValue::Value(LengthOrPercentageOrAuto::Length(Length::from_px(8f32)));
|
let top_px = DeclaredValue::Value(LengthOrPercentageOrAuto::Length(NoCalcLength::from_px(8f32)));
|
||||||
let bottom_px = DeclaredValue::Value(LengthOrPercentageOrAuto::Length(Length::from_px(10f32)));
|
let bottom_px = DeclaredValue::Value(LengthOrPercentageOrAuto::Length(NoCalcLength::from_px(10f32)));
|
||||||
let horizontal_px = DeclaredValue::Value(LengthOrPercentageOrAuto::Length(Length::from_px(5f32)));
|
let horizontal_px = DeclaredValue::Value(LengthOrPercentageOrAuto::Length(NoCalcLength::from_px(5f32)));
|
||||||
|
|
||||||
properties.push(PropertyDeclaration::MarginTop(top_px));
|
properties.push(PropertyDeclaration::MarginTop(top_px));
|
||||||
properties.push(PropertyDeclaration::MarginRight(horizontal_px.clone()));
|
properties.push(PropertyDeclaration::MarginRight(horizontal_px.clone()));
|
||||||
|
@ -160,10 +160,10 @@ mod shorthand_serialization {
|
||||||
fn different_properties_should_serialize_to_four_values() {
|
fn different_properties_should_serialize_to_four_values() {
|
||||||
let mut properties = Vec::new();
|
let mut properties = Vec::new();
|
||||||
|
|
||||||
let top_px = DeclaredValue::Value(LengthOrPercentageOrAuto::Length(Length::from_px(8f32)));
|
let top_px = DeclaredValue::Value(LengthOrPercentageOrAuto::Length(NoCalcLength::from_px(8f32)));
|
||||||
let right_px = DeclaredValue::Value(LengthOrPercentageOrAuto::Length(Length::from_px(12f32)));
|
let right_px = DeclaredValue::Value(LengthOrPercentageOrAuto::Length(NoCalcLength::from_px(12f32)));
|
||||||
let bottom_px = DeclaredValue::Value(LengthOrPercentageOrAuto::Length(Length::from_px(10f32)));
|
let bottom_px = DeclaredValue::Value(LengthOrPercentageOrAuto::Length(NoCalcLength::from_px(10f32)));
|
||||||
let left_px = DeclaredValue::Value(LengthOrPercentageOrAuto::Length(Length::from_px(14f32)));
|
let left_px = DeclaredValue::Value(LengthOrPercentageOrAuto::Length(NoCalcLength::from_px(14f32)));
|
||||||
|
|
||||||
properties.push(PropertyDeclaration::MarginTop(top_px));
|
properties.push(PropertyDeclaration::MarginTop(top_px));
|
||||||
properties.push(PropertyDeclaration::MarginRight(right_px));
|
properties.push(PropertyDeclaration::MarginRight(right_px));
|
||||||
|
@ -738,8 +738,8 @@ mod shorthand_serialization {
|
||||||
let size = single_vec_variant_value!(size,
|
let size = single_vec_variant_value!(size,
|
||||||
size::single_value::SpecifiedValue::Explicit(
|
size::single_value::SpecifiedValue::Explicit(
|
||||||
size::single_value::ExplicitSize {
|
size::single_value::ExplicitSize {
|
||||||
width: LengthOrPercentageOrAuto::Length(Length::from_px(70f32)),
|
width: LengthOrPercentageOrAuto::Length(NoCalcLength::from_px(70f32)),
|
||||||
height: LengthOrPercentageOrAuto::Length(Length::from_px(50f32))
|
height: LengthOrPercentageOrAuto::Length(NoCalcLength::from_px(50f32))
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
@ -798,8 +798,8 @@ mod shorthand_serialization {
|
||||||
let size = single_vec_variant_value!(size,
|
let size = single_vec_variant_value!(size,
|
||||||
size::single_value::SpecifiedValue::Explicit(
|
size::single_value::SpecifiedValue::Explicit(
|
||||||
size::single_value::ExplicitSize {
|
size::single_value::ExplicitSize {
|
||||||
width: LengthOrPercentageOrAuto::Length(Length::from_px(70f32)),
|
width: LengthOrPercentageOrAuto::Length(NoCalcLength::from_px(70f32)),
|
||||||
height: LengthOrPercentageOrAuto::Length(Length::from_px(50f32))
|
height: LengthOrPercentageOrAuto::Length(NoCalcLength::from_px(50f32))
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
@ -934,8 +934,8 @@ mod shorthand_serialization {
|
||||||
let size = single_vec_variant_value!(size,
|
let size = single_vec_variant_value!(size,
|
||||||
size::single_value::SpecifiedValue::Explicit(
|
size::single_value::SpecifiedValue::Explicit(
|
||||||
size::single_value::ExplicitSize {
|
size::single_value::ExplicitSize {
|
||||||
width: LengthOrPercentageOrAuto::Length(Length::from_px(70f32)),
|
width: LengthOrPercentageOrAuto::Length(NoCalcLength::from_px(70f32)),
|
||||||
height: LengthOrPercentageOrAuto::Length(Length::from_px(50f32))
|
height: LengthOrPercentageOrAuto::Length(NoCalcLength::from_px(50f32))
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
@ -988,8 +988,8 @@ mod shorthand_serialization {
|
||||||
let size = single_vec_variant_value!(size,
|
let size = single_vec_variant_value!(size,
|
||||||
size::single_value::SpecifiedValue::Explicit(
|
size::single_value::SpecifiedValue::Explicit(
|
||||||
size::single_value::ExplicitSize {
|
size::single_value::ExplicitSize {
|
||||||
width: LengthOrPercentageOrAuto::Length(Length::from_px(70f32)),
|
width: LengthOrPercentageOrAuto::Length(NoCalcLength::from_px(70f32)),
|
||||||
height: LengthOrPercentageOrAuto::Length(Length::from_px(50f32))
|
height: LengthOrPercentageOrAuto::Length(NoCalcLength::from_px(50f32))
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
);
|
);
|
||||||
|
|
|
@ -12,8 +12,8 @@ use style::error_reporting::ParseErrorReporter;
|
||||||
use style::media_queries::{Device, MediaType};
|
use style::media_queries::{Device, MediaType};
|
||||||
use style::parser::{ParserContext, ParserContextExtraData};
|
use style::parser::{ParserContext, ParserContextExtraData};
|
||||||
use style::stylesheets::{Stylesheet, Origin};
|
use style::stylesheets::{Stylesheet, Origin};
|
||||||
use style::values::specified::Length::{self, ViewportPercentage};
|
|
||||||
use style::values::specified::LengthOrPercentageOrAuto::{self, Auto};
|
use style::values::specified::LengthOrPercentageOrAuto::{self, Auto};
|
||||||
|
use style::values::specified::NoCalcLength::{self, ViewportPercentage};
|
||||||
use style::values::specified::ViewportPercentageLength::Vw;
|
use style::values::specified::ViewportPercentageLength::Vw;
|
||||||
use style::viewport::*;
|
use style::viewport::*;
|
||||||
use style_traits::viewport::*;
|
use style_traits::viewport::*;
|
||||||
|
@ -80,7 +80,7 @@ macro_rules! assert_decl_len {
|
||||||
|
|
||||||
macro_rules! viewport_length {
|
macro_rules! viewport_length {
|
||||||
($value:expr, px) => {
|
($value:expr, px) => {
|
||||||
ViewportLength::Specified(LengthOrPercentageOrAuto::Length(Length::from_px($value)))
|
ViewportLength::Specified(LengthOrPercentageOrAuto::Length(NoCalcLength::from_px($value)))
|
||||||
};
|
};
|
||||||
($value:expr, vw) => {
|
($value:expr, vw) => {
|
||||||
ViewportLength::Specified(LengthOrPercentageOrAuto::Length(ViewportPercentage(Vw($value))))
|
ViewportLength::Specified(LengthOrPercentageOrAuto::Length(ViewportPercentage(Vw($value))))
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue