aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--components/canvas/backend.rs31
-rw-r--r--components/canvas/raqote_backend.rs46
-rw-r--r--components/layout/flexbox/layout.rs13
-rw-r--r--tests/wpt/meta/MANIFEST.json2
-rw-r--r--tests/wpt/tests/css/cssom-view/table-client-props.html13
5 files changed, 54 insertions, 51 deletions
diff --git a/components/canvas/backend.rs b/components/canvas/backend.rs
index 53acbea8b8d..7e348fbc9b9 100644
--- a/components/canvas/backend.rs
+++ b/components/canvas/backend.rs
@@ -134,7 +134,18 @@ pub(crate) trait GenericPathBuilder<B: Backend> {
start_angle: f32,
end_angle: f32,
anticlockwise: bool,
- );
+ ) {
+ Self::ellipse(
+ self,
+ origin,
+ radius,
+ radius,
+ 0.,
+ start_angle,
+ end_angle,
+ anticlockwise,
+ );
+ }
fn bezier_curve_to(
&mut self,
control_point1: &Point2D<f32>,
@@ -212,7 +223,23 @@ pub(crate) trait GenericPathBuilder<B: Backend> {
large_arc: bool,
sweep: bool,
end_point: Point2D<f32>,
- );
+ ) {
+ let Some(start) = self.get_current_point() else {
+ return;
+ };
+
+ let arc = lyon_geom::SvgArc {
+ from: start,
+ to: end_point,
+ radii: lyon_geom::vector(radius_x, radius_y),
+ x_rotation: lyon_geom::Angle::degrees(rotation_angle),
+ flags: lyon_geom::ArcFlags { large_arc, sweep },
+ };
+
+ arc.for_each_quadratic_bezier(&mut |q| {
+ self.quadratic_curve_to(&q.ctrl, &q.to);
+ });
+ }
fn finish(&mut self) -> B::Path;
}
diff --git a/components/canvas/raqote_backend.rs b/components/canvas/raqote_backend.rs
index efe0ffd05b8..ecf780c36d5 100644
--- a/components/canvas/raqote_backend.rs
+++ b/components/canvas/raqote_backend.rs
@@ -680,26 +680,6 @@ impl PathBuilder {
}
impl GenericPathBuilder<RaqoteBackend> for PathBuilder {
- fn arc(
- &mut self,
- origin: Point2D<f32>,
- radius: f32,
- start_angle: f32,
- end_angle: f32,
- anticlockwise: bool,
- ) {
- <PathBuilder as GenericPathBuilder<RaqoteBackend>>::ellipse(
- self,
- origin,
- radius,
- radius,
- 0.,
- start_angle,
- end_angle,
- anticlockwise,
- );
- }
-
fn bezier_curve_to(
&mut self,
control_point1: &Point2D<f32>,
@@ -720,32 +700,6 @@ impl GenericPathBuilder<RaqoteBackend> for PathBuilder {
self.0.as_mut().unwrap().close();
}
- fn svg_arc(
- &mut self,
- radius_x: f32,
- radius_y: f32,
- rotation_angle: f32,
- large_arc: bool,
- sweep: bool,
- end_point: Point2D<f32>,
- ) {
- let Some(start) = self.get_current_point() else {
- return;
- };
-
- let arc = lyon_geom::SvgArc {
- from: start,
- to: end_point,
- radii: lyon_geom::vector(radius_x, radius_y),
- x_rotation: lyon_geom::Angle::degrees(rotation_angle),
- flags: lyon_geom::ArcFlags { large_arc, sweep },
- };
-
- arc.for_each_quadratic_bezier(&mut |q| {
- self.quadratic_curve_to(&q.ctrl, &q.to);
- });
- }
-
fn get_current_point(&mut self) -> Option<Point2D<f32>> {
let path = self.finish();
self.0 = Some(path.clone().into());
diff --git a/components/layout/flexbox/layout.rs b/components/layout/flexbox/layout.rs
index e69b792e272..3ddbb71ba89 100644
--- a/components/layout/flexbox/layout.rs
+++ b/components/layout/flexbox/layout.rs
@@ -29,7 +29,9 @@ use super::{FlexContainer, FlexContainerConfig, FlexItemBox, FlexLevelBox};
use crate::cell::ArcRefCell;
use crate::context::LayoutContext;
use crate::formatting_contexts::{Baselines, IndependentFormattingContextContents};
-use crate::fragment_tree::{BoxFragment, CollapsedBlockMargins, Fragment, FragmentFlags};
+use crate::fragment_tree::{
+ BoxFragment, CollapsedBlockMargins, Fragment, FragmentFlags, SpecificLayoutInfo,
+};
use crate::geom::{AuOrAuto, LogicalRect, LogicalSides, LogicalVec2, Size, Sizes};
use crate::layout_box_base::CacheableLayoutResult;
use crate::positioned::{
@@ -142,6 +144,9 @@ struct FlexItemLayoutResult {
// Whether or not this layout had a child that dependeded on block constraints.
has_child_which_depends_on_block_constraints: bool,
+
+ // The specific layout info that this flex item had.
+ specific_layout_info: Option<SpecificLayoutInfo>,
}
impl FlexItemLayoutResult {
@@ -295,7 +300,8 @@ impl FlexLineItem<'_> {
.sides_to_flow_relative(item_margin)
.to_physical(container_writing_mode),
None, /* clearance */
- );
+ )
+ .with_specific_layout_info(self.layout_result.specific_layout_info);
// If this flex item establishes a containing block for absolutely-positioned
// descendants, then lay out any relevant absolutely-positioned children. This
@@ -1910,6 +1916,7 @@ impl FlexItem<'_> {
// size can differ from the hypothetical cross size, we should defer
// synthesizing until needed.
baseline_relative_to_margin_box: None,
+ specific_layout_info: None,
})
},
IndependentFormattingContextContents::NonReplaced(non_replaced) => {
@@ -1944,6 +1951,7 @@ impl FlexItem<'_> {
content_block_size,
baselines: content_box_baselines,
depends_on_block_constraints,
+ specific_layout_info,
..
} = layout;
@@ -2012,6 +2020,7 @@ impl FlexItem<'_> {
containing_block_block_size: item_as_containing_block.size.block,
depends_on_block_constraints,
has_child_which_depends_on_block_constraints,
+ specific_layout_info,
})
},
}
diff --git a/tests/wpt/meta/MANIFEST.json b/tests/wpt/meta/MANIFEST.json
index 73aa09203dc..72aed525d96 100644
--- a/tests/wpt/meta/MANIFEST.json
+++ b/tests/wpt/meta/MANIFEST.json
@@ -618436,7 +618436,7 @@
]
],
"table-client-props.html": [
- "4af06d6bf71f0df75d3710ec0906445e943d340d",
+ "2895bebebbf1868ef60f947d230ecca96dd6e85a",
[
null,
{}
diff --git a/tests/wpt/tests/css/cssom-view/table-client-props.html b/tests/wpt/tests/css/cssom-view/table-client-props.html
index 4af06d6bf71..2895bebebbf 100644
--- a/tests/wpt/tests/css/cssom-view/table-client-props.html
+++ b/tests/wpt/tests/css/cssom-view/table-client-props.html
@@ -43,6 +43,19 @@
<tr><td>`,
26, 34,
"Table with collapsed border" ],
+ [ `<div style="display: flex">
+ <table style="width: 20px; height: 30px;
+ border-width: 1px 2px 3px 4px; border-style: solid;
+ border-collapse: separate; box-sizing: content-box">`,
+ 26, 34,
+ "Flex-level table with separated border" ],
+ [ `<div style="display: flex">
+ <table style="width: 20px; height: 30px;
+ border-width: 2px 4px 6px 8px; border-style: solid;
+ border-collapse: collapse; box-sizing: content-box">
+ <tr><td>`,
+ 26, 34,
+ "Flex-level table with collapsed border" ],
[ `<table>
<caption style="width: 40px; height: 50px; padding: 1px 2px 3px 4px">`,
46, 54,