mirror of
https://github.com/servo/servo.git
synced 2025-06-06 16:45:39 +00:00
layout: Switch IndependentLayout
to use Au
instead of Length
(#31083)
* use au in layout * fmt * review fix
This commit is contained in:
parent
efa38c67fe
commit
1b847c3166
8 changed files with 52 additions and 21 deletions
|
@ -410,7 +410,7 @@ impl FlexContainer {
|
||||||
|
|
||||||
IndependentLayout {
|
IndependentLayout {
|
||||||
fragments,
|
fragments,
|
||||||
content_block_size,
|
content_block_size: content_block_size.into(),
|
||||||
last_inflow_baseline_offset: None,
|
last_inflow_baseline_offset: None,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1111,7 +1111,7 @@ impl<'a> FlexItem<'a> {
|
||||||
let hypothetical_cross_size = self
|
let hypothetical_cross_size = self
|
||||||
.content_box_size
|
.content_box_size
|
||||||
.cross
|
.cross
|
||||||
.auto_is(|| content_block_size)
|
.auto_is(|| content_block_size.into())
|
||||||
.clamp_between_extremums(
|
.clamp_between_extremums(
|
||||||
self.content_min_size.cross,
|
self.content_min_size.cross,
|
||||||
self.content_max_size.cross,
|
self.content_max_size.cross,
|
||||||
|
|
|
@ -930,7 +930,7 @@ impl FloatBox {
|
||||||
inline: inline_size,
|
inline: inline_size,
|
||||||
block: box_size
|
block: box_size
|
||||||
.block
|
.block
|
||||||
.auto_is(|| independent_layout.content_block_size),
|
.auto_is(|| independent_layout.content_block_size.into()),
|
||||||
};
|
};
|
||||||
children = independent_layout.fragments;
|
children = independent_layout.fragments;
|
||||||
},
|
},
|
||||||
|
|
|
@ -1949,7 +1949,7 @@ impl IndependentFormattingContext {
|
||||||
// https://drafts.csswg.org/css2/visudet.html#block-root-margin
|
// https://drafts.csswg.org/css2/visudet.html#block-root-margin
|
||||||
let tentative_block_size = box_size
|
let tentative_block_size = box_size
|
||||||
.block
|
.block
|
||||||
.auto_is(|| independent_layout.content_block_size);
|
.auto_is(|| independent_layout.content_block_size.into());
|
||||||
|
|
||||||
// https://drafts.csswg.org/css2/visudet.html#min-max-heights
|
// https://drafts.csswg.org/css2/visudet.html#min-max-heights
|
||||||
// In this case “applying the rules above again” with a non-auto block-size
|
// In this case “applying the rules above again” with a non-auto block-size
|
||||||
|
@ -1974,7 +1974,9 @@ impl IndependentFormattingContext {
|
||||||
pbm.border,
|
pbm.border,
|
||||||
margin,
|
margin,
|
||||||
None,
|
None,
|
||||||
independent_layout.last_inflow_baseline_offset,
|
independent_layout
|
||||||
|
.last_inflow_baseline_offset
|
||||||
|
.map(|t| t.into()),
|
||||||
CollapsedBlockMargins::zero(),
|
CollapsedBlockMargins::zero(),
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
|
|
|
@ -30,7 +30,7 @@ use crate::geom::{LogicalRect, LogicalSides, LogicalVec2};
|
||||||
use crate::positioned::{AbsolutelyPositionedBox, PositioningContext, PositioningContextLength};
|
use crate::positioned::{AbsolutelyPositionedBox, PositioningContext, PositioningContextLength};
|
||||||
use crate::replaced::ReplacedContent;
|
use crate::replaced::ReplacedContent;
|
||||||
use crate::sizing::{self, ContentSizes};
|
use crate::sizing::{self, ContentSizes};
|
||||||
use crate::style_ext::{ComputedValuesExt, PaddingBorderMargin};
|
use crate::style_ext::{Clamp, ComputedValuesExt, PaddingBorderMargin};
|
||||||
use crate::ContainingBlock;
|
use crate::ContainingBlock;
|
||||||
|
|
||||||
mod construct;
|
mod construct;
|
||||||
|
@ -240,10 +240,11 @@ impl BlockFormattingContext {
|
||||||
|
|
||||||
IndependentLayout {
|
IndependentLayout {
|
||||||
fragments: flow_layout.fragments,
|
fragments: flow_layout.fragments,
|
||||||
content_block_size: flow_layout.content_block_size +
|
content_block_size: (flow_layout.content_block_size +
|
||||||
flow_layout.collapsible_margins_in_children.end.solve() +
|
flow_layout.collapsible_margins_in_children.end.solve() +
|
||||||
clearance.unwrap_or_else(Length::zero),
|
clearance.unwrap_or_else(Length::zero))
|
||||||
last_inflow_baseline_offset: flow_layout.last_inflow_baseline_offset,
|
.into(),
|
||||||
|
last_inflow_baseline_offset: flow_layout.last_inflow_baseline_offset.map(|t| t.into()),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -858,7 +859,11 @@ impl NonReplacedFormattingContext {
|
||||||
let block_size = containing_block_for_children.block_size.auto_is(|| {
|
let block_size = containing_block_for_children.block_size.auto_is(|| {
|
||||||
layout
|
layout
|
||||||
.content_block_size
|
.content_block_size
|
||||||
.clamp_between_extremums(min_box_size.block, max_box_size.block)
|
.clamp_between_extremums(
|
||||||
|
min_box_size.block.into(),
|
||||||
|
max_box_size.block.map(|t| t.into()),
|
||||||
|
)
|
||||||
|
.into()
|
||||||
});
|
});
|
||||||
|
|
||||||
let content_rect = LogicalRect {
|
let content_rect = LogicalRect {
|
||||||
|
@ -882,7 +887,7 @@ impl NonReplacedFormattingContext {
|
||||||
pbm.border,
|
pbm.border,
|
||||||
margin,
|
margin,
|
||||||
None, /* clearance */
|
None, /* clearance */
|
||||||
layout.last_inflow_baseline_offset,
|
layout.last_inflow_baseline_offset.map(|t| t.into()),
|
||||||
block_margins_collapsed_with_children,
|
block_margins_collapsed_with_children,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
@ -939,12 +944,17 @@ impl NonReplacedFormattingContext {
|
||||||
style: &self.style,
|
style: &self.style,
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
content_size = LogicalVec2 {
|
content_size = LogicalVec2 {
|
||||||
inline: inline_size,
|
inline: inline_size,
|
||||||
block: block_size.auto_is(|| {
|
block: block_size.auto_is(|| {
|
||||||
layout
|
layout
|
||||||
.content_block_size
|
.content_block_size
|
||||||
.clamp_between_extremums(min_box_size.block, max_box_size.block)
|
.clamp_between_extremums(
|
||||||
|
min_box_size.block.into(),
|
||||||
|
max_box_size.block.map(|t| t.into()),
|
||||||
|
)
|
||||||
|
.into()
|
||||||
}),
|
}),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1002,13 +1012,16 @@ impl NonReplacedFormattingContext {
|
||||||
style: &self.style,
|
style: &self.style,
|
||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
content_size = LogicalVec2 {
|
content_size = LogicalVec2 {
|
||||||
inline: proposed_inline_size,
|
inline: proposed_inline_size,
|
||||||
block: block_size.auto_is(|| {
|
block: block_size.auto_is(|| {
|
||||||
layout
|
layout
|
||||||
.content_block_size
|
.content_block_size
|
||||||
.clamp_between_extremums(min_box_size.block, max_box_size.block)
|
.clamp_between_extremums(
|
||||||
|
min_box_size.block.into(),
|
||||||
|
max_box_size.block.map(|t| t.into()),
|
||||||
|
)
|
||||||
|
.into()
|
||||||
}),
|
}),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1092,7 +1105,7 @@ impl NonReplacedFormattingContext {
|
||||||
pbm.border,
|
pbm.border,
|
||||||
margin,
|
margin,
|
||||||
clearance,
|
clearance,
|
||||||
layout.last_inflow_baseline_offset,
|
layout.last_inflow_baseline_offset.map(|t| t.into()),
|
||||||
block_margins_collapsed_with_children,
|
block_margins_collapsed_with_children,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
|
@ -4,11 +4,11 @@
|
||||||
|
|
||||||
use std::convert::TryInto;
|
use std::convert::TryInto;
|
||||||
|
|
||||||
|
use app_units::Au;
|
||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
use servo_arc::Arc;
|
use servo_arc::Arc;
|
||||||
use style::logical_geometry::WritingMode;
|
use style::logical_geometry::WritingMode;
|
||||||
use style::properties::ComputedValues;
|
use style::properties::ComputedValues;
|
||||||
use style::values::computed::Length;
|
|
||||||
use style::values::specified::text::TextDecorationLine;
|
use style::values::specified::text::TextDecorationLine;
|
||||||
|
|
||||||
use crate::context::LayoutContext;
|
use crate::context::LayoutContext;
|
||||||
|
@ -63,12 +63,12 @@ pub(crate) struct IndependentLayout {
|
||||||
pub fragments: Vec<Fragment>,
|
pub fragments: Vec<Fragment>,
|
||||||
|
|
||||||
/// https://drafts.csswg.org/css2/visudet.html#root-height
|
/// https://drafts.csswg.org/css2/visudet.html#root-height
|
||||||
pub content_block_size: Length,
|
pub content_block_size: Au,
|
||||||
|
|
||||||
/// The offset of the last inflow baseline of this layout in the content area, if
|
/// The offset of the last inflow baseline of this layout in the content area, if
|
||||||
/// there was one. This is used to propagate baselines to the ancestors of `display:
|
/// there was one. This is used to propagate baselines to the ancestors of `display:
|
||||||
/// inline-block`.
|
/// inline-block`.
|
||||||
pub last_inflow_baseline_offset: Option<Length>,
|
pub last_inflow_baseline_offset: Option<Au>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl IndependentFormattingContext {
|
impl IndependentFormattingContext {
|
||||||
|
|
|
@ -622,7 +622,8 @@ impl HoistedAbsolutelyPositionedBox {
|
||||||
&mut positioning_context,
|
&mut positioning_context,
|
||||||
&containing_block_for_children,
|
&containing_block_for_children,
|
||||||
);
|
);
|
||||||
let block_size = size.auto_is(|| independent_layout.content_block_size);
|
let block_size =
|
||||||
|
size.auto_is(|| independent_layout.content_block_size.into());
|
||||||
Result {
|
Result {
|
||||||
content_size: LogicalVec2 {
|
content_size: LogicalVec2 {
|
||||||
inline: inline_size,
|
inline: inline_size,
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
* file, You can obtain one at https://mozilla.org/MPL/2.0/. */
|
||||||
|
|
||||||
|
use app_units::Au;
|
||||||
use servo_config::pref;
|
use servo_config::pref;
|
||||||
use style::computed_values::mix_blend_mode::T as ComputedMixBlendMode;
|
use style::computed_values::mix_blend_mode::T as ComputedMixBlendMode;
|
||||||
use style::computed_values::position::T as ComputedPosition;
|
use style::computed_values::position::T as ComputedPosition;
|
||||||
|
@ -626,3 +627,16 @@ fn size_to_length(size: &Size) -> LengthPercentageOrAuto {
|
||||||
Size::Auto => LengthPercentageOrAuto::Auto,
|
Size::Auto => LengthPercentageOrAuto::Auto,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub(crate) trait Clamp: Sized {
|
||||||
|
fn clamp_between_extremums(self, min: Self, max: Option<Self>) -> Self;
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Clamp for Au {
|
||||||
|
fn clamp_between_extremums(self, min: Self, max: Option<Self>) -> Self {
|
||||||
|
match max {
|
||||||
|
Some(max_value) => self.min(max_value).max(min),
|
||||||
|
None => self.max(min),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -7,11 +7,12 @@
|
||||||
|
|
||||||
mod construct;
|
mod construct;
|
||||||
|
|
||||||
|
use app_units::Au;
|
||||||
pub(crate) use construct::AnonymousTableContent;
|
pub(crate) use construct::AnonymousTableContent;
|
||||||
pub use construct::TableBuilder;
|
pub use construct::TableBuilder;
|
||||||
|
use euclid::num::Zero;
|
||||||
use euclid::{Point2D, UnknownUnit, Vector2D};
|
use euclid::{Point2D, UnknownUnit, Vector2D};
|
||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
use style::values::computed::Length;
|
|
||||||
|
|
||||||
use super::flow::BlockFormattingContext;
|
use super::flow::BlockFormattingContext;
|
||||||
use crate::context::LayoutContext;
|
use crate::context::LayoutContext;
|
||||||
|
@ -39,7 +40,7 @@ impl Table {
|
||||||
) -> IndependentLayout {
|
) -> IndependentLayout {
|
||||||
IndependentLayout {
|
IndependentLayout {
|
||||||
fragments: Vec::new(),
|
fragments: Vec::new(),
|
||||||
content_block_size: Length::new(0.),
|
content_block_size: Au::zero(),
|
||||||
last_inflow_baseline_offset: None,
|
last_inflow_baseline_offset: None,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue