mirror of
https://github.com/servo/servo.git
synced 2025-08-03 12:40:06 +01:00
Auto merge of #15115 - Wafflespeanut:lop, r=emilio
Introduce the `NoCalcLength` <!-- Please describe your changes on the following line: --> I began this for making the `CalcLengthOrPercentage` represent `LengthOrPercentage` (instead of the enum we already have), but only later did I realize that it will make `LengthOrPercentageOrFoo` types fatty (which is the problem we're trying to avoid - #15061) and so, I dropped that attempt. Along the way, I introduced an internal type for `Length`, for representing all its non-calc variants (which are `Copy`). We could still have this type for the `LengthOrPercentageOrFoo` types which don't really need `Length` since they already have their own variants for calc. r? @Manishearth @emilio @SimonSapin or anyone interested --- <!-- Thank you for contributing to Servo! Please replace each `[ ]` by `[X]` when the step is complete, and replace `__` with appropriate data: --> - [x] `./mach build -d` does not report any errors - [x] `./mach test-tidy` does not report any errors <!-- Either: --> - [x] These changes do not require tests because it's a refactor <!-- Pull requests that do not address these steps are welcome, but they will require additional verification as part of the review process. --> <!-- Reviewable:start --> --- This change is [<img src="https://reviewable.io/review_button.svg" height="34" align="absmiddle" alt="Reviewable"/>](https://reviewable.io/reviews/servo/servo/15115) <!-- Reviewable:end -->
This commit is contained in:
commit
cd0a6b98f4
19 changed files with 305 additions and 230 deletions
|
@ -4,7 +4,6 @@
|
|||
|
||||
//! Element nodes.
|
||||
|
||||
use app_units::Au;
|
||||
use cssparser::Color;
|
||||
use devtools_traits::AttrInfo;
|
||||
use dom::activation::Activatable;
|
||||
|
@ -455,18 +454,13 @@ impl LayoutElementHelpers for LayoutJS<Element> {
|
|||
font_family)])))));
|
||||
}
|
||||
|
||||
let font_size = if let Some(this) = self.downcast::<HTMLFontElement>() {
|
||||
this.get_size()
|
||||
} else {
|
||||
None
|
||||
};
|
||||
let font_size = self.downcast::<HTMLFontElement>().and_then(|this| this.get_size());
|
||||
|
||||
if let Some(font_size) = font_size {
|
||||
hints.push(from_declaration(
|
||||
PropertyDeclaration::FontSize(
|
||||
DeclaredValue::Value(
|
||||
font_size::SpecifiedValue(
|
||||
LengthOrPercentage::Length(font_size))))))
|
||||
font_size::SpecifiedValue(font_size.into())))))
|
||||
}
|
||||
|
||||
let cellspacing = if let Some(this) = self.downcast::<HTMLTableElement>() {
|
||||
|
@ -476,7 +470,7 @@ impl LayoutElementHelpers for LayoutJS<Element> {
|
|||
};
|
||||
|
||||
if let Some(cellspacing) = cellspacing {
|
||||
let width_value = specified::Length::Absolute(Au::from_px(cellspacing as i32));
|
||||
let width_value = specified::Length::from_px(cellspacing as f32);
|
||||
hints.push(from_declaration(
|
||||
PropertyDeclaration::BorderSpacing(DeclaredValue::Value(
|
||||
border_spacing::SpecifiedValue {
|
||||
|
@ -509,13 +503,12 @@ impl LayoutElementHelpers for LayoutJS<Element> {
|
|||
};
|
||||
|
||||
if let Some(size) = size {
|
||||
let value = specified::Length::ServoCharacterWidth(specified::CharacterWidth(size));
|
||||
let value = specified::NoCalcLength::ServoCharacterWidth(specified::CharacterWidth(size));
|
||||
hints.push(from_declaration(
|
||||
PropertyDeclaration::Width(DeclaredValue::Value(
|
||||
specified::LengthOrPercentageOrAuto::Length(value)))));
|
||||
}
|
||||
|
||||
|
||||
let width = if let Some(this) = self.downcast::<HTMLIFrameElement>() {
|
||||
this.get_width()
|
||||
} else if let Some(this) = self.downcast::<HTMLImageElement>() {
|
||||
|
@ -541,7 +534,7 @@ impl LayoutElementHelpers for LayoutJS<Element> {
|
|||
}
|
||||
LengthOrPercentageOrAuto::Length(length) => {
|
||||
let width_value = specified::LengthOrPercentageOrAuto::Length(
|
||||
specified::Length::Absolute(length));
|
||||
specified::NoCalcLength::Absolute(length));
|
||||
hints.push(from_declaration(
|
||||
PropertyDeclaration::Width(DeclaredValue::Value(width_value))));
|
||||
}
|
||||
|
@ -566,7 +559,7 @@ impl LayoutElementHelpers for LayoutJS<Element> {
|
|||
}
|
||||
LengthOrPercentageOrAuto::Length(length) => {
|
||||
let height_value = specified::LengthOrPercentageOrAuto::Length(
|
||||
specified::Length::Absolute(length));
|
||||
specified::NoCalcLength::Absolute(length));
|
||||
hints.push(from_declaration(
|
||||
PropertyDeclaration::Height(DeclaredValue::Value(height_value))));
|
||||
}
|
||||
|
@ -588,13 +581,12 @@ impl LayoutElementHelpers for LayoutJS<Element> {
|
|||
// scrollbar size into consideration (but we don't have a scrollbar yet!)
|
||||
//
|
||||
// https://html.spec.whatwg.org/multipage/#textarea-effective-width
|
||||
let value = specified::Length::ServoCharacterWidth(specified::CharacterWidth(cols));
|
||||
let value = specified::NoCalcLength::ServoCharacterWidth(specified::CharacterWidth(cols));
|
||||
hints.push(from_declaration(
|
||||
PropertyDeclaration::Width(DeclaredValue::Value(
|
||||
specified::LengthOrPercentageOrAuto::Length(value)))));
|
||||
}
|
||||
|
||||
|
||||
let rows = if let Some(this) = self.downcast::<HTMLTextAreaElement>() {
|
||||
match this.get_rows() {
|
||||
0 => None,
|
||||
|
@ -608,7 +600,7 @@ impl LayoutElementHelpers for LayoutJS<Element> {
|
|||
// TODO(mttr) This should take scrollbar size into consideration.
|
||||
//
|
||||
// https://html.spec.whatwg.org/multipage/#textarea-effective-height
|
||||
let value = specified::Length::FontRelative(specified::FontRelativeLength::Em(rows as CSSFloat));
|
||||
let value = specified::NoCalcLength::FontRelative(specified::FontRelativeLength::Em(rows as CSSFloat));
|
||||
hints.push(from_declaration(
|
||||
PropertyDeclaration::Height(DeclaredValue::Value(
|
||||
specified::LengthOrPercentageOrAuto::Length(value)))));
|
||||
|
@ -622,8 +614,7 @@ impl LayoutElementHelpers for LayoutJS<Element> {
|
|||
};
|
||||
|
||||
if let Some(border) = border {
|
||||
let width_value = specified::BorderWidth::from_length(
|
||||
specified::Length::Absolute(Au::from_px(border as i32)));
|
||||
let width_value = specified::BorderWidth::from_length(specified::Length::from_px(border as f32));
|
||||
hints.push(from_declaration(
|
||||
PropertyDeclaration::BorderTopWidth(DeclaredValue::Value(width_value.clone()))));
|
||||
hints.push(from_declaration(
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue