aboutsummaryrefslogtreecommitdiffstats
path: root/components/layout_2020/flow/construct.rs
diff options
context:
space:
mode:
authorSimon Sapin <simon.sapin@exyr.org>2020-06-09 19:58:00 +0200
committerSimon Sapin <simon.sapin@exyr.org>2020-06-10 09:03:18 +0200
commit08f008a0111020d5207bd0fd598213461f69fa42 (patch)
treef6e6ad32b9ac93aaa9afc7153ed7dcb7b210abbc /components/layout_2020/flow/construct.rs
parent554af02ab44f6dc96b8ebc570cdb01708a5a44bb (diff)
downloadservo-08f008a0111020d5207bd0fd598213461f69fa42.tar.gz
servo-08f008a0111020d5207bd0fd598213461f69fa42.zip
Use the writing mode of the containing block when accessing CSS properties
… and converting them to flow-relative geometric values. These values are almost always used to size and position a fragment within its containing block, so using the mode of the containing block seems more correct. Note that the `writing-mode` and `direction` properties are disabled in Servo at the moment, so this PR by itself should have no effect: the writing mode of an element is always the same of that of its containing block since they’re both horizontal rtl.
Diffstat (limited to 'components/layout_2020/flow/construct.rs')
-rw-r--r--components/layout_2020/flow/construct.rs35
1 files changed, 30 insertions, 5 deletions
diff --git a/components/layout_2020/flow/construct.rs b/components/layout_2020/flow/construct.rs
index bd2d0bce23d..f72bbf1ad13 100644
--- a/components/layout_2020/flow/construct.rs
+++ b/components/layout_2020/flow/construct.rs
@@ -21,6 +21,7 @@ use rayon_croissant::ParallelIteratorExt;
use servo_arc::Arc;
use std::borrow::Cow;
use std::convert::{TryFrom, TryInto};
+use style::logical_geometry::WritingMode;
use style::properties::ComputedValues;
use style::selector_parser::PseudoElement;
use style::values::specified::text::TextDecorationLine;
@@ -67,7 +68,12 @@ impl BlockFormattingContext {
inline_level_boxes,
text_decoration_line,
};
- let content_sizes = content_sizes.compute(|| ifc.inline_content_sizes(context));
+ // FIXME: this is the wrong writing mode
+ // but we plan to remove eager content size computation.
+ let not_actually_containing_block_writing_mode = WritingMode::empty();
+ let content_sizes = content_sizes.compute(|| {
+ ifc.inline_content_sizes(context, not_actually_containing_block_writing_mode)
+ });
let contents = BlockContainer::InlineFormattingContext(ifc);
let bfc = Self {
contents,
@@ -203,10 +209,13 @@ impl BlockContainer {
.is_empty()
{
if builder.block_level_boxes.is_empty() {
+ // FIXME: this is the wrong writing mode
+ // but we plan to remove eager content size computation.
+ let not_actually_containing_block_writing_mode = info.style.writing_mode;
let content_sizes = content_sizes.compute(|| {
builder
.ongoing_inline_formatting_context
- .inline_content_sizes(context)
+ .inline_content_sizes(context, not_actually_containing_block_writing_mode)
});
let container = BlockContainer::InlineFormattingContext(
builder.ongoing_inline_formatting_context,
@@ -678,6 +687,9 @@ where
max_assign_in_flow_outer_content_sizes_to: Option<&mut ContentSizes>,
) -> (ArcRefCell<BlockLevelBox>, ContainsFloats) {
let info = &self.info;
+ // FIXME: this is the wrong writing mode
+ // but we plan to remove eager content size computation.
+ let not_actually_containing_block_writing_mode = info.style.writing_mode;
let (block_level_box, contains_floats) = match self.kind {
BlockLevelCreator::SameFormattingContextBlock(contents) => {
let (contents, contains_floats, box_content_sizes) = contents.finish(
@@ -689,7 +701,10 @@ where
),
);
if let Some(to) = max_assign_in_flow_outer_content_sizes_to {
- to.max_assign(&box_content_sizes.outer_inline(&info.style))
+ to.max_assign(
+ &box_content_sizes
+ .outer_inline(&info.style, not_actually_containing_block_writing_mode),
+ )
}
let block_level_box = ArcRefCell::new(BlockLevelBox::SameFormattingContextBlock {
tag: Tag::from_node_and_style_info(info),
@@ -716,7 +731,12 @@ where
propagated_text_decoration_line,
);
if let Some(to) = max_assign_in_flow_outer_content_sizes_to {
- to.max_assign(&contents.content_sizes.outer_inline(&contents.style))
+ to.max_assign(
+ &contents.content_sizes.outer_inline(
+ &contents.style,
+ not_actually_containing_block_writing_mode,
+ ),
+ )
}
(
ArcRefCell::new(BlockLevelBox::Independent(contents)),
@@ -771,7 +791,12 @@ impl IntermediateBlockContainer {
)
},
IntermediateBlockContainer::InlineFormattingContext(ifc) => {
- let content_sizes = content_sizes.compute(|| ifc.inline_content_sizes(context));
+ // FIXME: this is the wrong writing mode
+ // but we plan to remove eager content size computation.
+ let not_actually_containing_block_writing_mode = info.style.writing_mode;
+ let content_sizes = content_sizes.compute(|| {
+ ifc.inline_content_sizes(context, not_actually_containing_block_writing_mode)
+ });
// If that inline formatting context contained any float, those
// were already taken into account during the first phase of
// box construction.