diff options
Diffstat (limited to 'chromium/third_party/blink/renderer/core/layout/ng/mathml')
11 files changed, 131 insertions, 119 deletions
diff --git a/chromium/third_party/blink/renderer/core/layout/ng/mathml/ng_math_fraction_layout_algorithm.cc b/chromium/third_party/blink/renderer/core/layout/ng/mathml/ng_math_fraction_layout_algorithm.cc index 831821243aa..01c72e4fa4c 100644 --- a/chromium/third_party/blink/renderer/core/layout/ng/mathml/ng_math_fraction_layout_algorithm.cc +++ b/chromium/third_party/blink/renderer/core/layout/ng/mathml/ng_math_fraction_layout_algorithm.cc @@ -124,10 +124,7 @@ FractionStackParameters GetFractionStackParameters(const ComputedStyle& style) { NGMathFractionLayoutAlgorithm::NGMathFractionLayoutAlgorithm( const NGLayoutAlgorithmParams& params) - : NGLayoutAlgorithm(params), - border_scrollbar_padding_(params.fragment_geometry.border + - params.fragment_geometry.padding + - params.fragment_geometry.scrollbar) { + : NGLayoutAlgorithm(params) { DCHECK(params.space.IsNewFormattingContext()); container_builder_.SetIsNewFormattingContext( params.space.IsNewFormattingContext()); @@ -142,8 +139,7 @@ void NGMathFractionLayoutAlgorithm::GatherChildren(NGBlockNode* numerator, NGBlockNode block_child = To<NGBlockNode>(child); if (child.IsOutOfFlowPositioned()) { container_builder_.AddOutOfFlowChildCandidate( - block_child, {border_scrollbar_padding_.inline_start, - border_scrollbar_padding_.block_start}); + block_child, BorderScrollbarPadding().StartOffset()); continue; } if (!*numerator) { @@ -169,17 +165,14 @@ scoped_refptr<const NGLayoutResult> NGMathFractionLayoutAlgorithm::Layout() { NGBlockNode denominator = nullptr; GatherChildren(&numerator, &denominator); - const LogicalSize border_box_size = container_builder_.InitialBorderBoxSize(); - auto child_available_size = - ShrinkAvailableSize(border_box_size, border_scrollbar_padding_); auto numerator_space = CreateConstraintSpaceForMathChild( - Node(), child_available_size, ConstraintSpace(), numerator); + Node(), ChildAvailableSize(), ConstraintSpace(), numerator); scoped_refptr<const NGLayoutResult> numerator_layout_result = numerator.Layout(numerator_space); auto numerator_margins = ComputeMarginsFor(numerator_space, numerator.Style(), ConstraintSpace()); auto denominator_space = CreateConstraintSpaceForMathChild( - Node(), child_available_size, ConstraintSpace(), denominator); + Node(), ChildAvailableSize(), ConstraintSpace(), denominator); scoped_refptr<const NGLayoutResult> denominator_layout_result = denominator.Layout(denominator_space); auto denominator_margins = ComputeMarginsFor( @@ -238,8 +231,8 @@ scoped_refptr<const NGLayoutResult> NGMathFractionLayoutAlgorithm::Layout() { LayoutUnit fraction_descent = std::max(-numerator_shift + numerator_descent, denominator_shift + denominator_descent); - fraction_ascent += border_scrollbar_padding_.block_start; - fraction_descent += border_scrollbar_padding_.block_end; + fraction_ascent += BorderScrollbarPadding().block_start; + fraction_descent += BorderScrollbarPadding().block_end; LayoutUnit total_block_size = fraction_ascent + fraction_descent; container_builder_.SetBaseline(fraction_ascent); @@ -247,14 +240,13 @@ scoped_refptr<const NGLayoutResult> NGMathFractionLayoutAlgorithm::Layout() { LogicalOffset numerator_offset; LogicalOffset denominator_offset; numerator_offset.inline_offset = - border_scrollbar_padding_.inline_start + numerator_margins.inline_start + - (child_available_size.inline_size - + BorderScrollbarPadding().inline_start + numerator_margins.inline_start + + (ChildAvailableSize().inline_size - (numerator_fragment.InlineSize() + numerator_margins.InlineSum())) / 2; denominator_offset.inline_offset = - border_scrollbar_padding_.inline_start + - denominator_margins.inline_start + - (child_available_size.inline_size - + BorderScrollbarPadding().inline_start + denominator_margins.inline_start + + (ChildAvailableSize().inline_size - (denominator_fragment.InlineSize() + denominator_margins.InlineSum())) / 2; @@ -274,11 +266,11 @@ scoped_refptr<const NGLayoutResult> NGMathFractionLayoutAlgorithm::Layout() { denominator.StoreMargins(ConstraintSpace(), denominator_margins); LayoutUnit block_size = ComputeBlockSizeForFragment( - ConstraintSpace(), Style(), border_scrollbar_padding_, total_block_size, - border_box_size.inline_size); + ConstraintSpace(), Style(), BorderPadding(), total_block_size, + container_builder_.InitialBorderBoxSize().inline_size); container_builder_.SetIntrinsicBlockSize(total_block_size); - container_builder_.SetBlockSize(block_size); + container_builder_.SetFragmentsTotalBlockSize(block_size); NGOutOfFlowLayoutPart(Node(), ConstraintSpace(), container_builder_.Borders(), &container_builder_) @@ -290,7 +282,7 @@ scoped_refptr<const NGLayoutResult> NGMathFractionLayoutAlgorithm::Layout() { MinMaxSizesResult NGMathFractionLayoutAlgorithm::ComputeMinMaxSizes( const MinMaxSizesInput& child_input) const { if (auto result = CalculateMinMaxSizesIgnoringChildren( - Node(), border_scrollbar_padding_)) + Node(), BorderScrollbarPadding())) return *result; MinMaxSizes sizes; @@ -310,7 +302,7 @@ MinMaxSizesResult NGMathFractionLayoutAlgorithm::ComputeMinMaxSizes( child_result.depends_on_percentage_block_size; } - sizes += border_scrollbar_padding_.InlineSum(); + sizes += BorderScrollbarPadding().InlineSum(); return {sizes, depends_on_percentage_block_size}; } diff --git a/chromium/third_party/blink/renderer/core/layout/ng/mathml/ng_math_fraction_layout_algorithm.h b/chromium/third_party/blink/renderer/core/layout/ng/mathml/ng_math_fraction_layout_algorithm.h index 83640d5826a..05b8761c6f6 100644 --- a/chromium/third_party/blink/renderer/core/layout/ng/mathml/ng_math_fraction_layout_algorithm.h +++ b/chromium/third_party/blink/renderer/core/layout/ng/mathml/ng_math_fraction_layout_algorithm.h @@ -22,7 +22,6 @@ class CORE_EXPORT NGMathFractionLayoutAlgorithm MinMaxSizesResult ComputeMinMaxSizes(const MinMaxSizesInput&) const final; void GatherChildren(NGBlockNode* numerator, NGBlockNode* denominator); - const NGBoxStrut border_scrollbar_padding_; }; } // namespace blink diff --git a/chromium/third_party/blink/renderer/core/layout/ng/mathml/ng_math_row_layout_algorithm.cc b/chromium/third_party/blink/renderer/core/layout/ng/mathml/ng_math_row_layout_algorithm.cc index a4f4ef38039..851c08fc2fc 100644 --- a/chromium/third_party/blink/renderer/core/layout/ng/mathml/ng_math_row_layout_algorithm.cc +++ b/chromium/third_party/blink/renderer/core/layout/ng/mathml/ng_math_row_layout_algorithm.cc @@ -29,11 +29,7 @@ inline LayoutUnit InlineOffsetForDisplayMathCentering( NGMathRowLayoutAlgorithm::NGMathRowLayoutAlgorithm( const NGLayoutAlgorithmParams& params) - : NGLayoutAlgorithm(params), - border_padding_(params.fragment_geometry.border + - params.fragment_geometry.padding), - border_scrollbar_padding_(border_padding_ + - params.fragment_geometry.scrollbar) { + : NGLayoutAlgorithm(params) { DCHECK(params.space.IsNewFormattingContext()); DCHECK(!ConstraintSpace().HasBlockFragmentation()); container_builder_.SetIsNewFormattingContext( @@ -42,7 +38,7 @@ NGMathRowLayoutAlgorithm::NGMathRowLayoutAlgorithm( } void NGMathRowLayoutAlgorithm::LayoutRowItems( - NGContainerFragmentBuilder::ChildrenVector* children, + ChildrenVector* children, LayoutUnit* max_row_block_baseline, LogicalSize* row_total_size) { LayoutUnit inline_offset, max_row_ascent, max_row_descent; @@ -53,13 +49,12 @@ void NGMathRowLayoutAlgorithm::LayoutRowItems( // absolutely positioned". // Issue: https://github.com/mathml-refresh/mathml/issues/16 container_builder_.AddOutOfFlowChildCandidate( - To<NGBlockNode>(child), {border_scrollbar_padding_.inline_start, - border_scrollbar_padding_.block_start}); + To<NGBlockNode>(child), BorderScrollbarPadding().StartOffset()); continue; } const ComputedStyle& child_style = child.Style(); NGConstraintSpace child_space = CreateConstraintSpaceForMathChild( - Node(), child_available_size_, ConstraintSpace(), child); + Node(), ChildAvailableSize(), ConstraintSpace(), child); scoped_refptr<const NGLayoutResult> result = To<NGBlockNode>(child).Layout(child_space, nullptr /* break token */); const NGPhysicalContainerFragment& physical_fragment = @@ -79,8 +74,9 @@ void NGMathRowLayoutAlgorithm::LayoutRowItems( // TODO(rbuis): Operators can add lspace and rspace. children->emplace_back( + To<NGBlockNode>(child), margins, LogicalOffset{inline_offset, margins.block_start - ascent}, - &physical_fragment); + std::move(&physical_fragment)); inline_offset += fragment.InlineSize() + margins.inline_end; @@ -103,10 +99,8 @@ scoped_refptr<const NGLayoutResult> NGMathRowLayoutAlgorithm::Layout() { LayoutUnit max_row_block_baseline; const LogicalSize border_box_size = container_builder_.InitialBorderBoxSize(); - child_available_size_ = - ShrinkAvailableSize(border_box_size, border_scrollbar_padding_); - NGContainerFragmentBuilder::ChildrenVector children; + ChildrenVector children; LayoutRowItems(&children, &max_row_block_baseline, &max_row_size); // Add children taking into account centering, baseline and @@ -114,23 +108,24 @@ scoped_refptr<const NGLayoutResult> NGMathRowLayoutAlgorithm::Layout() { LayoutUnit center_offset = InlineOffsetForDisplayMathCentering( is_display_math, container_builder_.InlineSize(), max_row_size.inline_size); - LogicalOffset adjust_offset( - border_scrollbar_padding_.inline_start + center_offset, - border_scrollbar_padding_.block_start + max_row_block_baseline); - for (auto& child : children) { - child.offset += adjust_offset; + + LogicalOffset adjust_offset = BorderScrollbarPadding().StartOffset(); + adjust_offset += LogicalOffset{center_offset, max_row_block_baseline}; + for (auto& child_data : children) { + child_data.offset += adjust_offset; container_builder_.AddChild( - To<NGPhysicalContainerFragment>(*child.fragment), child.offset); + To<NGPhysicalContainerFragment>(*child_data.fragment), + child_data.offset); + child_data.child.StoreMargins(ConstraintSpace(), child_data.margins); } - container_builder_.SetBaseline(border_scrollbar_padding_.block_start + - max_row_block_baseline); + container_builder_.SetBaseline(adjust_offset.block_offset); auto block_size = ComputeBlockSizeForFragment( - ConstraintSpace(), Style(), border_padding_, - max_row_size.block_size + border_scrollbar_padding_.BlockSum(), + ConstraintSpace(), Style(), BorderPadding(), + max_row_size.block_size + BorderScrollbarPadding().BlockSum(), border_box_size.inline_size); - container_builder_.SetBlockSize(block_size); + container_builder_.SetFragmentsTotalBlockSize(block_size); NGOutOfFlowLayoutPart( Node(), ConstraintSpace(), @@ -144,7 +139,7 @@ scoped_refptr<const NGLayoutResult> NGMathRowLayoutAlgorithm::Layout() { MinMaxSizesResult NGMathRowLayoutAlgorithm::ComputeMinMaxSizes( const MinMaxSizesInput& child_input) const { if (auto result = CalculateMinMaxSizesIgnoringChildren( - Node(), border_scrollbar_padding_)) + Node(), BorderScrollbarPadding())) return *result; MinMaxSizes sizes; @@ -171,7 +166,7 @@ MinMaxSizesResult NGMathRowLayoutAlgorithm::ComputeMinMaxSizes( sizes.Encompass(LayoutUnit()); DCHECK_LE(sizes.min_size, sizes.max_size); - sizes += border_scrollbar_padding_.InlineSum(); + sizes += BorderScrollbarPadding().InlineSum(); return {sizes, depends_on_percentage_block_size}; } diff --git a/chromium/third_party/blink/renderer/core/layout/ng/mathml/ng_math_row_layout_algorithm.h b/chromium/third_party/blink/renderer/core/layout/ng/mathml/ng_math_row_layout_algorithm.h index 1463e6256f6..478fc8167c0 100644 --- a/chromium/third_party/blink/renderer/core/layout/ng/mathml/ng_math_row_layout_algorithm.h +++ b/chromium/third_party/blink/renderer/core/layout/ng/mathml/ng_math_row_layout_algorithm.h @@ -19,21 +19,34 @@ class CORE_EXPORT NGMathRowLayoutAlgorithm NGBoxFragmentBuilder, NGBlockBreakToken> { public: - NGMathRowLayoutAlgorithm(const NGLayoutAlgorithmParams& params); - - protected: - void LayoutRowItems(NGContainerFragmentBuilder::ChildrenVector*, - LayoutUnit* max_row_block_baseline, - LogicalSize* row_total_size); + explicit NGMathRowLayoutAlgorithm(const NGLayoutAlgorithmParams& params); + + struct ChildWithOffsetAndMargins { + DISALLOW_NEW(); + ChildWithOffsetAndMargins(const NGBlockNode& child, + const NGBoxStrut& margins, + LogicalOffset offset, + scoped_refptr<const NGPhysicalFragment> fragment) + : child(child), + margins(margins), + offset(offset), + fragment(std::move(fragment)) {} + + NGBlockNode child; + NGBoxStrut margins; + LogicalOffset offset; + scoped_refptr<const NGPhysicalFragment> fragment; + }; + typedef Vector<ChildWithOffsetAndMargins, 4> ChildrenVector; private: scoped_refptr<const NGLayoutResult> Layout() final; MinMaxSizesResult ComputeMinMaxSizes(const MinMaxSizesInput&) const final; - LogicalSize child_available_size_; - const NGBoxStrut border_padding_; - const NGBoxStrut border_scrollbar_padding_; + void LayoutRowItems(ChildrenVector*, + LayoutUnit* max_row_block_baseline, + LogicalSize* row_total_size); }; } // namespace blink diff --git a/chromium/third_party/blink/renderer/core/layout/ng/mathml/ng_math_scripts_layout_algorithm.cc b/chromium/third_party/blink/renderer/core/layout/ng/mathml/ng_math_scripts_layout_algorithm.cc index afdfca8c5b8..31b2a7a4f77 100644 --- a/chromium/third_party/blink/renderer/core/layout/ng/mathml/ng_math_scripts_layout_algorithm.cc +++ b/chromium/third_party/blink/renderer/core/layout/ng/mathml/ng_math_scripts_layout_algorithm.cc @@ -79,16 +79,11 @@ ScriptsVerticalParameters GetScriptsVerticalParameters( NGMathScriptsLayoutAlgorithm::NGMathScriptsLayoutAlgorithm( const NGLayoutAlgorithmParams& params) - : NGLayoutAlgorithm(params), - border_scrollbar_padding_(params.fragment_geometry.border + - params.fragment_geometry.scrollbar + - params.fragment_geometry.padding) { + : NGLayoutAlgorithm(params) { DCHECK(params.space.IsNewFormattingContext()); container_builder_.SetIsNewFormattingContext( params.space.IsNewFormattingContext()); container_builder_.SetInitialFragmentGeometry(params.fragment_geometry); - child_available_size_ = ShrinkAvailableSize( - container_builder_.InitialBorderBoxSize(), border_scrollbar_padding_); } void NGMathScriptsLayoutAlgorithm::GatherChildren( @@ -103,8 +98,7 @@ void NGMathScriptsLayoutAlgorithm::GatherChildren( if (child.IsOutOfFlowPositioned()) { if (container_builder) { container_builder->AddOutOfFlowChildCandidate( - block_child, {border_scrollbar_padding_.inline_start, - border_scrollbar_padding_.block_start}); + block_child, BorderScrollbarPadding().StartOffset()); } continue; } @@ -232,7 +226,7 @@ NGMathScriptsLayoutAlgorithm::ChildAndMetrics NGMathScriptsLayoutAlgorithm::LayoutAndGetMetrics(NGBlockNode child) const { ChildAndMetrics child_and_metrics; auto constraint_space = CreateConstraintSpaceForMathChild( - Node(), child_available_size_, ConstraintSpace(), child); + Node(), ChildAvailableSize(), ConstraintSpace(), child); child_and_metrics.result = child.Layout(constraint_space, nullptr /*break_token*/); NGBoxFragment fragment( @@ -265,14 +259,17 @@ scoped_refptr<const NGLayoutResult> NGMathScriptsLayoutAlgorithm::Layout() { VerticalMetrics metrics = GetVerticalMetrics(base_metrics, sub_metrics, sup_metrics); + const LogicalOffset content_start_offset = + BorderScrollbarPadding().StartOffset(); + LayoutUnit ascent = std::max(base_metrics.ascent, metrics.ascent + metrics.sup_shift) + - border_scrollbar_padding_.block_start; + content_start_offset.block_offset; LayoutUnit descent = std::max(base_metrics.descent, metrics.descent + metrics.sub_shift); // TODO(rbuis): take into account italic correction. - LayoutUnit inline_offset = border_scrollbar_padding_.inline_start + - base_metrics.margins.inline_start; + LayoutUnit inline_offset = + content_start_offset.inline_offset + base_metrics.margins.inline_start; LogicalOffset base_offset( inline_offset, @@ -302,15 +299,14 @@ scoped_refptr<const NGLayoutResult> NGMathScriptsLayoutAlgorithm::Layout() { container_builder_.SetBaseline(ascent); LayoutUnit intrinsic_block_size = - ascent + descent + border_scrollbar_padding_.block_end; + ascent + descent + BorderScrollbarPadding().block_end; LayoutUnit block_size = ComputeBlockSizeForFragment( - ConstraintSpace(), Style(), border_scrollbar_padding_, - intrinsic_block_size, + ConstraintSpace(), Style(), BorderPadding(), intrinsic_block_size, container_builder_.InitialBorderBoxSize().inline_size); container_builder_.SetIntrinsicBlockSize(intrinsic_block_size); - container_builder_.SetBlockSize(block_size); + container_builder_.SetFragmentsTotalBlockSize(block_size); NGOutOfFlowLayoutPart(Node(), ConstraintSpace(), container_builder_.Borders(), &container_builder_) @@ -322,7 +318,7 @@ scoped_refptr<const NGLayoutResult> NGMathScriptsLayoutAlgorithm::Layout() { MinMaxSizesResult NGMathScriptsLayoutAlgorithm::ComputeMinMaxSizes( const MinMaxSizesInput& child_input) const { if (auto result = CalculateMinMaxSizesIgnoringChildren( - Node(), border_scrollbar_padding_)) + Node(), BorderScrollbarPadding())) return *result; NGBlockNode base = nullptr; @@ -384,7 +380,7 @@ MinMaxSizesResult NGMathScriptsLayoutAlgorithm::ComputeMinMaxSizes( NOTREACHED(); break; } - sizes += border_scrollbar_padding_.InlineSum(); + sizes += BorderScrollbarPadding().InlineSum(); return {sizes, depends_on_percentage_block_size}; } diff --git a/chromium/third_party/blink/renderer/core/layout/ng/mathml/ng_math_scripts_layout_algorithm.h b/chromium/third_party/blink/renderer/core/layout/ng/mathml/ng_math_scripts_layout_algorithm.h index 8d8f34ea40c..ce65ecd1df9 100644 --- a/chromium/third_party/blink/renderer/core/layout/ng/mathml/ng_math_scripts_layout_algorithm.h +++ b/chromium/third_party/blink/renderer/core/layout/ng/mathml/ng_math_scripts_layout_algorithm.h @@ -57,9 +57,6 @@ class CORE_EXPORT NGMathScriptsLayoutAlgorithm const ChildAndMetrics& sup_metrics) const; scoped_refptr<const NGLayoutResult> Layout() final; - - LogicalSize child_available_size_; - const NGBoxStrut border_scrollbar_padding_; }; } // namespace blink diff --git a/chromium/third_party/blink/renderer/core/layout/ng/mathml/ng_math_space_layout_algorithm.cc b/chromium/third_party/blink/renderer/core/layout/ng/mathml/ng_math_space_layout_algorithm.cc index 6dad93301a8..51be5e7fb8b 100644 --- a/chromium/third_party/blink/renderer/core/layout/ng/mathml/ng_math_space_layout_algorithm.cc +++ b/chromium/third_party/blink/renderer/core/layout/ng/mathml/ng_math_space_layout_algorithm.cc @@ -11,9 +11,7 @@ namespace blink { NGMathSpaceLayoutAlgorithm::NGMathSpaceLayoutAlgorithm( const NGLayoutAlgorithmParams& params) - : NGLayoutAlgorithm(params), - border_padding_(params.fragment_geometry.border + - params.fragment_geometry.padding) { + : NGLayoutAlgorithm(params) { DCHECK(params.fragment_geometry.scrollbar.IsEmpty()); container_builder_.SetIsNewFormattingContext(true); container_builder_.SetInitialFragmentGeometry(params.fragment_geometry); @@ -22,27 +20,28 @@ NGMathSpaceLayoutAlgorithm::NGMathSpaceLayoutAlgorithm( scoped_refptr<const NGLayoutResult> NGMathSpaceLayoutAlgorithm::Layout() { DCHECK(!BreakToken()); + LayoutUnit intrinsic_block_size = BorderScrollbarPadding().BlockSum(); LayoutUnit block_size = ComputeBlockSizeForFragment( - ConstraintSpace(), Style(), border_padding_, border_padding_.BlockSum(), + ConstraintSpace(), Style(), BorderPadding(), intrinsic_block_size, container_builder_.InitialBorderBoxSize().inline_size); - container_builder_.SetIntrinsicBlockSize(border_padding_.BlockSum()); - container_builder_.SetBlockSize(block_size); + container_builder_.SetIntrinsicBlockSize(intrinsic_block_size); + container_builder_.SetFragmentsTotalBlockSize(block_size); container_builder_.SetBaseline( - border_padding_.block_start + + BorderScrollbarPadding().block_start + ValueForLength(Style().GetMathBaseline(), LayoutUnit())); return container_builder_.ToBoxFragment(); } MinMaxSizesResult NGMathSpaceLayoutAlgorithm::ComputeMinMaxSizes( const MinMaxSizesInput&) const { - if (auto result = - CalculateMinMaxSizesIgnoringChildren(Node(), border_padding_)) + if (auto result = CalculateMinMaxSizesIgnoringChildren( + Node(), BorderScrollbarPadding())) return *result; MinMaxSizes sizes; - sizes += border_padding_.InlineSum(); + sizes += BorderScrollbarPadding().InlineSum(); return {sizes, /* depends_on_percentage_block_size */ false}; } diff --git a/chromium/third_party/blink/renderer/core/layout/ng/mathml/ng_math_space_layout_algorithm.h b/chromium/third_party/blink/renderer/core/layout/ng/mathml/ng_math_space_layout_algorithm.h index 838d058f895..5306bf446cf 100644 --- a/chromium/third_party/blink/renderer/core/layout/ng/mathml/ng_math_space_layout_algorithm.h +++ b/chromium/third_party/blink/renderer/core/layout/ng/mathml/ng_math_space_layout_algorithm.h @@ -21,8 +21,6 @@ class CORE_EXPORT NGMathSpaceLayoutAlgorithm scoped_refptr<const NGLayoutResult> Layout() final; MinMaxSizesResult ComputeMinMaxSizes(const MinMaxSizesInput&) const final; - - const NGBoxStrut border_padding_; }; } // namespace blink diff --git a/chromium/third_party/blink/renderer/core/layout/ng/mathml/ng_math_under_over_layout_algorithm.cc b/chromium/third_party/blink/renderer/core/layout/ng/mathml/ng_math_under_over_layout_algorithm.cc index 1b419ddb83e..872196de21a 100644 --- a/chromium/third_party/blink/renderer/core/layout/ng/mathml/ng_math_under_over_layout_algorithm.cc +++ b/chromium/third_party/blink/renderer/core/layout/ng/mathml/ng_math_under_over_layout_algorithm.cc @@ -75,10 +75,7 @@ UnderOverVerticalParameters GetUnderOverVerticalParameters( NGMathUnderOverLayoutAlgorithm::NGMathUnderOverLayoutAlgorithm( const NGLayoutAlgorithmParams& params) - : NGLayoutAlgorithm(params), - border_scrollbar_padding_(params.fragment_geometry.border + - params.fragment_geometry.padding + - params.fragment_geometry.scrollbar) { + : NGLayoutAlgorithm(params) { DCHECK(params.space.IsNewFormattingContext()); container_builder_.SetIsNewFormattingContext( params.space.IsNewFormattingContext()); @@ -94,8 +91,7 @@ void NGMathUnderOverLayoutAlgorithm::GatherChildren(NGBlockNode* base, NGBlockNode block_child = To<NGBlockNode>(child); if (child.IsOutOfFlowPositioned()) { container_builder_.AddOutOfFlowChildCandidate( - block_child, {border_scrollbar_padding_.inline_start, - border_scrollbar_padding_.block_start}); + block_child, BorderScrollbarPadding().StartOffset()); continue; } if (!*base) { @@ -135,10 +131,11 @@ scoped_refptr<const NGLayoutResult> NGMathUnderOverLayoutAlgorithm::Layout() { GatherChildren(&base, &over, &under); const LogicalSize border_box_size = container_builder_.InitialBorderBoxSize(); - auto child_available_size = - ShrinkAvailableSize(border_box_size, border_scrollbar_padding_); - LayoutUnit block_offset = border_scrollbar_padding_.block_start; + const LogicalOffset content_start_offset = + BorderScrollbarPadding().StartOffset(); + + LayoutUnit block_offset = content_start_offset.block_offset; UnderOverVerticalParameters parameters = GetUnderOverVerticalParameters(Style()); // TODO(rbuis): handle stretchy operators. @@ -148,7 +145,7 @@ scoped_refptr<const NGLayoutResult> NGMathUnderOverLayoutAlgorithm::Layout() { // therefore centered relative to themselves). if (over) { auto over_space = CreateConstraintSpaceForMathChild( - Node(), child_available_size, ConstraintSpace(), over); + Node(), ChildAvailableSize(), ConstraintSpace(), over); scoped_refptr<const NGLayoutResult> over_layout_result = over.Layout(over_space); NGBoxStrut over_margins = @@ -158,8 +155,8 @@ scoped_refptr<const NGLayoutResult> NGMathUnderOverLayoutAlgorithm::Layout() { To<NGPhysicalBoxFragment>(over_layout_result->PhysicalFragment())); block_offset += parameters.over_extra_ascender + over_margins.block_start; LogicalOffset over_offset = { - border_scrollbar_padding_.inline_start + over_margins.inline_start + - (child_available_size.inline_size - + content_start_offset.inline_offset + over_margins.inline_start + + (ChildAvailableSize().inline_size - (over_fragment.InlineSize() + over_margins.InlineSum())) / 2, block_offset}; @@ -180,7 +177,7 @@ scoped_refptr<const NGLayoutResult> NGMathUnderOverLayoutAlgorithm::Layout() { } auto base_space = CreateConstraintSpaceForMathChild( - Node(), child_available_size, ConstraintSpace(), base); + Node(), ChildAvailableSize(), ConstraintSpace(), base); auto base_layout_result = base.Layout(base_space); auto base_margins = ComputeMarginsFor(base_space, base.Style(), ConstraintSpace()); @@ -191,8 +188,8 @@ scoped_refptr<const NGLayoutResult> NGMathUnderOverLayoutAlgorithm::Layout() { block_offset += base_margins.block_start; LogicalOffset base_offset = { - border_scrollbar_padding_.inline_start + base_margins.inline_start + - (child_available_size.inline_size - + content_start_offset.inline_offset + base_margins.inline_start + + (ChildAvailableSize().inline_size - (base_fragment.InlineSize() + base_margins.InlineSum())) / 2, block_offset}; @@ -203,7 +200,7 @@ scoped_refptr<const NGLayoutResult> NGMathUnderOverLayoutAlgorithm::Layout() { if (under) { auto under_space = CreateConstraintSpaceForMathChild( - Node(), child_available_size, ConstraintSpace(), under); + Node(), ChildAvailableSize(), ConstraintSpace(), under); scoped_refptr<const NGLayoutResult> under_layout_result = under.Layout(under_space); NGBoxStrut under_margins = @@ -221,8 +218,8 @@ scoped_refptr<const NGLayoutResult> NGMathUnderOverLayoutAlgorithm::Layout() { parameters.under_shift_min - under_ascent); } LogicalOffset under_offset = { - border_scrollbar_padding_.inline_start + under_margins.inline_start + - (child_available_size.inline_size - + content_start_offset.inline_offset + under_margins.inline_start + + (ChildAvailableSize().inline_size - (under_fragment.InlineSize() + under_margins.InlineSum())) / 2, block_offset}; @@ -238,14 +235,14 @@ scoped_refptr<const NGLayoutResult> NGMathUnderOverLayoutAlgorithm::Layout() { base_fragment.Baseline().value_or(base_fragment.BlockSize()); container_builder_.SetBaseline(base_offset.block_offset + base_ascent); - block_offset += border_scrollbar_padding_.block_end; + block_offset += BorderScrollbarPadding().block_end; - LayoutUnit block_size = ComputeBlockSizeForFragment( - ConstraintSpace(), Style(), border_scrollbar_padding_, block_offset, - border_box_size.inline_size); + LayoutUnit block_size = + ComputeBlockSizeForFragment(ConstraintSpace(), Style(), BorderPadding(), + block_offset, border_box_size.inline_size); container_builder_.SetIntrinsicBlockSize(block_offset); - container_builder_.SetBlockSize(block_size); + container_builder_.SetFragmentsTotalBlockSize(block_size); NGOutOfFlowLayoutPart(Node(), ConstraintSpace(), container_builder_.Borders(), &container_builder_) @@ -259,7 +256,7 @@ MinMaxSizesResult NGMathUnderOverLayoutAlgorithm::ComputeMinMaxSizes( DCHECK(IsValidMathMLScript(Node())); if (auto result = CalculateMinMaxSizesIgnoringChildren( - Node(), border_scrollbar_padding_)) + Node(), BorderScrollbarPadding())) return *result; MinMaxSizes sizes; @@ -279,7 +276,7 @@ MinMaxSizesResult NGMathUnderOverLayoutAlgorithm::ComputeMinMaxSizes( child_result.depends_on_percentage_block_size; } - sizes += border_scrollbar_padding_.InlineSum(); + sizes += BorderScrollbarPadding().InlineSum(); return {sizes, depends_on_percentage_block_size}; } diff --git a/chromium/third_party/blink/renderer/core/layout/ng/mathml/ng_math_under_over_layout_algorithm.h b/chromium/third_party/blink/renderer/core/layout/ng/mathml/ng_math_under_over_layout_algorithm.h index a324e1b6032..c5d7d931943 100644 --- a/chromium/third_party/blink/renderer/core/layout/ng/mathml/ng_math_under_over_layout_algorithm.h +++ b/chromium/third_party/blink/renderer/core/layout/ng/mathml/ng_math_under_over_layout_algorithm.h @@ -26,8 +26,6 @@ class CORE_EXPORT NGMathUnderOverLayoutAlgorithm void GatherChildren(NGBlockNode* base, NGBlockNode* second, NGBlockNode* third); - - const NGBoxStrut border_scrollbar_padding_; }; } // namespace blink diff --git a/chromium/third_party/blink/renderer/core/layout/ng/mathml/ng_mathml_paint_info.h b/chromium/third_party/blink/renderer/core/layout/ng/mathml/ng_mathml_paint_info.h new file mode 100644 index 00000000000..157a3f09651 --- /dev/null +++ b/chromium/third_party/blink/renderer/core/layout/ng/mathml/ng_mathml_paint_info.h @@ -0,0 +1,28 @@ +// Copyright 2020 The Chromium Authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +#ifndef THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_NG_MATHML_NG_MATHML_PAINT_INFO_H_ +#define THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_NG_MATHML_NG_MATHML_PAINT_INFO_H_ + +#include <unicode/uchar.h> +#include "third_party/blink/renderer/core/core_export.h" +#include "third_party/blink/renderer/platform/geometry/layout_unit.h" + +namespace blink { + +class ShapeResultView; + +struct CORE_EXPORT NGMathMLPaintInfo { + USING_FAST_MALLOC(NGMathMLPaintInfo); + + public: + scoped_refptr<const ShapeResultView> operator_shape_result_view; + LayoutUnit operator_inline_size; + LayoutUnit operator_ascent; + LayoutUnit operator_descent; +}; + +} // namespace blink + +#endif // THIRD_PARTY_BLINK_RENDERER_CORE_LAYOUT_NG_MATHML_NG_MATHML_PAINT_INFO_H_ |