diff options
-rw-r--r-- | components/canvas/backend.rs | 31 | ||||
-rw-r--r-- | components/canvas/raqote_backend.rs | 46 | ||||
-rw-r--r-- | components/layout/flexbox/layout.rs | 13 | ||||
-rw-r--r-- | tests/wpt/meta/MANIFEST.json | 2 | ||||
-rw-r--r-- | tests/wpt/tests/css/cssom-view/table-client-props.html | 13 |
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, |