Changeset 252862 in webkit
- Timestamp:
- Nov 25, 2019 8:19:42 AM (4 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r252861 r252862 1 2019-11-25 Zalan Bujtas <zalan@apple.com> 2 3 [LFC] Pass UsedHorizontal/VerticalValues in by const reference 4 https://bugs.webkit.org/show_bug.cgi?id=204563 5 <rdar://problem/57464129> 6 7 Reviewed by Antti Koivisto. 8 9 UsedHorizontal/VerticalValues have grown a bit so let's pass them in by reference. 10 11 * layout/FormattingContext.h: 12 * layout/FormattingContextGeometry.cpp: 13 (WebCore::Layout::FormattingContext::Geometry::staticVerticalPositionForOutOfFlowPositioned const): 14 (WebCore::Layout::FormattingContext::Geometry::staticHorizontalPositionForOutOfFlowPositioned const): 15 (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedVerticalGeometry const): 16 (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedHorizontalGeometry): 17 (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedVerticalGeometry const): 18 (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedHorizontalGeometry const): 19 (WebCore::Layout::FormattingContext::Geometry::complicatedCases const): 20 (WebCore::Layout::FormattingContext::Geometry::floatingNonReplacedWidthAndMargin): 21 (WebCore::Layout::FormattingContext::Geometry::floatingReplacedHeightAndMargin const): 22 (WebCore::Layout::FormattingContext::Geometry::floatingReplacedWidthAndMargin const): 23 (WebCore::Layout::FormattingContext::Geometry::outOfFlowVerticalGeometry const): 24 (WebCore::Layout::FormattingContext::Geometry::outOfFlowHorizontalGeometry): 25 (WebCore::Layout::FormattingContext::Geometry::floatingHeightAndMargin const): 26 (WebCore::Layout::FormattingContext::Geometry::floatingWidthAndMargin): 27 (WebCore::Layout::FormattingContext::Geometry::inlineReplacedHeightAndMargin const): 28 (WebCore::Layout::FormattingContext::Geometry::inlineReplacedWidthAndMargin const): 29 (WebCore::Layout::FormattingContext::Geometry::inFlowPositionedPositionOffset const): 30 (WebCore::Layout::FormattingContext::Geometry::computedPadding const): 31 (WebCore::Layout::FormattingContext::Geometry::computedHorizontalMargin const): 32 (WebCore::Layout::FormattingContext::Geometry::computedVerticalMargin const): 33 * layout/blockformatting/BlockFormattingContext.h: 34 * layout/blockformatting/BlockFormattingContextGeometry.cpp: 35 (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedHeightAndMargin): 36 (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedWidthAndMargin const): 37 (WebCore::Layout::BlockFormattingContext::Geometry::inFlowReplacedWidthAndMargin const): 38 (WebCore::Layout::BlockFormattingContext::Geometry::staticVerticalPosition const): 39 (WebCore::Layout::BlockFormattingContext::Geometry::staticHorizontalPosition const): 40 (WebCore::Layout::BlockFormattingContext::Geometry::staticPosition const): 41 (WebCore::Layout::BlockFormattingContext::Geometry::inFlowHeightAndMargin): 42 (WebCore::Layout::BlockFormattingContext::Geometry::inFlowWidthAndMargin): 43 * layout/inlineformatting/InlineFormattingContext.cpp: 44 (WebCore::Layout::InlineFormattingContext::lineLayout): 45 (WebCore::Layout::InlineFormattingContext::layoutFormattingContextRoot): 46 (WebCore::Layout::InlineFormattingContext::computeHorizontalAndVerticalGeometry): 47 (WebCore::Layout::InlineFormattingContext::computedIntrinsicWidthForConstraint const): 48 (WebCore::Layout::InlineFormattingContext::computeIntrinsicWidthForFormattingRoot): 49 (WebCore::Layout::InlineFormattingContext::computeHorizontalMargin): 50 (WebCore::Layout::InlineFormattingContext::computeWidthAndMargin): 51 (WebCore::Layout::InlineFormattingContext::computeHeightAndMargin): 52 (WebCore::Layout::InlineFormattingContext::computeWidthAndHeightForReplacedInlineBox): 53 (WebCore::Layout::InlineFormattingContext::constraintsForLine): 54 (WebCore::Layout::InlineFormattingContext::setDisplayBoxesForLine): 55 * layout/inlineformatting/InlineFormattingContext.h: 56 * layout/inlineformatting/InlineFormattingContextGeometry.cpp: 57 (WebCore::Layout::InlineFormattingContext::Geometry::inlineBlockWidthAndMargin): 58 (WebCore::Layout::InlineFormattingContext::Geometry::inlineBlockHeightAndMargin const): 59 1 60 2019-11-25 Zalan Bujtas <zalan@apple.com> 2 61 -
trunk/Source/WebCore/layout/FormattingContext.h
r252532 r252862 110 110 class Geometry { 111 111 public: 112 VerticalGeometry outOfFlowVerticalGeometry(const Box&, UsedHorizontalValues, UsedVerticalValues) const;113 HorizontalGeometry outOfFlowHorizontalGeometry(const Box&, UsedHorizontalValues, UsedVerticalValues);114 115 ContentHeightAndMargin floatingHeightAndMargin(const Box&, UsedHorizontalValues, UsedVerticalValues) const;116 ContentWidthAndMargin floatingWidthAndMargin(const Box&, UsedHorizontalValues);117 118 ContentHeightAndMargin inlineReplacedHeightAndMargin(const Box&, UsedHorizontalValues, UsedVerticalValues) const;119 ContentWidthAndMargin inlineReplacedWidthAndMargin(const Box&, UsedHorizontalValues, Optional<UsedVerticalValues> = WTF::nullopt) const;120 121 LayoutSize inFlowPositionedPositionOffset(const Box&, UsedHorizontalValues) const;122 123 ContentHeightAndMargin complicatedCases(const Box&, UsedHorizontalValues, UsedVerticalValues) const;112 VerticalGeometry outOfFlowVerticalGeometry(const Box&, const UsedHorizontalValues&, const UsedVerticalValues&) const; 113 HorizontalGeometry outOfFlowHorizontalGeometry(const Box&, const UsedHorizontalValues&, const UsedVerticalValues&); 114 115 ContentHeightAndMargin floatingHeightAndMargin(const Box&, const UsedHorizontalValues&, const UsedVerticalValues&) const; 116 ContentWidthAndMargin floatingWidthAndMargin(const Box&, const UsedHorizontalValues&); 117 118 ContentHeightAndMargin inlineReplacedHeightAndMargin(const Box&, const UsedHorizontalValues&, const UsedVerticalValues&) const; 119 ContentWidthAndMargin inlineReplacedWidthAndMargin(const Box&, const UsedHorizontalValues&, Optional<UsedVerticalValues> = WTF::nullopt) const; 120 121 LayoutSize inFlowPositionedPositionOffset(const Box&, const UsedHorizontalValues&) const; 122 123 ContentHeightAndMargin complicatedCases(const Box&, const UsedHorizontalValues&, const UsedVerticalValues&) const; 124 124 LayoutUnit shrinkToFitWidth(const Box&, LayoutUnit availableWidth); 125 125 126 126 Edges computedBorder(const Box&) const; 127 Optional<Edges> computedPadding(const Box&, UsedHorizontalValues) const;128 129 ComputedHorizontalMargin computedHorizontalMargin(const Box&, UsedHorizontalValues) const;130 ComputedVerticalMargin computedVerticalMargin(const Box&, UsedHorizontalValues) const;127 Optional<Edges> computedPadding(const Box&, const UsedHorizontalValues&) const; 128 129 ComputedHorizontalMargin computedHorizontalMargin(const Box&, const UsedHorizontalValues&) const; 130 ComputedVerticalMargin computedVerticalMargin(const Box&, const UsedHorizontalValues&) const; 131 131 132 132 Optional<LayoutUnit> computedValueIfNotAuto(const Length& geometryProperty, LayoutUnit containingBlockWidth) const; … … 157 157 158 158 private: 159 VerticalGeometry outOfFlowReplacedVerticalGeometry(const Box&, UsedHorizontalValues, UsedVerticalValues) const;160 HorizontalGeometry outOfFlowReplacedHorizontalGeometry(const Box&, UsedHorizontalValues, UsedVerticalValues) const;161 162 VerticalGeometry outOfFlowNonReplacedVerticalGeometry(const Box&, UsedHorizontalValues, UsedVerticalValues) const;163 HorizontalGeometry outOfFlowNonReplacedHorizontalGeometry(const Box&, UsedHorizontalValues);164 165 ContentHeightAndMargin floatingReplacedHeightAndMargin(const Box&, UsedHorizontalValues, UsedVerticalValues) const;166 ContentWidthAndMargin floatingReplacedWidthAndMargin(const Box&, UsedHorizontalValues) const;167 168 ContentWidthAndMargin floatingNonReplacedWidthAndMargin(const Box&, UsedHorizontalValues);169 170 LayoutUnit staticVerticalPositionForOutOfFlowPositioned(const Box&, UsedVerticalValues) const;171 LayoutUnit staticHorizontalPositionForOutOfFlowPositioned(const Box&, UsedHorizontalValues) const;159 VerticalGeometry outOfFlowReplacedVerticalGeometry(const Box&, const UsedHorizontalValues&, const UsedVerticalValues&) const; 160 HorizontalGeometry outOfFlowReplacedHorizontalGeometry(const Box&, const UsedHorizontalValues&, const UsedVerticalValues&) const; 161 162 VerticalGeometry outOfFlowNonReplacedVerticalGeometry(const Box&, const UsedHorizontalValues&, const UsedVerticalValues&) const; 163 HorizontalGeometry outOfFlowNonReplacedHorizontalGeometry(const Box&, const UsedHorizontalValues&); 164 165 ContentHeightAndMargin floatingReplacedHeightAndMargin(const Box&, const UsedHorizontalValues&, const UsedVerticalValues&) const; 166 ContentWidthAndMargin floatingReplacedWidthAndMargin(const Box&, const UsedHorizontalValues&) const; 167 168 ContentWidthAndMargin floatingNonReplacedWidthAndMargin(const Box&, const UsedHorizontalValues&); 169 170 LayoutUnit staticVerticalPositionForOutOfFlowPositioned(const Box&, const UsedVerticalValues&) const; 171 LayoutUnit staticHorizontalPositionForOutOfFlowPositioned(const Box&, const UsedHorizontalValues&) const; 172 172 173 173 const FormattingContext& m_formattingContext; -
trunk/Source/WebCore/layout/FormattingContextGeometry.cpp
r251238 r252862 213 213 } 214 214 215 LayoutUnit FormattingContext::Geometry::staticVerticalPositionForOutOfFlowPositioned(const Box& layoutBox, UsedVerticalValuesusedVerticalValues) const215 LayoutUnit FormattingContext::Geometry::staticVerticalPositionForOutOfFlowPositioned(const Box& layoutBox, const UsedVerticalValues& usedVerticalValues) const 216 216 { 217 217 ASSERT(layoutBox.isOutOfFlowPositioned()); … … 248 248 } 249 249 250 LayoutUnit FormattingContext::Geometry::staticHorizontalPositionForOutOfFlowPositioned(const Box& layoutBox, UsedHorizontalValuesusedHorizontalValues) const250 LayoutUnit FormattingContext::Geometry::staticHorizontalPositionForOutOfFlowPositioned(const Box& layoutBox, const UsedHorizontalValues& usedHorizontalValues) const 251 251 { 252 252 ASSERT(layoutBox.isOutOfFlowPositioned()); … … 296 296 } 297 297 298 VerticalGeometry FormattingContext::Geometry::outOfFlowNonReplacedVerticalGeometry(const Box& layoutBox, UsedHorizontalValues usedHorizontalValues, UsedVerticalValuesusedVerticalValues) const298 VerticalGeometry FormattingContext::Geometry::outOfFlowNonReplacedVerticalGeometry(const Box& layoutBox, const UsedHorizontalValues& usedHorizontalValues, const UsedVerticalValues& usedVerticalValues) const 299 299 { 300 300 ASSERT(layoutBox.isOutOfFlowPositioned() && !layoutBox.replaced()); … … 415 415 } 416 416 417 HorizontalGeometry FormattingContext::Geometry::outOfFlowNonReplacedHorizontalGeometry(const Box& layoutBox, UsedHorizontalValuesusedHorizontalValues)417 HorizontalGeometry FormattingContext::Geometry::outOfFlowNonReplacedHorizontalGeometry(const Box& layoutBox, const UsedHorizontalValues& usedHorizontalValues) 418 418 { 419 419 ASSERT(layoutBox.isOutOfFlowPositioned() && !layoutBox.replaced()); … … 558 558 } 559 559 560 VerticalGeometry FormattingContext::Geometry::outOfFlowReplacedVerticalGeometry(const Box& layoutBox, UsedHorizontalValues usedHorizontalValues, UsedVerticalValuesusedVerticalValues) const560 VerticalGeometry FormattingContext::Geometry::outOfFlowReplacedVerticalGeometry(const Box& layoutBox, const UsedHorizontalValues& usedHorizontalValues, const UsedVerticalValues& usedVerticalValues) const 561 561 { 562 562 ASSERT(layoutBox.isOutOfFlowPositioned() && layoutBox.replaced()); … … 640 640 } 641 641 642 HorizontalGeometry FormattingContext::Geometry::outOfFlowReplacedHorizontalGeometry(const Box& layoutBox, UsedHorizontalValues usedHorizontalValues, UsedVerticalValuesusedVerticalValues) const642 HorizontalGeometry FormattingContext::Geometry::outOfFlowReplacedHorizontalGeometry(const Box& layoutBox, const UsedHorizontalValues& usedHorizontalValues, const UsedVerticalValues& usedVerticalValues) const 643 643 { 644 644 ASSERT(layoutBox.isOutOfFlowPositioned() && layoutBox.replaced()); … … 744 744 } 745 745 746 ContentHeightAndMargin FormattingContext::Geometry::complicatedCases(const Box& layoutBox, UsedHorizontalValues usedHorizontalValues, UsedVerticalValuesusedVerticalValues) const746 ContentHeightAndMargin FormattingContext::Geometry::complicatedCases(const Box& layoutBox, const UsedHorizontalValues& usedHorizontalValues, const UsedVerticalValues& usedVerticalValues) const 747 747 { 748 748 ASSERT(!layoutBox.replaced()); … … 775 775 } 776 776 777 ContentWidthAndMargin FormattingContext::Geometry::floatingNonReplacedWidthAndMargin(const Box& layoutBox, UsedHorizontalValuesusedHorizontalValues)777 ContentWidthAndMargin FormattingContext::Geometry::floatingNonReplacedWidthAndMargin(const Box& layoutBox, const UsedHorizontalValues& usedHorizontalValues) 778 778 { 779 779 ASSERT(layoutBox.isFloatingPositioned() && !layoutBox.replaced()); … … 797 797 } 798 798 799 ContentHeightAndMargin FormattingContext::Geometry::floatingReplacedHeightAndMargin(const Box& layoutBox, UsedHorizontalValues usedHorizontalValues, UsedVerticalValuesusedVerticalValues) const799 ContentHeightAndMargin FormattingContext::Geometry::floatingReplacedHeightAndMargin(const Box& layoutBox, const UsedHorizontalValues& usedHorizontalValues, const UsedVerticalValues& usedVerticalValues) const 800 800 { 801 801 ASSERT(layoutBox.isFloatingPositioned() && layoutBox.replaced()); … … 807 807 } 808 808 809 ContentWidthAndMargin FormattingContext::Geometry::floatingReplacedWidthAndMargin(const Box& layoutBox, UsedHorizontalValuesusedHorizontalValues) const809 ContentWidthAndMargin FormattingContext::Geometry::floatingReplacedWidthAndMargin(const Box& layoutBox, const UsedHorizontalValues& usedHorizontalValues) const 810 810 { 811 811 ASSERT(layoutBox.isFloatingPositioned() && layoutBox.replaced()); … … 818 818 819 819 LOG_WITH_STREAM(FormattingContextLayout, stream << "[Height][Margin] -> floating replaced -> redirected to inline replaced"); 820 usedHorizontalValues.margin = UsedHorizontalMargin { computedHorizontalMargin.start.valueOr(0), computedHorizontalMargin.end.valueOr(0) };821 return inlineReplacedWidthAndMargin(layoutBox, usedHorizontalValues);822 } 823 824 VerticalGeometry FormattingContext::Geometry::outOfFlowVerticalGeometry(const Box& layoutBox, UsedHorizontalValues usedHorizontalValues, UsedVerticalValuesusedVerticalValues) const820 auto usedMargin = UsedHorizontalMargin { computedHorizontalMargin.start.valueOr(0), computedHorizontalMargin.end.valueOr(0) }; 821 return inlineReplacedWidthAndMargin(layoutBox, UsedHorizontalValues { usedHorizontalValues.constraints, usedHorizontalValues.width, usedMargin }); 822 } 823 824 VerticalGeometry FormattingContext::Geometry::outOfFlowVerticalGeometry(const Box& layoutBox, const UsedHorizontalValues& usedHorizontalValues, const UsedVerticalValues& usedVerticalValues) const 825 825 { 826 826 ASSERT(layoutBox.isOutOfFlowPositioned()); … … 831 831 } 832 832 833 HorizontalGeometry FormattingContext::Geometry::outOfFlowHorizontalGeometry(const Box& layoutBox, UsedHorizontalValues usedHorizontalValues, UsedVerticalValuesusedVerticalValues)833 HorizontalGeometry FormattingContext::Geometry::outOfFlowHorizontalGeometry(const Box& layoutBox, const UsedHorizontalValues& usedHorizontalValues, const UsedVerticalValues& usedVerticalValues) 834 834 { 835 835 ASSERT(layoutBox.isOutOfFlowPositioned()); … … 840 840 } 841 841 842 ContentHeightAndMargin FormattingContext::Geometry::floatingHeightAndMargin(const Box& layoutBox, UsedHorizontalValues usedHorizontalValues, UsedVerticalValuesusedVerticalValues) const842 ContentHeightAndMargin FormattingContext::Geometry::floatingHeightAndMargin(const Box& layoutBox, const UsedHorizontalValues& usedHorizontalValues, const UsedVerticalValues& usedVerticalValues) const 843 843 { 844 844 ASSERT(layoutBox.isFloatingPositioned()); … … 849 849 } 850 850 851 ContentWidthAndMargin FormattingContext::Geometry::floatingWidthAndMargin(const Box& layoutBox, UsedHorizontalValues usedValues)851 ContentWidthAndMargin FormattingContext::Geometry::floatingWidthAndMargin(const Box& layoutBox, const UsedHorizontalValues& usedHorizontalValues) 852 852 { 853 853 ASSERT(layoutBox.isFloatingPositioned()); 854 854 855 855 if (!layoutBox.replaced()) 856 return floatingNonReplacedWidthAndMargin(layoutBox, used Values);857 return floatingReplacedWidthAndMargin(layoutBox, used Values);858 } 859 860 ContentHeightAndMargin FormattingContext::Geometry::inlineReplacedHeightAndMargin(const Box& layoutBox, UsedHorizontalValues usedHorizontalValues, UsedVerticalValuesusedVerticalValues) const856 return floatingNonReplacedWidthAndMargin(layoutBox, usedHorizontalValues); 857 return floatingReplacedWidthAndMargin(layoutBox, usedHorizontalValues); 858 } 859 860 ContentHeightAndMargin FormattingContext::Geometry::inlineReplacedHeightAndMargin(const Box& layoutBox, const UsedHorizontalValues& usedHorizontalValues, const UsedVerticalValues& usedVerticalValues) const 861 861 { 862 862 ASSERT((layoutBox.isOutOfFlowPositioned() || layoutBox.isFloatingPositioned() || layoutBox.isInFlow()) && layoutBox.replaced()); … … 904 904 } 905 905 906 ContentWidthAndMargin FormattingContext::Geometry::inlineReplacedWidthAndMargin(const Box& layoutBox, UsedHorizontalValuesusedHorizontalValues, Optional<UsedVerticalValues> usedVerticalValues) const906 ContentWidthAndMargin FormattingContext::Geometry::inlineReplacedWidthAndMargin(const Box& layoutBox, const UsedHorizontalValues& usedHorizontalValues, Optional<UsedVerticalValues> usedVerticalValues) const 907 907 { 908 908 ASSERT((layoutBox.isOutOfFlowPositioned() || layoutBox.isFloatingPositioned() || layoutBox.isInFlow()) && layoutBox.replaced()); … … 973 973 } 974 974 975 LayoutSize FormattingContext::Geometry::inFlowPositionedPositionOffset(const Box& layoutBox, UsedHorizontalValuesusedHorizontalValues) const975 LayoutSize FormattingContext::Geometry::inFlowPositionedPositionOffset(const Box& layoutBox, const UsedHorizontalValues& usedHorizontalValues) const 976 976 { 977 977 ASSERT(layoutBox.isInFlowPositioned()); … … 1058 1058 } 1059 1059 1060 Optional<Edges> FormattingContext::Geometry::computedPadding(const Box& layoutBox, UsedHorizontalValuesusedHorizontalValues) const1060 Optional<Edges> FormattingContext::Geometry::computedPadding(const Box& layoutBox, const UsedHorizontalValues& usedHorizontalValues) const 1061 1061 { 1062 1062 if (!layoutBox.isPaddingApplicable()) … … 1072 1072 } 1073 1073 1074 ComputedHorizontalMargin FormattingContext::Geometry::computedHorizontalMargin(const Box& layoutBox, UsedHorizontalValuesusedHorizontalValues) const1074 ComputedHorizontalMargin FormattingContext::Geometry::computedHorizontalMargin(const Box& layoutBox, const UsedHorizontalValues& usedHorizontalValues) const 1075 1075 { 1076 1076 auto& style = layoutBox.style(); … … 1079 1079 } 1080 1080 1081 ComputedVerticalMargin FormattingContext::Geometry::computedVerticalMargin(const Box& layoutBox, UsedHorizontalValuesusedHorizontalValues) const1081 ComputedVerticalMargin FormattingContext::Geometry::computedVerticalMargin(const Box& layoutBox, const UsedHorizontalValues& usedHorizontalValues) const 1082 1082 { 1083 1083 auto& style = layoutBox.style(); -
trunk/Source/WebCore/layout/blockformatting/BlockFormattingContext.h
r252460 r252862 75 75 class Geometry : public FormattingContext::Geometry { 76 76 public: 77 ContentHeightAndMargin inFlowHeightAndMargin(const Box&, UsedHorizontalValues, UsedVerticalValues);78 ContentWidthAndMargin inFlowWidthAndMargin(const Box&, UsedHorizontalValues);77 ContentHeightAndMargin inFlowHeightAndMargin(const Box&, const UsedHorizontalValues&, const UsedVerticalValues&); 78 ContentWidthAndMargin inFlowWidthAndMargin(const Box&, const UsedHorizontalValues&); 79 79 80 Point staticPosition(const Box&, UsedHorizontalValues, UsedVerticalValues) const;81 LayoutUnit staticVerticalPosition(const Box&, UsedVerticalValues) const;82 LayoutUnit staticHorizontalPosition(const Box&, UsedHorizontalValues) const;80 Point staticPosition(const Box&, const UsedHorizontalValues&, const UsedVerticalValues&) const; 81 LayoutUnit staticVerticalPosition(const Box&, const UsedVerticalValues&) const; 82 LayoutUnit staticHorizontalPosition(const Box&, const UsedHorizontalValues&) const; 83 83 84 84 IntrinsicWidthConstraints intrinsicWidthConstraints(const Box&); … … 88 88 Geometry(const BlockFormattingContext&); 89 89 90 ContentHeightAndMargin inFlowNonReplacedHeightAndMargin(const Box&, UsedHorizontalValues, UsedVerticalValues);91 ContentWidthAndMargin inFlowNonReplacedWidthAndMargin(const Box&, UsedHorizontalValues) const;92 ContentWidthAndMargin inFlowReplacedWidthAndMargin(const Box&, UsedHorizontalValues) const;90 ContentHeightAndMargin inFlowNonReplacedHeightAndMargin(const Box&, const UsedHorizontalValues&, const UsedVerticalValues&); 91 ContentWidthAndMargin inFlowNonReplacedWidthAndMargin(const Box&, const UsedHorizontalValues&) const; 92 ContentWidthAndMargin inFlowReplacedWidthAndMargin(const Box&, const UsedHorizontalValues&) const; 93 93 Point staticPositionForOutOfFlowPositioned(const Box&) const; 94 94 -
trunk/Source/WebCore/layout/blockformatting/BlockFormattingContextGeometry.cpp
r251281 r252862 38 38 namespace Layout { 39 39 40 ContentHeightAndMargin BlockFormattingContext::Geometry::inFlowNonReplacedHeightAndMargin(const Box& layoutBox, UsedHorizontalValues usedHorizontalValues, UsedVerticalValues usedValues)40 ContentHeightAndMargin BlockFormattingContext::Geometry::inFlowNonReplacedHeightAndMargin(const Box& layoutBox, const UsedHorizontalValues& usedHorizontalValues, const UsedVerticalValues& usedVerticalValues) 41 41 { 42 42 ASSERT(layoutBox.isInFlow() && !layoutBox.replaced()); 43 43 ASSERT(layoutBox.isOverflowVisible()); 44 44 45 auto compute = [&]( ) -> ContentHeightAndMargin {45 auto compute = [&](const auto& usedVerticalValues) -> ContentHeightAndMargin { 46 46 47 47 // 10.6.3 Block-level non-replaced elements in normal flow when 'overflow' computes to 'visible' … … 62 62 auto nonCollapsedMargin = UsedVerticalMargin::NonCollapsedValues { computedVerticalMargin.before.valueOr(0), computedVerticalMargin.after.valueOr(0) }; 63 63 auto borderAndPaddingTop = boxGeometry.borderTop() + boxGeometry.paddingTop().valueOr(0); 64 auto height = usedV alues.height ? usedValues.height.value() : computedContentHeight(layoutBox);64 auto height = usedVerticalValues.height ? usedVerticalValues.height.value() : computedContentHeight(layoutBox); 65 65 66 66 if (height) … … 102 102 103 103 // 10.6.7 'Auto' heights for block formatting context roots 104 auto isAutoHeight = !usedV alues.height && !computedContentHeight(layoutBox);104 auto isAutoHeight = !usedVerticalValues.height && !computedContentHeight(layoutBox); 105 105 if (isAutoHeight && layoutBox.establishesBlockFormattingContext()) 106 usedValues.height = contentHeightForFormattingContextRoot(layoutBox); 107 auto contentHeightAndMargin = compute(); 108 LOG_WITH_STREAM(FormattingContextLayout, stream << "[Height][Margin] -> inflow non-replaced -> height(" << contentHeightAndMargin.contentHeight << "px) margin(" << contentHeightAndMargin.nonCollapsedMargin.before << "px, " << contentHeightAndMargin.nonCollapsedMargin.after << "px) -> layoutBox(" << &layoutBox << ")"); 109 return contentHeightAndMargin; 110 } 111 112 ContentWidthAndMargin BlockFormattingContext::Geometry::inFlowNonReplacedWidthAndMargin(const Box& layoutBox, UsedHorizontalValues usedHorizontalValues) const 106 return compute( UsedVerticalValues { usedVerticalValues.constraints, contentHeightForFormattingContextRoot(layoutBox) }); 107 return compute(usedVerticalValues); 108 } 109 110 ContentWidthAndMargin BlockFormattingContext::Geometry::inFlowNonReplacedWidthAndMargin(const Box& layoutBox, const UsedHorizontalValues& usedHorizontalValues) const 113 111 { 114 112 ASSERT(layoutBox.isInFlow()); … … 200 198 } 201 199 202 ContentWidthAndMargin BlockFormattingContext::Geometry::inFlowReplacedWidthAndMargin(const Box& layoutBox, UsedHorizontalValues usedValues) const200 ContentWidthAndMargin BlockFormattingContext::Geometry::inFlowReplacedWidthAndMargin(const Box& layoutBox, const UsedHorizontalValues& usedHorizontalValues) const 203 201 { 204 202 ASSERT(layoutBox.isInFlow() && layoutBox.replaced()); … … 210 208 211 209 // #1 212 usedValues.width = inlineReplacedWidthAndMargin(layoutBox, usedValues).contentWidth;210 auto usedWidth = inlineReplacedWidthAndMargin(layoutBox, usedHorizontalValues).contentWidth; 213 211 // #2 214 auto nonReplacedWidthAndMargin = inFlowNonReplacedWidthAndMargin(layoutBox, usedValues);215 216 LOG_WITH_STREAM(FormattingContextLayout, stream << "[Width][Margin] -> inflow replaced -> width(" << *usedValues.width<< "px) margin(" << nonReplacedWidthAndMargin.usedMargin.start << "px, " << nonReplacedWidthAndMargin.usedMargin.end << "px) -> layoutBox(" << &layoutBox << ")");217 return { *usedValues.width, nonReplacedWidthAndMargin.usedMargin, nonReplacedWidthAndMargin.computedMargin };218 } 219 220 LayoutUnit BlockFormattingContext::Geometry::staticVerticalPosition(const Box& layoutBox, UsedVerticalValuesusedVerticalValues) const212 auto nonReplacedWidthAndMargin = inFlowNonReplacedWidthAndMargin(layoutBox, UsedHorizontalValues { usedHorizontalValues.constraints, usedWidth, usedHorizontalValues.margin }); 213 214 LOG_WITH_STREAM(FormattingContextLayout, stream << "[Width][Margin] -> inflow replaced -> width(" << usedWidth << "px) margin(" << nonReplacedWidthAndMargin.usedMargin.start << "px, " << nonReplacedWidthAndMargin.usedMargin.end << "px) -> layoutBox(" << &layoutBox << ")"); 215 return { usedWidth, nonReplacedWidthAndMargin.usedMargin, nonReplacedWidthAndMargin.computedMargin }; 216 } 217 218 LayoutUnit BlockFormattingContext::Geometry::staticVerticalPosition(const Box& layoutBox, const UsedVerticalValues& usedVerticalValues) const 221 219 { 222 220 // https://www.w3.org/TR/CSS22/visuren.html#block-formatting … … 231 229 } 232 230 233 LayoutUnit BlockFormattingContext::Geometry::staticHorizontalPosition(const Box& layoutBox, UsedHorizontalValuesusedHorizontalValues) const231 LayoutUnit BlockFormattingContext::Geometry::staticHorizontalPosition(const Box& layoutBox, const UsedHorizontalValues& usedHorizontalValues) const 234 232 { 235 233 // https://www.w3.org/TR/CSS22/visuren.html#block-formatting … … 238 236 } 239 237 240 Point BlockFormattingContext::Geometry::staticPosition(const Box& layoutBox, UsedHorizontalValues usedHorizontalValues, UsedVerticalValuesusedVerticalValues) const238 Point BlockFormattingContext::Geometry::staticPosition(const Box& layoutBox, const UsedHorizontalValues& usedHorizontalValues, const UsedVerticalValues& usedVerticalValues) const 241 239 { 242 240 return { staticHorizontalPosition(layoutBox, usedHorizontalValues), staticVerticalPosition(layoutBox, usedVerticalValues) }; 243 241 } 244 242 245 ContentHeightAndMargin BlockFormattingContext::Geometry::inFlowHeightAndMargin(const Box& layoutBox, UsedHorizontalValues usedHorizontalValues, UsedVerticalValuesusedVerticalValues)243 ContentHeightAndMargin BlockFormattingContext::Geometry::inFlowHeightAndMargin(const Box& layoutBox, const UsedHorizontalValues& usedHorizontalValues, const UsedVerticalValues& usedVerticalValues) 246 244 { 247 245 ASSERT(layoutBox.isInFlow()); … … 275 273 } 276 274 277 ContentWidthAndMargin BlockFormattingContext::Geometry::inFlowWidthAndMargin(const Box& layoutBox, UsedHorizontalValuesusedHorizontalValues)275 ContentWidthAndMargin BlockFormattingContext::Geometry::inFlowWidthAndMargin(const Box& layoutBox, const UsedHorizontalValues& usedHorizontalValues) 278 276 { 279 277 ASSERT(layoutBox.isInFlow()); 280 278 281 279 if (!layoutBox.replaced()) { 282 if ( layoutBox.establishesTableFormattingContext()) {283 // This is a special table "fit-content size" behavior handling. Not in the spec though.284 // Table returns its final width as min/max. Use this final width value to computed horizontal margins etc.285 usedHorizontalValues.width = usedHorizontalValues.width ? usedHorizontalValues.width : shrinkToFitWidth(layoutBox, usedHorizontalValues.constraints.width);286 }287 return inFlowNonReplacedWidthAndMargin(layoutBox, usedHorizontalValues);280 if (!layoutBox.establishesTableFormattingContext()) 281 return inFlowNonReplacedWidthAndMargin(layoutBox, usedHorizontalValues); 282 // This is a special table "fit-content size" behavior handling. Not in the spec though. 283 // Table returns its final width as min/max. Use this final width value to computed horizontal margins etc. 284 auto usedWidth = usedHorizontalValues.width ? usedHorizontalValues.width : shrinkToFitWidth(layoutBox, usedHorizontalValues.constraints.width); 285 return inFlowNonReplacedWidthAndMargin(layoutBox, UsedHorizontalValues { usedHorizontalValues.constraints, usedWidth, usedHorizontalValues.margin }); 288 286 } 289 287 return inFlowReplacedWidthAndMargin(layoutBox, usedHorizontalValues); -
trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContext.cpp
r252861 r252862 90 90 } 91 91 92 void InlineFormattingContext::lineLayout( UsedHorizontalValuesusedHorizontalValues)92 void InlineFormattingContext::lineLayout(const UsedHorizontalValues& usedHorizontalValues) 93 93 { 94 94 auto& inlineItems = formattingState().inlineItems(); … … 130 130 } 131 131 132 void InlineFormattingContext::layoutFormattingContextRoot(const Box& formattingContextRoot, InvalidationState& invalidationState, UsedHorizontalValues usedHorizontalValues, UsedVerticalValuesusedVerticalValues)132 void InlineFormattingContext::layoutFormattingContextRoot(const Box& formattingContextRoot, InvalidationState& invalidationState, const UsedHorizontalValues& usedHorizontalValues, const UsedVerticalValues& usedVerticalValues) 133 133 { 134 134 ASSERT(formattingContextRoot.isFloatingPositioned() || formattingContextRoot.isInlineBlockBox()); … … 149 149 } 150 150 151 void InlineFormattingContext::computeHorizontalAndVerticalGeometry(const Box& layoutBox, UsedHorizontalValues usedHorizontalValues, UsedVerticalValuesusedVerticalValues)151 void InlineFormattingContext::computeHorizontalAndVerticalGeometry(const Box& layoutBox, const UsedHorizontalValues& usedHorizontalValues, const UsedVerticalValues& usedVerticalValues) 152 152 { 153 153 if (is<Container>(layoutBox)) { … … 229 229 } 230 230 231 LayoutUnit InlineFormattingContext::computedIntrinsicWidthForConstraint( UsedHorizontalValuesusedHorizontalValues) const231 LayoutUnit InlineFormattingContext::computedIntrinsicWidthForConstraint(const UsedHorizontalValues& usedHorizontalValues) const 232 232 { 233 233 auto& inlineItems = formattingState().inlineItems(); … … 250 250 } 251 251 252 void InlineFormattingContext::computeIntrinsicWidthForFormattingRoot(const Box& formattingRoot, UsedHorizontalValuesusedHorizontalValues)252 void InlineFormattingContext::computeIntrinsicWidthForFormattingRoot(const Box& formattingRoot, const UsedHorizontalValues& usedHorizontalValues) 253 253 { 254 254 ASSERT(formattingRoot.establishesFormattingContext()); … … 267 267 } 268 268 269 void InlineFormattingContext::computeHorizontalMargin(const Box& layoutBox, UsedHorizontalValuesusedHorizontalValues)269 void InlineFormattingContext::computeHorizontalMargin(const Box& layoutBox, const UsedHorizontalValues& usedHorizontalValues) 270 270 { 271 271 auto computedHorizontalMargin = geometry().computedHorizontalMargin(layoutBox, usedHorizontalValues); … … 275 275 } 276 276 277 void InlineFormattingContext::computeWidthAndMargin(const Box& layoutBox, UsedHorizontalValuesusedHorizontalValues)277 void InlineFormattingContext::computeWidthAndMargin(const Box& layoutBox, const UsedHorizontalValues& usedHorizontalValues) 278 278 { 279 279 ContentWidthAndMargin contentWidthAndMargin; … … 293 293 } 294 294 295 void InlineFormattingContext::computeHeightAndMargin(const Box& layoutBox, UsedHorizontalValues usedHorizontalValues, UsedVerticalValuesusedVerticalValues)295 void InlineFormattingContext::computeHeightAndMargin(const Box& layoutBox, const UsedHorizontalValues& usedHorizontalValues, const UsedVerticalValues& usedVerticalValues) 296 296 { 297 297 ContentHeightAndMargin contentHeightAndMargin; … … 310 310 } 311 311 312 void InlineFormattingContext::computeWidthAndHeightForReplacedInlineBox(const Box& layoutBox, UsedHorizontalValues usedHorizontalValues, UsedVerticalValuesusedVerticalValues)312 void InlineFormattingContext::computeWidthAndHeightForReplacedInlineBox(const Box& layoutBox, const UsedHorizontalValues& usedHorizontalValues, const UsedVerticalValues& usedVerticalValues) 313 313 { 314 314 ASSERT(!layoutBox.isContainer()); … … 372 372 } 373 373 374 Line::Constraints InlineFormattingContext::constraintsForLine( UsedHorizontalValuesusedHorizontalValues, const LayoutUnit lineLogicalTop)374 Line::Constraints InlineFormattingContext::constraintsForLine(const UsedHorizontalValues& usedHorizontalValues, const LayoutUnit lineLogicalTop) 375 375 { 376 376 auto lineLogicalLeft = geometryForBox(root()).contentBoxLeft(); … … 408 408 } 409 409 410 void InlineFormattingContext::setDisplayBoxesForLine(const LineLayout::LineContent& lineContent, UsedHorizontalValuesusedHorizontalValues)410 void InlineFormattingContext::setDisplayBoxesForLine(const LineLayout::LineContent& lineContent, const UsedHorizontalValues& usedHorizontalValues) 411 411 { 412 412 auto& formattingState = this->formattingState(); -
trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContext.h
r252859 r252862 65 65 class Geometry : public FormattingContext::Geometry { 66 66 public: 67 ContentHeightAndMargin inlineBlockHeightAndMargin(const Box&, UsedHorizontalValues, UsedVerticalValues) const;68 ContentWidthAndMargin inlineBlockWidthAndMargin(const Box&, UsedHorizontalValues);67 ContentHeightAndMargin inlineBlockHeightAndMargin(const Box&, const UsedHorizontalValues&, const UsedVerticalValues&) const; 68 ContentWidthAndMargin inlineBlockWidthAndMargin(const Box&, const UsedHorizontalValues&); 69 69 70 70 private: … … 77 77 InlineFormattingContext::Geometry geometry() const { return Geometry(*this); } 78 78 79 void lineLayout( UsedHorizontalValues);80 void layoutFormattingContextRoot(const Box&, InvalidationState&, UsedHorizontalValues, UsedVerticalValues);81 void computeHorizontalAndVerticalGeometry(const Box&, UsedHorizontalValues, UsedVerticalValues);79 void lineLayout(const UsedHorizontalValues&); 80 void layoutFormattingContextRoot(const Box&, InvalidationState&, const UsedHorizontalValues&, const UsedVerticalValues&); 81 void computeHorizontalAndVerticalGeometry(const Box&, const UsedHorizontalValues&, const UsedVerticalValues&); 82 82 83 void computeIntrinsicWidthForFormattingRoot(const Box&, UsedHorizontalValues);84 void computeWidthAndHeightForReplacedInlineBox(const Box&, UsedHorizontalValues, UsedVerticalValues);85 LayoutUnit computedIntrinsicWidthForConstraint( UsedHorizontalValues) const;83 void computeIntrinsicWidthForFormattingRoot(const Box&, const UsedHorizontalValues&); 84 void computeWidthAndHeightForReplacedInlineBox(const Box&, const UsedHorizontalValues&, const UsedVerticalValues&); 85 LayoutUnit computedIntrinsicWidthForConstraint(const UsedHorizontalValues&) const; 86 86 87 void computeHorizontalMargin(const Box&, UsedHorizontalValues);88 void computeHeightAndMargin(const Box&, UsedHorizontalValues, UsedVerticalValues);89 void computeWidthAndMargin(const Box&, UsedHorizontalValues);87 void computeHorizontalMargin(const Box&, const UsedHorizontalValues&); 88 void computeHeightAndMargin(const Box&, const UsedHorizontalValues&, const UsedVerticalValues&); 89 void computeWidthAndMargin(const Box&, const UsedHorizontalValues&); 90 90 91 91 void collectInlineContentIfNeeded(); 92 Line::Constraints constraintsForLine( UsedHorizontalValues, const LayoutUnit lineLogicalTop);93 void setDisplayBoxesForLine(const LineLayout::LineContent&, UsedHorizontalValues);92 Line::Constraints constraintsForLine(const UsedHorizontalValues&, const LayoutUnit lineLogicalTop); 93 void setDisplayBoxesForLine(const LineLayout::LineContent&, const UsedHorizontalValues&); 94 94 void invalidateFormattingState(const InvalidationState&); 95 95 -
trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContextGeometry.cpp
r251135 r252862 36 36 namespace Layout { 37 37 38 ContentWidthAndMargin InlineFormattingContext::Geometry::inlineBlockWidthAndMargin(const Box& formattingContextRoot, UsedHorizontalValuesusedHorizontalValues)38 ContentWidthAndMargin InlineFormattingContext::Geometry::inlineBlockWidthAndMargin(const Box& formattingContextRoot, const UsedHorizontalValues& usedHorizontalValues) 39 39 { 40 40 ASSERT(formattingContextRoot.isInFlow()); … … 61 61 } 62 62 63 ContentHeightAndMargin InlineFormattingContext::Geometry::inlineBlockHeightAndMargin(const Box& layoutBox, UsedHorizontalValues usedHorizontalValues, UsedVerticalValuesusedVerticalValues) const63 ContentHeightAndMargin InlineFormattingContext::Geometry::inlineBlockHeightAndMargin(const Box& layoutBox, const UsedHorizontalValues& usedHorizontalValues, const UsedVerticalValues& usedVerticalValues) const 64 64 { 65 65 ASSERT(layoutBox.isInFlow());
Note: See TracChangeset
for help on using the changeset viewer.