mirror of
https://github.com/servo/servo.git
synced 2025-08-10 07:55:33 +01:00
layout: Allow layouts to customize their used style (#35012)
Some layouts like table need some style overrides. We were handling this in `ComputedValuesExt`, but it was messy, unreliable and too limited. For example, we were assuming that a style with `display: table` would belong to a table wrapper box or table grid box. However, certain HTML elements can ignore their `display` value and generate a different kind of box. I think we aren't doing that yet, but we will need this. Also, resolving the used border of a table needs layout information, which we don't have in `ComputedValuesExt`. This patch will allow to improve border collapsing in a follow-up. Signed-off-by: Oriol Brufau <obrufau@igalia.com>
This commit is contained in:
parent
7e7792dfbd
commit
60dc3b26fb
11 changed files with 368 additions and 238 deletions
|
@ -42,7 +42,8 @@ use crate::sizing::{
|
|||
ComputeInlineContentSizes, ContentSizes, InlineContentSizesResult, IntrinsicSizingMode,
|
||||
};
|
||||
use crate::style_ext::{
|
||||
AspectRatio, Clamp, ComputedValuesExt, ContentBoxSizesAndPBMDeprecated, PaddingBorderMargin,
|
||||
AspectRatio, Clamp, ComputedValuesExt, ContentBoxSizesAndPBMDeprecated, LayoutStyle,
|
||||
PaddingBorderMargin,
|
||||
};
|
||||
use crate::{
|
||||
ConstraintSpace, ContainingBlock, ContainingBlockSize, IndefiniteContainingBlock,
|
||||
|
@ -1052,7 +1053,7 @@ impl FlexContainer {
|
|||
containing_block_for_container: &ContainingBlock,
|
||||
) -> (FlexRelativeVec2<Au>, FlexRelativeVec2<Option<Au>>, bool) {
|
||||
let sizes: ContentBoxSizesAndPBMDeprecated = self
|
||||
.style
|
||||
.layout_style()
|
||||
.content_box_sizes_and_padding_border_margin(&containing_block_for_container.into())
|
||||
.into();
|
||||
|
||||
|
@ -1071,6 +1072,11 @@ impl FlexContainer {
|
|||
sizes.depends_on_block_constraints,
|
||||
)
|
||||
}
|
||||
|
||||
#[inline]
|
||||
pub(crate) fn layout_style(&self) -> LayoutStyle {
|
||||
LayoutStyle::Default(&self.style)
|
||||
}
|
||||
}
|
||||
|
||||
/// Align all flex lines per `align-content` according to
|
||||
|
@ -1141,7 +1147,8 @@ impl<'a> FlexItem<'a> {
|
|||
pbm,
|
||||
depends_on_block_constraints,
|
||||
} = box_
|
||||
.style()
|
||||
.independent_formatting_context
|
||||
.layout_style()
|
||||
.content_box_sizes_and_padding_border_margin(&containing_block.into())
|
||||
.into();
|
||||
|
||||
|
@ -2281,7 +2288,9 @@ impl FlexItemBox {
|
|||
content_max_box_size,
|
||||
pbm,
|
||||
..
|
||||
} = style
|
||||
} = self
|
||||
.independent_formatting_context
|
||||
.layout_style()
|
||||
.content_box_sizes_and_padding_border_margin(containing_block)
|
||||
.into();
|
||||
let preferred_aspect_ratio = self
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue