aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorbors-servo <servo-ops@mozilla.com>2020-06-10 17:19:16 -0400
committerGitHub <noreply@github.com>2020-06-10 17:19:16 -0400
commitd85c6ee341aca37ca0385bf0ccdd3665eb6f6913 (patch)
treef797a62ff03755a0a06d6ec12ed4b9cb13a84b88
parent0367ec2e8b972d5a4f1b88fb39a5ed691e976057 (diff)
parentdd0d6a2a6ffa52b45721448dc76ed44bde93b589 (diff)
downloadservo-d85c6ee341aca37ca0385bf0ccdd3665eb6f6913.tar.gz
servo-d85c6ee341aca37ca0385bf0ccdd3665eb6f6913.zip
Auto merge of #26838 - servo:flexbox, r=nox
Flexbox, the boring parts I have a local branch starting to implement https://drafts.csswg.org/css-flexbox/#layout-algorithm. It’s not PR-ready yet, but it’s going to be large so here are some of the less interesting parts meaningful by themselves. Landing the module split in particular will help reduce merge conflicts. CC https://github.com/servo/servo/issues/26639
-rw-r--r--components/layout_2020/flexbox/construct.rs (renamed from components/layout_2020/flexbox.rs)41
-rw-r--r--components/layout_2020/flexbox/layout.rs33
-rw-r--r--components/layout_2020/flexbox/mod.rs21
-rw-r--r--components/style/properties/longhands/position.mako.rs15
-rw-r--r--components/style/properties/shorthands/position.mako.rs6
5 files changed, 71 insertions, 45 deletions
diff --git a/components/layout_2020/flexbox.rs b/components/layout_2020/flexbox/construct.rs
index 32ea3340ff7..e23858efe7f 100644
--- a/components/layout_2020/flexbox.rs
+++ b/components/layout_2020/flexbox/construct.rs
@@ -2,36 +2,21 @@
* 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/. */
+use super::{FlexContainer, FlexLevelBox};
use crate::cell::ArcRefCell;
use crate::context::LayoutContext;
use crate::dom_traversal::{
BoxSlot, Contents, NodeAndStyleInfo, NodeExt, NonReplacedContents, TraversalHandler,
};
use crate::element_data::LayoutBox;
-use crate::formatting_contexts::{IndependentFormattingContext, IndependentLayout};
+use crate::formatting_contexts::IndependentFormattingContext;
use crate::fragments::Tag;
-use crate::positioned::{AbsolutelyPositionedBox, PositioningContext};
+use crate::positioned::AbsolutelyPositionedBox;
use crate::sizing::{BoxContentSizes, ContentSizes, ContentSizesRequest};
use crate::style_ext::DisplayGeneratingBox;
-use crate::ContainingBlock;
use rayon::iter::{IntoParallelIterator, ParallelIterator};
use std::borrow::Cow;
-use style::values::computed::Length;
use style::values::specified::text::TextDecorationLine;
-use style::Zero;
-
-// FIXME: `min-width: auto` is not zero: https://drafts.csswg.org/css-flexbox/#min-size-auto
-
-#[derive(Debug, Serialize)]
-pub(crate) struct FlexContainer {
- children: Vec<ArcRefCell<FlexLevelBox>>,
-}
-
-#[derive(Debug, Serialize)]
-pub(crate) enum FlexLevelBox {
- FlexItem(IndependentFormattingContext),
- OutOfFlowAbsolutelyPositionedBox(ArcRefCell<AbsolutelyPositionedBox>),
-}
impl FlexContainer {
pub fn construct<'dom>(
@@ -230,23 +215,3 @@ where
FlexContainer { children }
}
}
-
-impl FlexContainer {
- pub(crate) fn layout(
- &self,
- layout_context: &LayoutContext,
- positioning_context: &mut PositioningContext,
- containing_block: &ContainingBlock,
- tree_rank: usize,
- ) -> IndependentLayout {
- // FIXME
- let _ = layout_context;
- let _ = positioning_context;
- let _ = containing_block;
- let _ = tree_rank;
- IndependentLayout {
- fragments: Vec::new(),
- content_block_size: Length::zero(),
- }
- }
-}
diff --git a/components/layout_2020/flexbox/layout.rs b/components/layout_2020/flexbox/layout.rs
new file mode 100644
index 00000000000..1da062b7764
--- /dev/null
+++ b/components/layout_2020/flexbox/layout.rs
@@ -0,0 +1,33 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * 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/. */
+
+use super::FlexContainer;
+use crate::context::LayoutContext;
+use crate::formatting_contexts::IndependentLayout;
+use crate::positioned::PositioningContext;
+use crate::ContainingBlock;
+use style::values::computed::Length;
+use style::Zero;
+
+// FIXME: `min-width: auto` is not zero: https://drafts.csswg.org/css-flexbox/#min-size-auto
+
+impl FlexContainer {
+ pub(crate) fn layout(
+ &self,
+ layout_context: &LayoutContext,
+ positioning_context: &mut PositioningContext,
+ containing_block: &ContainingBlock,
+ tree_rank: usize,
+ ) -> IndependentLayout {
+ // FIXME
+ let _ = layout_context;
+ let _ = positioning_context;
+ let _ = containing_block;
+ let _ = tree_rank;
+ IndependentLayout {
+ fragments: Vec::new(),
+ content_block_size: Length::zero(),
+ }
+ }
+}
diff --git a/components/layout_2020/flexbox/mod.rs b/components/layout_2020/flexbox/mod.rs
new file mode 100644
index 00000000000..c7aed0bd0e9
--- /dev/null
+++ b/components/layout_2020/flexbox/mod.rs
@@ -0,0 +1,21 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * 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/. */
+
+use crate::cell::ArcRefCell;
+use crate::formatting_contexts::IndependentFormattingContext;
+use crate::positioned::AbsolutelyPositionedBox;
+
+mod construct;
+mod layout;
+
+#[derive(Debug, Serialize)]
+pub(crate) struct FlexContainer {
+ children: Vec<ArcRefCell<FlexLevelBox>>,
+}
+
+#[derive(Debug, Serialize)]
+pub(crate) enum FlexLevelBox {
+ FlexItem(IndependentFormattingContext),
+ OutOfFlowAbsolutelyPositionedBox(ArcRefCell<AbsolutelyPositionedBox>),
+}
diff --git a/components/style/properties/longhands/position.mako.rs b/components/style/properties/longhands/position.mako.rs
index 239c2edd5cb..25354ab19af 100644
--- a/components/style/properties/longhands/position.mako.rs
+++ b/components/style/properties/longhands/position.mako.rs
@@ -72,7 +72,8 @@ ${helpers.predefined_type(
${helpers.single_keyword(
"flex-direction",
"row row-reverse column column-reverse",
- engines="gecko servo-2013",
+ engines="gecko servo-2013 servo-2020",
+ servo_2020_pref="layout.flexbox.enabled",
spec="https://drafts.csswg.org/css-flexbox/#flex-direction-property",
extra_prefixes="webkit",
animation_value_type="discrete",
@@ -83,7 +84,8 @@ ${helpers.single_keyword(
${helpers.single_keyword(
"flex-wrap",
"nowrap wrap wrap-reverse",
- engines="gecko servo-2013",
+ engines="gecko servo-2013 servo-2020",
+ servo_2020_pref="layout.flexbox.enabled",
spec="https://drafts.csswg.org/css-flexbox/#flex-wrap-property",
extra_prefixes="webkit",
animation_value_type="discrete",
@@ -205,7 +207,8 @@ ${helpers.predefined_type(
"flex-grow",
"NonNegativeNumber",
"From::from(0.0)",
- engines="gecko servo-2013",
+ engines="gecko servo-2013 servo-2020",
+ servo_2020_pref="layout.flexbox.enabled",
spec="https://drafts.csswg.org/css-flexbox/#flex-grow-property",
extra_prefixes="webkit",
animation_value_type="NonNegativeNumber",
@@ -216,7 +219,8 @@ ${helpers.predefined_type(
"flex-shrink",
"NonNegativeNumber",
"From::from(1.0)",
- engines="gecko servo-2013",
+ engines="gecko servo-2013 servo-2020",
+ servo_2020_pref="layout.flexbox.enabled",
spec="https://drafts.csswg.org/css-flexbox/#flex-shrink-property",
extra_prefixes="webkit",
animation_value_type="NonNegativeNumber",
@@ -278,7 +282,8 @@ ${helpers.predefined_type(
"flex-basis",
"FlexBasis",
"computed::FlexBasis::auto()",
- engines="gecko servo-2013",
+ engines="gecko servo-2013 servo-2020",
+ servo_2020_pref="layout.flexbox.enabled",
spec="https://drafts.csswg.org/css-flexbox/#flex-basis-property",
extra_prefixes="webkit",
animation_value_type="FlexBasis",
diff --git a/components/style/properties/shorthands/position.mako.rs b/components/style/properties/shorthands/position.mako.rs
index 48e56e6ef3c..ff9b5cd5790 100644
--- a/components/style/properties/shorthands/position.mako.rs
+++ b/components/style/properties/shorthands/position.mako.rs
@@ -5,7 +5,8 @@
<%namespace name="helpers" file="/helpers.mako.rs" />
<%helpers:shorthand name="flex-flow"
- engines="gecko servo-2013"
+ engines="gecko servo-2013 servo-2020",
+ servo_2020_pref="layout.flexbox.enabled",
sub_properties="flex-direction flex-wrap"
extra_prefixes="webkit"
derive_serialize="True"
@@ -45,7 +46,8 @@
</%helpers:shorthand>
<%helpers:shorthand name="flex"
- engines="gecko servo-2013"
+ engines="gecko servo-2013 servo-2020",
+ servo_2020_pref="layout.flexbox.enabled",
sub_properties="flex-grow flex-shrink flex-basis"
extra_prefixes="webkit"
derive_serialize="True"