Changeset 268456 in webkit
- Timestamp:
- Oct 14, 2020 7:00:47 AM (3 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 11 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r268454 r268456 1 2020-10-14 Zalan Bujtas <zalan@apple.com> 2 3 [LFC] Use the term overridden instead of override to indicate priority values 4 https://bugs.webkit.org/show_bug.cgi?id=217657 5 6 Reviewed by Antti Koivisto. 7 8 The OverriddenHorizontal/Vertical structures are used to pass in priority values (e.g. use the "max-height" value instead of the computed "height" value) to geometry computation functions. 9 10 * layout/FormattingContext.h: 11 * layout/FormattingContextGeometry.cpp: 12 (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedVerticalGeometry const): 13 (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedHorizontalGeometry): 14 (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedVerticalGeometry const): 15 (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedHorizontalGeometry): 16 (WebCore::Layout::FormattingContext::Geometry::complicatedCases const): 17 (WebCore::Layout::FormattingContext::Geometry::floatingNonReplacedWidthAndMargin): 18 (WebCore::Layout::FormattingContext::Geometry::floatingReplacedHeightAndMargin const): 19 (WebCore::Layout::FormattingContext::Geometry::floatingReplacedWidthAndMargin): 20 (WebCore::Layout::FormattingContext::Geometry::outOfFlowVerticalGeometry const): 21 (WebCore::Layout::FormattingContext::Geometry::outOfFlowHorizontalGeometry): 22 (WebCore::Layout::FormattingContext::Geometry::floatingHeightAndMargin const): 23 (WebCore::Layout::FormattingContext::Geometry::floatingWidthAndMargin): 24 (WebCore::Layout::FormattingContext::Geometry::inlineReplacedHeightAndMargin const): 25 (WebCore::Layout::FormattingContext::Geometry::inlineReplacedWidthAndMargin): 26 * layout/LayoutUnits.h: 27 * layout/blockformatting/BlockFormattingContext.h: 28 * layout/blockformatting/BlockFormattingContextGeometry.cpp: 29 (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedHeightAndMargin): 30 (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedWidthAndMargin): 31 (WebCore::Layout::BlockFormattingContext::Geometry::inFlowReplacedWidthAndMargin): 32 (WebCore::Layout::BlockFormattingContext::Geometry::inFlowHeightAndMargin): 33 (WebCore::Layout::BlockFormattingContext::Geometry::inFlowWidthAndMargin): 34 * layout/blockformatting/tablewrapper/TableWrapperBlockFormattingContext.cpp: 35 (WebCore::Layout::TableWrapperBlockFormattingContext::computeWidthAndMarginForTableBox): 36 (WebCore::Layout::TableWrapperBlockFormattingContext::computeHeightAndMarginForTableBox): 37 * layout/blockformatting/tablewrapper/TableWrapperBlockFormattingContext.h: 38 * layout/blockformatting/tablewrapper/TableWrapperBlockFormattingContextQuirks.cpp: 39 (WebCore::Layout::TableWrapperBlockFormattingContext::Quirks::overriddenTableHeight const): 40 (WebCore::Layout::TableWrapperBlockFormattingContext::Quirks::overrideTableHeight const): Deleted. 41 * layout/inlineformatting/InlineFormattingContext.h: 42 * layout/inlineformatting/InlineFormattingContextGeometry.cpp: 43 (WebCore::Layout::InlineFormattingContext::Geometry::inlineBlockWidthAndMargin): 44 (WebCore::Layout::InlineFormattingContext::Geometry::inlineBlockHeightAndMargin const): 45 1 46 2020-10-14 Andres Gonzalez <andresg_22@apple.com> 2 47 -
trunk/Source/WebCore/layout/FormattingContext.h
r268122 r268456 53 53 class InvalidationState; 54 54 class LayoutState; 55 struct Overrid eHorizontalValues;56 struct Overrid eVerticalValues;55 struct OverriddenHorizontalValues; 56 struct OverriddenVerticalValues; 57 57 struct VerticalGeometry; 58 58 … … 124 124 class Geometry { 125 125 public: 126 VerticalGeometry outOfFlowVerticalGeometry(const Box&, const HorizontalConstraints&, const VerticalConstraints&, const Overrid eVerticalValues&) const;127 HorizontalGeometry outOfFlowHorizontalGeometry(const Box&, const HorizontalConstraints&, const VerticalConstraints&, const Overrid eHorizontalValues&);128 129 ContentHeightAndMargin floatingHeightAndMargin(const Box&, const HorizontalConstraints&, const Overrid eVerticalValues&) const;130 ContentWidthAndMargin floatingWidthAndMargin(const Box&, const HorizontalConstraints&, const Overrid eHorizontalValues&);131 132 ContentHeightAndMargin inlineReplacedHeightAndMargin(const ReplacedBox&, const HorizontalConstraints&, Optional<VerticalConstraints>, const Overrid eVerticalValues&) const;133 ContentWidthAndMargin inlineReplacedWidthAndMargin(const ReplacedBox&, const HorizontalConstraints&, Optional<VerticalConstraints>, const Overrid eHorizontalValues&);126 VerticalGeometry outOfFlowVerticalGeometry(const Box&, const HorizontalConstraints&, const VerticalConstraints&, const OverriddenVerticalValues&) const; 127 HorizontalGeometry outOfFlowHorizontalGeometry(const Box&, const HorizontalConstraints&, const VerticalConstraints&, const OverriddenHorizontalValues&); 128 129 ContentHeightAndMargin floatingHeightAndMargin(const Box&, const HorizontalConstraints&, const OverriddenVerticalValues&) const; 130 ContentWidthAndMargin floatingWidthAndMargin(const Box&, const HorizontalConstraints&, const OverriddenHorizontalValues&); 131 132 ContentHeightAndMargin inlineReplacedHeightAndMargin(const ReplacedBox&, const HorizontalConstraints&, Optional<VerticalConstraints>, const OverriddenVerticalValues&) const; 133 ContentWidthAndMargin inlineReplacedWidthAndMargin(const ReplacedBox&, const HorizontalConstraints&, Optional<VerticalConstraints>, const OverriddenHorizontalValues&); 134 134 135 135 LayoutSize inFlowPositionedPositionOffset(const Box&, const HorizontalConstraints&) const; 136 136 137 ContentHeightAndMargin complicatedCases(const Box&, const HorizontalConstraints&, const Overrid eVerticalValues&) const;137 ContentHeightAndMargin complicatedCases(const Box&, const HorizontalConstraints&, const OverriddenVerticalValues&) const; 138 138 LayoutUnit shrinkToFitWidth(const Box&, LayoutUnit availableWidth); 139 139 … … 172 172 173 173 private: 174 VerticalGeometry outOfFlowReplacedVerticalGeometry(const ReplacedBox&, const HorizontalConstraints&, const VerticalConstraints&, const Overrid eVerticalValues&) const;175 HorizontalGeometry outOfFlowReplacedHorizontalGeometry(const ReplacedBox&, const HorizontalConstraints&, const VerticalConstraints&, const Overrid eHorizontalValues&);176 177 VerticalGeometry outOfFlowNonReplacedVerticalGeometry(const ContainerBox&, const HorizontalConstraints&, const VerticalConstraints&, const Overrid eVerticalValues&) const;178 HorizontalGeometry outOfFlowNonReplacedHorizontalGeometry(const ContainerBox&, const HorizontalConstraints&, const Overrid eHorizontalValues&);179 180 ContentHeightAndMargin floatingReplacedHeightAndMargin(const ReplacedBox&, const HorizontalConstraints&, const Overrid eVerticalValues&) const;181 ContentWidthAndMargin floatingReplacedWidthAndMargin(const ReplacedBox&, const HorizontalConstraints&, const Overrid eHorizontalValues&);182 183 ContentWidthAndMargin floatingNonReplacedWidthAndMargin(const Box&, const HorizontalConstraints&, const Overrid eHorizontalValues&);174 VerticalGeometry outOfFlowReplacedVerticalGeometry(const ReplacedBox&, const HorizontalConstraints&, const VerticalConstraints&, const OverriddenVerticalValues&) const; 175 HorizontalGeometry outOfFlowReplacedHorizontalGeometry(const ReplacedBox&, const HorizontalConstraints&, const VerticalConstraints&, const OverriddenHorizontalValues&); 176 177 VerticalGeometry outOfFlowNonReplacedVerticalGeometry(const ContainerBox&, const HorizontalConstraints&, const VerticalConstraints&, const OverriddenVerticalValues&) const; 178 HorizontalGeometry outOfFlowNonReplacedHorizontalGeometry(const ContainerBox&, const HorizontalConstraints&, const OverriddenHorizontalValues&); 179 180 ContentHeightAndMargin floatingReplacedHeightAndMargin(const ReplacedBox&, const HorizontalConstraints&, const OverriddenVerticalValues&) const; 181 ContentWidthAndMargin floatingReplacedWidthAndMargin(const ReplacedBox&, const HorizontalConstraints&, const OverriddenHorizontalValues&); 182 183 ContentWidthAndMargin floatingNonReplacedWidthAndMargin(const Box&, const HorizontalConstraints&, const OverriddenHorizontalValues&); 184 184 185 185 LayoutUnit staticVerticalPositionForOutOfFlowPositioned(const Box&, const VerticalConstraints&) const; -
trunk/Source/WebCore/layout/FormattingContextGeometry.cpp
r268133 r268456 353 353 } 354 354 355 VerticalGeometry FormattingContext::Geometry::outOfFlowNonReplacedVerticalGeometry(const ContainerBox& layoutBox, const HorizontalConstraints& horizontalConstraints, const VerticalConstraints& verticalConstraints, const Overrid eVerticalValues& overrideVerticalValues) const355 VerticalGeometry FormattingContext::Geometry::outOfFlowNonReplacedVerticalGeometry(const ContainerBox& layoutBox, const HorizontalConstraints& horizontalConstraints, const VerticalConstraints& verticalConstraints, const OverriddenVerticalValues& overriddenVerticalValues) const 356 356 { 357 357 ASSERT(layoutBox.isOutOfFlowPositioned() && !layoutBox.isReplacedBox()); … … 390 390 auto top = computedValue(style.logicalTop(), containingBlockWidth); 391 391 auto bottom = computedValue(style.logicalBottom(), containingBlockWidth); 392 auto height = overrid eVerticalValues.height ? overrideVerticalValues.height.value() : computedHeight(layoutBox, containingBlockHeight);392 auto height = overriddenVerticalValues.height ? overriddenVerticalValues.height.value() : computedHeight(layoutBox, containingBlockHeight); 393 393 auto computedVerticalMargin = Geometry::computedVerticalMargin(layoutBox, horizontalConstraints); 394 394 UsedVerticalMargin::NonCollapsedValues usedVerticalMargin; … … 472 472 } 473 473 474 HorizontalGeometry FormattingContext::Geometry::outOfFlowNonReplacedHorizontalGeometry(const ContainerBox& layoutBox, const HorizontalConstraints& horizontalConstraints, const Overrid eHorizontalValues& overrideHorizontalValues)474 HorizontalGeometry FormattingContext::Geometry::outOfFlowNonReplacedHorizontalGeometry(const ContainerBox& layoutBox, const HorizontalConstraints& horizontalConstraints, const OverriddenHorizontalValues& overriddenHorizontalValues) 475 475 { 476 476 ASSERT(layoutBox.isOutOfFlowPositioned() && !layoutBox.isReplacedBox()); … … 510 510 auto left = computedValue(style.logicalLeft(), containingBlockWidth); 511 511 auto right = computedValue(style.logicalRight(), containingBlockWidth); 512 auto width = overrid eHorizontalValues.width ? overrideHorizontalValues.width : computedWidth(layoutBox, containingBlockWidth);512 auto width = overriddenHorizontalValues.width ? overriddenHorizontalValues.width : computedWidth(layoutBox, containingBlockWidth); 513 513 auto computedHorizontalMargin = Geometry::computedHorizontalMargin(layoutBox, horizontalConstraints); 514 514 UsedHorizontalMargin usedHorizontalMargin; … … 615 615 } 616 616 617 VerticalGeometry FormattingContext::Geometry::outOfFlowReplacedVerticalGeometry(const ReplacedBox& replacedBox, const HorizontalConstraints& horizontalConstraints, const VerticalConstraints& verticalConstraints, const Overrid eVerticalValues& overrideVerticalValues) const617 VerticalGeometry FormattingContext::Geometry::outOfFlowReplacedVerticalGeometry(const ReplacedBox& replacedBox, const HorizontalConstraints& horizontalConstraints, const VerticalConstraints& verticalConstraints, const OverriddenVerticalValues& overriddenVerticalValues) const 618 618 { 619 619 ASSERT(replacedBox.isOutOfFlowPositioned()); … … 638 638 auto top = computedValue(style.logicalTop(), containingBlockWidth); 639 639 auto bottom = computedValue(style.logicalBottom(), containingBlockWidth); 640 auto height = inlineReplacedHeightAndMargin(replacedBox, horizontalConstraints, verticalConstraints, overrid eVerticalValues).contentHeight;640 auto height = inlineReplacedHeightAndMargin(replacedBox, horizontalConstraints, verticalConstraints, overriddenVerticalValues).contentHeight; 641 641 auto computedVerticalMargin = Geometry::computedVerticalMargin(replacedBox, horizontalConstraints); 642 642 Optional<LayoutUnit> usedMarginBefore = computedVerticalMargin.before; … … 697 697 } 698 698 699 HorizontalGeometry FormattingContext::Geometry::outOfFlowReplacedHorizontalGeometry(const ReplacedBox& replacedBox, const HorizontalConstraints& horizontalConstraints, const VerticalConstraints& verticalConstraints, const Overrid eHorizontalValues& overrideHorizontalValues)699 HorizontalGeometry FormattingContext::Geometry::outOfFlowReplacedHorizontalGeometry(const ReplacedBox& replacedBox, const HorizontalConstraints& horizontalConstraints, const VerticalConstraints& verticalConstraints, const OverriddenHorizontalValues& overriddenHorizontalValues) 700 700 { 701 701 ASSERT(replacedBox.isOutOfFlowPositioned()); … … 726 726 Optional<LayoutUnit> usedMarginStart = computedHorizontalMargin.start; 727 727 Optional<LayoutUnit> usedMarginEnd = computedHorizontalMargin.end; 728 auto width = inlineReplacedWidthAndMargin(replacedBox, horizontalConstraints, verticalConstraints, overrid eHorizontalValues).contentWidth;728 auto width = inlineReplacedWidthAndMargin(replacedBox, horizontalConstraints, verticalConstraints, overriddenHorizontalValues).contentWidth; 729 729 auto paddingLeft = boxGeometry.paddingLeft().valueOr(0); 730 730 auto paddingRight = boxGeometry.paddingRight().valueOr(0); … … 801 801 } 802 802 803 ContentHeightAndMargin FormattingContext::Geometry::complicatedCases(const Box& layoutBox, const HorizontalConstraints& horizontalConstraints, const Overrid eVerticalValues& overrideVerticalValues) const803 ContentHeightAndMargin FormattingContext::Geometry::complicatedCases(const Box& layoutBox, const HorizontalConstraints& horizontalConstraints, const OverriddenVerticalValues& overriddenVerticalValues) const 804 804 { 805 805 ASSERT(!layoutBox.isReplacedBox()); … … 816 816 // 2. If 'height' is 'auto', the height depends on the element's descendants per 10.6.7. 817 817 818 auto height = overrid eVerticalValues.height ? overrideVerticalValues.height.value() : computedHeight(layoutBox);818 auto height = overriddenVerticalValues.height ? overriddenVerticalValues.height.value() : computedHeight(layoutBox); 819 819 auto computedVerticalMargin = Geometry::computedVerticalMargin(layoutBox, horizontalConstraints); 820 820 // #1 … … 852 852 } 853 853 854 ContentWidthAndMargin FormattingContext::Geometry::floatingNonReplacedWidthAndMargin(const Box& layoutBox, const HorizontalConstraints& horizontalConstraints, const Overrid eHorizontalValues& overrideHorizontalValues)854 ContentWidthAndMargin FormattingContext::Geometry::floatingNonReplacedWidthAndMargin(const Box& layoutBox, const HorizontalConstraints& horizontalConstraints, const OverriddenHorizontalValues& overriddenHorizontalValues) 855 855 { 856 856 ASSERT(layoutBox.isFloatingPositioned() && !layoutBox.isReplacedBox()); … … 866 866 auto usedHorizontallMargin = UsedHorizontalMargin { computedHorizontalMargin.start.valueOr(0), computedHorizontalMargin.end.valueOr(0) }; 867 867 // #2 868 auto width = overrid eHorizontalValues.width ? overrideHorizontalValues.width : computedWidth(layoutBox, horizontalConstraints.logicalWidth);868 auto width = overriddenHorizontalValues.width ? overriddenHorizontalValues.width : computedWidth(layoutBox, horizontalConstraints.logicalWidth); 869 869 if (!width) 870 870 width = shrinkToFitWidth(layoutBox, horizontalConstraints.logicalWidth); … … 874 874 } 875 875 876 ContentHeightAndMargin FormattingContext::Geometry::floatingReplacedHeightAndMargin(const ReplacedBox& replacedBox, const HorizontalConstraints& horizontalConstraints, const Overrid eVerticalValues& overrideVerticalValues) const876 ContentHeightAndMargin FormattingContext::Geometry::floatingReplacedHeightAndMargin(const ReplacedBox& replacedBox, const HorizontalConstraints& horizontalConstraints, const OverriddenVerticalValues& overriddenVerticalValues) const 877 877 { 878 878 ASSERT(replacedBox.isFloatingPositioned()); … … 881 881 // replaced elements in normal flow and floating replaced elements 882 882 LOG_WITH_STREAM(FormattingContextLayout, stream << "[Height][Margin] -> floating replaced -> redirected to inline replaced"); 883 return inlineReplacedHeightAndMargin(replacedBox, horizontalConstraints, { }, overrid eVerticalValues);884 } 885 886 ContentWidthAndMargin FormattingContext::Geometry::floatingReplacedWidthAndMargin(const ReplacedBox& replacedBox, const HorizontalConstraints& horizontalConstraints, const Overrid eHorizontalValues& overrideHorizontalValues)883 return inlineReplacedHeightAndMargin(replacedBox, horizontalConstraints, { }, overriddenVerticalValues); 884 } 885 886 ContentWidthAndMargin FormattingContext::Geometry::floatingReplacedWidthAndMargin(const ReplacedBox& replacedBox, const HorizontalConstraints& horizontalConstraints, const OverriddenHorizontalValues& overriddenHorizontalValues) 887 887 { 888 888 ASSERT(replacedBox.isFloatingPositioned()); … … 896 896 LOG_WITH_STREAM(FormattingContextLayout, stream << "[Height][Margin] -> floating replaced -> redirected to inline replaced"); 897 897 auto usedMargin = UsedHorizontalMargin { computedHorizontalMargin.start.valueOr(0), computedHorizontalMargin.end.valueOr(0) }; 898 return inlineReplacedWidthAndMargin(replacedBox, horizontalConstraints, { }, { overrid eHorizontalValues.width, usedMargin });899 } 900 901 VerticalGeometry FormattingContext::Geometry::outOfFlowVerticalGeometry(const Box& layoutBox, const HorizontalConstraints& horizontalConstraints, const VerticalConstraints& verticalConstraints, const Overrid eVerticalValues& overrideVerticalValues) const898 return inlineReplacedWidthAndMargin(replacedBox, horizontalConstraints, { }, { overriddenHorizontalValues.width, usedMargin }); 899 } 900 901 VerticalGeometry FormattingContext::Geometry::outOfFlowVerticalGeometry(const Box& layoutBox, const HorizontalConstraints& horizontalConstraints, const VerticalConstraints& verticalConstraints, const OverriddenVerticalValues& overriddenVerticalValues) const 902 902 { 903 903 ASSERT(layoutBox.isOutOfFlowPositioned()); 904 904 905 905 if (!layoutBox.isReplacedBox()) 906 return outOfFlowNonReplacedVerticalGeometry(downcast<ContainerBox>(layoutBox), horizontalConstraints, verticalConstraints, overrid eVerticalValues);907 return outOfFlowReplacedVerticalGeometry(downcast<ReplacedBox>(layoutBox), horizontalConstraints, verticalConstraints, overrid eVerticalValues);908 } 909 910 HorizontalGeometry FormattingContext::Geometry::outOfFlowHorizontalGeometry(const Box& layoutBox, const HorizontalConstraints& horizontalConstraints, const VerticalConstraints& verticalConstraints, const Overrid eHorizontalValues& overrideHorizontalValues)906 return outOfFlowNonReplacedVerticalGeometry(downcast<ContainerBox>(layoutBox), horizontalConstraints, verticalConstraints, overriddenVerticalValues); 907 return outOfFlowReplacedVerticalGeometry(downcast<ReplacedBox>(layoutBox), horizontalConstraints, verticalConstraints, overriddenVerticalValues); 908 } 909 910 HorizontalGeometry FormattingContext::Geometry::outOfFlowHorizontalGeometry(const Box& layoutBox, const HorizontalConstraints& horizontalConstraints, const VerticalConstraints& verticalConstraints, const OverriddenHorizontalValues& overriddenHorizontalValues) 911 911 { 912 912 ASSERT(layoutBox.isOutOfFlowPositioned()); 913 913 914 914 if (!layoutBox.isReplacedBox()) 915 return outOfFlowNonReplacedHorizontalGeometry(downcast<ContainerBox>(layoutBox), horizontalConstraints, overrid eHorizontalValues);916 return outOfFlowReplacedHorizontalGeometry(downcast<ReplacedBox>(layoutBox), horizontalConstraints, verticalConstraints, overrid eHorizontalValues);917 } 918 919 ContentHeightAndMargin FormattingContext::Geometry::floatingHeightAndMargin(const Box& layoutBox, const HorizontalConstraints& horizontalConstraints, const Overrid eVerticalValues& overrideVerticalValues) const915 return outOfFlowNonReplacedHorizontalGeometry(downcast<ContainerBox>(layoutBox), horizontalConstraints, overriddenHorizontalValues); 916 return outOfFlowReplacedHorizontalGeometry(downcast<ReplacedBox>(layoutBox), horizontalConstraints, verticalConstraints, overriddenHorizontalValues); 917 } 918 919 ContentHeightAndMargin FormattingContext::Geometry::floatingHeightAndMargin(const Box& layoutBox, const HorizontalConstraints& horizontalConstraints, const OverriddenVerticalValues& overriddenVerticalValues) const 920 920 { 921 921 ASSERT(layoutBox.isFloatingPositioned()); 922 922 923 923 if (!layoutBox.isReplacedBox()) 924 return complicatedCases(layoutBox, horizontalConstraints, overrid eVerticalValues);925 return floatingReplacedHeightAndMargin(downcast<ReplacedBox>(layoutBox), horizontalConstraints, overrid eVerticalValues);926 } 927 928 ContentWidthAndMargin FormattingContext::Geometry::floatingWidthAndMargin(const Box& layoutBox, const HorizontalConstraints& horizontalConstraints, const Overrid eHorizontalValues& overrideHorizontalValues)924 return complicatedCases(layoutBox, horizontalConstraints, overriddenVerticalValues); 925 return floatingReplacedHeightAndMargin(downcast<ReplacedBox>(layoutBox), horizontalConstraints, overriddenVerticalValues); 926 } 927 928 ContentWidthAndMargin FormattingContext::Geometry::floatingWidthAndMargin(const Box& layoutBox, const HorizontalConstraints& horizontalConstraints, const OverriddenHorizontalValues& overriddenHorizontalValues) 929 929 { 930 930 ASSERT(layoutBox.isFloatingPositioned()); 931 931 932 932 if (!layoutBox.isReplacedBox()) 933 return floatingNonReplacedWidthAndMargin(layoutBox, horizontalConstraints, overrid eHorizontalValues);934 return floatingReplacedWidthAndMargin(downcast<ReplacedBox>(layoutBox), horizontalConstraints, overrid eHorizontalValues);935 } 936 937 ContentHeightAndMargin FormattingContext::Geometry::inlineReplacedHeightAndMargin(const ReplacedBox& replacedBox, const HorizontalConstraints& horizontalConstraints, Optional<VerticalConstraints> verticalConstraints, const Overrid eVerticalValues& overrideVerticalValues) const933 return floatingNonReplacedWidthAndMargin(layoutBox, horizontalConstraints, overriddenHorizontalValues); 934 return floatingReplacedWidthAndMargin(downcast<ReplacedBox>(layoutBox), horizontalConstraints, overriddenHorizontalValues); 935 } 936 937 ContentHeightAndMargin FormattingContext::Geometry::inlineReplacedHeightAndMargin(const ReplacedBox& replacedBox, const HorizontalConstraints& horizontalConstraints, Optional<VerticalConstraints> verticalConstraints, const OverriddenVerticalValues& overriddenVerticalValues) const 938 938 { 939 939 // 10.6.2 Inline replaced elements, block-level replaced elements in normal flow, 'inline-block' replaced elements in normal flow and floating replaced elements … … 953 953 auto& style = replacedBox.style(); 954 954 955 auto height = overrid eVerticalValues.height ? overrideVerticalValues.height.value() : computedHeight(replacedBox, verticalConstraints ? verticalConstraints->logicalHeight : WTF::nullopt);956 auto heightIsAuto = !overrid eVerticalValues.height && isHeightAuto(replacedBox);955 auto height = overriddenVerticalValues.height ? overriddenVerticalValues.height.value() : computedHeight(replacedBox, verticalConstraints ? verticalConstraints->logicalHeight : WTF::nullopt); 956 auto heightIsAuto = !overriddenVerticalValues.height && isHeightAuto(replacedBox); 957 957 auto widthIsAuto = style.logicalWidth().isAuto(); 958 958 … … 978 978 } 979 979 980 ContentWidthAndMargin FormattingContext::Geometry::inlineReplacedWidthAndMargin(const ReplacedBox& replacedBox, const HorizontalConstraints& horizontalConstraints, Optional<VerticalConstraints> verticalConstraints, const Overrid eHorizontalValues& overrideHorizontalValues)980 ContentWidthAndMargin FormattingContext::Geometry::inlineReplacedWidthAndMargin(const ReplacedBox& replacedBox, const HorizontalConstraints& horizontalConstraints, Optional<VerticalConstraints> verticalConstraints, const OverriddenHorizontalValues& overriddenHorizontalValues) 981 981 { 982 982 // 10.3.2 Inline, replaced elements … … 1002 1002 1003 1003 auto usedMarginStart = [&] { 1004 if (overrid eHorizontalValues.margin)1005 return overrid eHorizontalValues.margin->start;1004 if (overriddenHorizontalValues.margin) 1005 return overriddenHorizontalValues.margin->start; 1006 1006 return computedHorizontalMargin.start.valueOr(0_lu); 1007 1007 }; 1008 1008 1009 1009 auto usedMarginEnd = [&] { 1010 if (overrid eHorizontalValues.margin)1011 return overrid eHorizontalValues.margin->end;1010 if (overriddenHorizontalValues.margin) 1011 return overriddenHorizontalValues.margin->end; 1012 1012 return computedHorizontalMargin.end.valueOr(0_lu); 1013 1013 }; 1014 1014 1015 auto width = overrid eHorizontalValues.width ? overrideHorizontalValues.width : computedWidth(replacedBox, horizontalConstraints.logicalWidth);1015 auto width = overriddenHorizontalValues.width ? overriddenHorizontalValues.width : computedWidth(replacedBox, horizontalConstraints.logicalWidth); 1016 1016 auto heightIsAuto = isHeightAuto(replacedBox); 1017 1017 auto height = computedHeight(replacedBox, verticalConstraints ? verticalConstraints->logicalHeight : WTF::nullopt); -
trunk/Source/WebCore/layout/LayoutUnits.h
r264488 r268456 170 170 }; 171 171 172 struct Overrid eHorizontalValues {172 struct OverriddenHorizontalValues { 173 173 Optional<LayoutUnit> width; 174 174 Optional<UsedHorizontalMargin> margin; 175 175 }; 176 176 177 struct Overrid eVerticalValues {177 struct OverriddenVerticalValues { 178 178 // Consider collapsing it. 179 179 Optional<LayoutUnit> height; -
trunk/Source/WebCore/layout/blockformatting/BlockFormattingContext.h
r263946 r268456 77 77 Geometry(const BlockFormattingContext&); 78 78 79 ContentHeightAndMargin inFlowHeightAndMargin(const Box&, const HorizontalConstraints&, const Overrid eVerticalValues&);80 ContentWidthAndMargin inFlowWidthAndMargin(const Box&, const HorizontalConstraints&, const Overrid eHorizontalValues&);79 ContentHeightAndMargin inFlowHeightAndMargin(const Box&, const HorizontalConstraints&, const OverriddenVerticalValues&); 80 ContentWidthAndMargin inFlowWidthAndMargin(const Box&, const HorizontalConstraints&, const OverriddenHorizontalValues&); 81 81 82 82 Point staticPosition(const Box&, const HorizontalConstraints&, const VerticalConstraints&) const; … … 89 89 90 90 private: 91 ContentHeightAndMargin inFlowNonReplacedHeightAndMargin(const Box&, const HorizontalConstraints&, const Overrid eVerticalValues&);92 ContentWidthAndMargin inFlowNonReplacedWidthAndMargin(const Box&, const HorizontalConstraints&, const Overrid eHorizontalValues&);93 ContentWidthAndMargin inFlowReplacedWidthAndMargin(const ReplacedBox&, const HorizontalConstraints&, const Overrid eHorizontalValues&);91 ContentHeightAndMargin inFlowNonReplacedHeightAndMargin(const Box&, const HorizontalConstraints&, const OverriddenVerticalValues&); 92 ContentWidthAndMargin inFlowNonReplacedWidthAndMargin(const Box&, const HorizontalConstraints&, const OverriddenHorizontalValues&); 93 ContentWidthAndMargin inFlowReplacedWidthAndMargin(const ReplacedBox&, const HorizontalConstraints&, const OverriddenHorizontalValues&); 94 94 95 95 const BlockFormattingContext& formattingContext() const { return downcast<BlockFormattingContext>(FormattingContext::Geometry::formattingContext()); } -
trunk/Source/WebCore/layout/blockformatting/BlockFormattingContextGeometry.cpp
r268133 r268456 43 43 namespace Layout { 44 44 45 ContentHeightAndMargin BlockFormattingContext::Geometry::inFlowNonReplacedHeightAndMargin(const Box& layoutBox, const HorizontalConstraints& horizontalConstraints, const Overrid eVerticalValues& overrideVerticalValues)45 ContentHeightAndMargin BlockFormattingContext::Geometry::inFlowNonReplacedHeightAndMargin(const Box& layoutBox, const HorizontalConstraints& horizontalConstraints, const OverriddenVerticalValues& overriddenVerticalValues) 46 46 { 47 47 ASSERT(layoutBox.isInFlow() && !layoutBox.isReplacedBox()); 48 48 ASSERT(layoutBox.isOverflowVisible()); 49 49 50 auto compute = [&](const auto& overrid eVerticalValues) -> ContentHeightAndMargin {50 auto compute = [&](const auto& overriddenVerticalValues) -> ContentHeightAndMargin { 51 51 52 52 // 10.6.3 Block-level non-replaced elements in normal flow when 'overflow' computes to 'visible' … … 67 67 auto nonCollapsedMargin = UsedVerticalMargin::NonCollapsedValues { computedVerticalMargin.before.valueOr(0), computedVerticalMargin.after.valueOr(0) }; 68 68 auto borderAndPaddingTop = boxGeometry.borderTop() + boxGeometry.paddingTop().valueOr(0); 69 auto height = overrid eVerticalValues.height ? overrideVerticalValues.height.value() : computedHeight(layoutBox);69 auto height = overriddenVerticalValues.height ? overriddenVerticalValues.height.value() : computedHeight(layoutBox); 70 70 71 71 if (height) … … 107 107 108 108 // 10.6.7 'Auto' heights for block-level formatting context boxes. 109 auto isAutoHeight = !overrid eVerticalValues.height && !computedHeight(layoutBox);109 auto isAutoHeight = !overriddenVerticalValues.height && !computedHeight(layoutBox); 110 110 if (isAutoHeight && (layoutBox.establishesFormattingContext() && !layoutBox.establishesInlineFormattingContext())) 111 return compute( Overrid eVerticalValues { contentHeightForFormattingContextRoot(downcast<ContainerBox>(layoutBox)) });112 return compute(overrid eVerticalValues);113 } 114 115 ContentWidthAndMargin BlockFormattingContext::Geometry::inFlowNonReplacedWidthAndMargin(const Box& layoutBox, const HorizontalConstraints& horizontalConstraints, const Overrid eHorizontalValues& overrideHorizontalValues)111 return compute( OverriddenVerticalValues { contentHeightForFormattingContextRoot(downcast<ContainerBox>(layoutBox)) }); 112 return compute(overriddenVerticalValues); 113 } 114 115 ContentWidthAndMargin BlockFormattingContext::Geometry::inFlowNonReplacedWidthAndMargin(const Box& layoutBox, const HorizontalConstraints& horizontalConstraints, const OverriddenHorizontalValues& overriddenHorizontalValues) 116 116 { 117 117 ASSERT(layoutBox.isInFlow()); … … 144 144 auto& boxGeometry = formattingContext().geometryForBox(layoutBox); 145 145 146 auto width = overrid eHorizontalValues.width ? overrideHorizontalValues.width : computedWidth(layoutBox, containingBlockWidth);146 auto width = overriddenHorizontalValues.width ? overriddenHorizontalValues.width : computedWidth(layoutBox, containingBlockWidth); 147 147 auto computedHorizontalMargin = Geometry::computedHorizontalMargin(layoutBox, horizontalConstraints); 148 148 UsedHorizontalMargin usedHorizontalMargin; … … 213 213 } 214 214 215 ContentWidthAndMargin BlockFormattingContext::Geometry::inFlowReplacedWidthAndMargin(const ReplacedBox& replacedBox, const HorizontalConstraints& horizontalConstraints, const Overrid eHorizontalValues& overrideHorizontalValues)215 ContentWidthAndMargin BlockFormattingContext::Geometry::inFlowReplacedWidthAndMargin(const ReplacedBox& replacedBox, const HorizontalConstraints& horizontalConstraints, const OverriddenHorizontalValues& overriddenHorizontalValues) 216 216 { 217 217 ASSERT(replacedBox.isInFlow()); … … 223 223 224 224 // #1 225 auto usedWidth = inlineReplacedWidthAndMargin(replacedBox, horizontalConstraints, { }, overrid eHorizontalValues).contentWidth;225 auto usedWidth = inlineReplacedWidthAndMargin(replacedBox, horizontalConstraints, { }, overriddenHorizontalValues).contentWidth; 226 226 // #2 227 auto nonReplacedWidthAndMargin = inFlowNonReplacedWidthAndMargin(replacedBox, horizontalConstraints, Overrid eHorizontalValues { usedWidth, overrideHorizontalValues.margin });227 auto nonReplacedWidthAndMargin = inFlowNonReplacedWidthAndMargin(replacedBox, horizontalConstraints, OverriddenHorizontalValues { usedWidth, overriddenHorizontalValues.margin }); 228 228 229 229 LOG_WITH_STREAM(FormattingContextLayout, stream << "[Width][Margin] -> inflow replaced -> width(" << usedWidth << "px) margin(" << nonReplacedWidthAndMargin.usedMargin.start << "px, " << nonReplacedWidthAndMargin.usedMargin.end << "px) -> layoutBox(" << &replacedBox << ")"); … … 256 256 } 257 257 258 ContentHeightAndMargin BlockFormattingContext::Geometry::inFlowHeightAndMargin(const Box& layoutBox, const HorizontalConstraints& horizontalConstraints, const Overrid eVerticalValues& overrideVerticalValues)258 ContentHeightAndMargin BlockFormattingContext::Geometry::inFlowHeightAndMargin(const Box& layoutBox, const HorizontalConstraints& horizontalConstraints, const OverriddenVerticalValues& overriddenVerticalValues) 259 259 { 260 260 ASSERT(layoutBox.isInFlow()); … … 263 263 // replaced elements in normal flow and floating replaced elements 264 264 if (layoutBox.isReplacedBox()) 265 return inlineReplacedHeightAndMargin(downcast<ReplacedBox>(layoutBox), horizontalConstraints, { }, overrid eVerticalValues);265 return inlineReplacedHeightAndMargin(downcast<ReplacedBox>(layoutBox), horizontalConstraints, { }, overriddenVerticalValues); 266 266 267 267 ContentHeightAndMargin contentHeightAndMargin; 268 268 if (layoutBox.isOverflowVisible() && !layoutBox.isDocumentBox()) { 269 269 // TODO: Figure out the case for the document element. Let's just complicated-case it for now. 270 contentHeightAndMargin = inFlowNonReplacedHeightAndMargin(layoutBox, horizontalConstraints, overrid eVerticalValues);270 contentHeightAndMargin = inFlowNonReplacedHeightAndMargin(layoutBox, horizontalConstraints, overriddenVerticalValues); 271 271 } else { 272 272 // 10.6.6 Complicated cases 273 273 // Block-level, non-replaced elements in normal flow when 'overflow' does not compute to 'visible' (except if the 'overflow' property's value has been propagated to the viewport). 274 contentHeightAndMargin = complicatedCases(layoutBox, horizontalConstraints, overrid eVerticalValues);274 contentHeightAndMargin = complicatedCases(layoutBox, horizontalConstraints, overriddenVerticalValues); 275 275 } 276 276 … … 285 285 } 286 286 287 ContentWidthAndMargin BlockFormattingContext::Geometry::inFlowWidthAndMargin(const Box& layoutBox, const HorizontalConstraints& horizontalConstraints, const Overrid eHorizontalValues& overrideHorizontalValues)287 ContentWidthAndMargin BlockFormattingContext::Geometry::inFlowWidthAndMargin(const Box& layoutBox, const HorizontalConstraints& horizontalConstraints, const OverriddenHorizontalValues& overriddenHorizontalValues) 288 288 { 289 289 ASSERT(layoutBox.isInFlow()); 290 290 291 291 if (!layoutBox.isReplacedBox()) 292 return inFlowNonReplacedWidthAndMargin(layoutBox, horizontalConstraints, overrid eHorizontalValues);293 return inFlowReplacedWidthAndMargin(downcast<ReplacedBox>(layoutBox), horizontalConstraints, overrid eHorizontalValues);292 return inFlowNonReplacedWidthAndMargin(layoutBox, horizontalConstraints, overriddenHorizontalValues); 293 return inFlowReplacedWidthAndMargin(downcast<ReplacedBox>(layoutBox), horizontalConstraints, overriddenHorizontalValues); 294 294 } 295 295 -
trunk/Source/WebCore/layout/blockformatting/tablewrapper/TableWrapperBlockFormattingContext.cpp
r267158 r268456 206 206 } 207 207 208 auto contentWidthAndMargin = geometry.inFlowWidthAndMargin(tableBox, horizontalConstraints, Overrid eHorizontalValues { usedWidth, { } });208 auto contentWidthAndMargin = geometry.inFlowWidthAndMargin(tableBox, horizontalConstraints, OverriddenHorizontalValues { usedWidth, { } }); 209 209 210 210 auto& boxGeometry = formattingState().boxGeometry(tableBox); … … 218 218 // Table is a special BFC content. Its height is mainly driven by the content. Computed height, min-height and max-height are all 219 219 // already been taken into account during the TFC layout. 220 auto heightAndMargin = geometry().inFlowHeightAndMargin(tableBox, constraints.horizontal, { quirks().overrid eTableHeight(tableBox) });220 auto heightAndMargin = geometry().inFlowHeightAndMargin(tableBox, constraints.horizontal, { quirks().overriddenTableHeight(tableBox) }); 221 221 222 222 auto marginCollapse = this->marginCollapse(); -
trunk/Source/WebCore/layout/blockformatting/tablewrapper/TableWrapperBlockFormattingContext.h
r263327 r268456 50 50 Quirks(const TableWrapperBlockFormattingContext&); 51 51 52 Optional<LayoutUnit> overrid eTableHeight(const ContainerBox& tableBox) const;52 Optional<LayoutUnit> overriddenTableHeight(const ContainerBox& tableBox) const; 53 53 }; 54 54 TableWrapperBlockFormattingContext::Quirks quirks() const { return Quirks(*this); } -
trunk/Source/WebCore/layout/blockformatting/tablewrapper/TableWrapperBlockFormattingContextQuirks.cpp
r263318 r268456 34 34 namespace Layout { 35 35 36 Optional<LayoutUnit> TableWrapperBlockFormattingContext::Quirks::overrid eTableHeight(const ContainerBox& tableBox) const36 Optional<LayoutUnit> TableWrapperBlockFormattingContext::Quirks::overriddenTableHeight(const ContainerBox& tableBox) const 37 37 { 38 38 if (layoutState().inQuirksMode()) { -
trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContext.h
r268122 r268456 73 73 InlineLayoutUnit logicalTopForNextLine(const LineBuilder::LineContent&, InlineLayoutUnit previousLineLogicalBottom, const FloatingContext&) const; 74 74 75 ContentHeightAndMargin inlineBlockHeightAndMargin(const Box&, const HorizontalConstraints&, const Overrid eVerticalValues&) const;76 ContentWidthAndMargin inlineBlockWidthAndMargin(const Box&, const HorizontalConstraints&, const Overrid eHorizontalValues&);75 ContentHeightAndMargin inlineBlockHeightAndMargin(const Box&, const HorizontalConstraints&, const OverriddenVerticalValues&) const; 76 ContentWidthAndMargin inlineBlockWidthAndMargin(const Box&, const HorizontalConstraints&, const OverriddenHorizontalValues&); 77 77 78 78 private: -
trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContextGeometry.cpp
r268399 r268456 459 459 } 460 460 461 ContentWidthAndMargin InlineFormattingContext::Geometry::inlineBlockWidthAndMargin(const Box& formattingContextRoot, const HorizontalConstraints& horizontalConstraints, const Overrid eHorizontalValues& overrideHorizontalValues)461 ContentWidthAndMargin InlineFormattingContext::Geometry::inlineBlockWidthAndMargin(const Box& formattingContextRoot, const HorizontalConstraints& horizontalConstraints, const OverriddenHorizontalValues& overriddenHorizontalValues) 462 462 { 463 463 ASSERT(formattingContextRoot.isInFlow()); … … 467 467 // Exactly as inline replaced elements. 468 468 if (formattingContextRoot.isReplacedBox()) 469 return inlineReplacedWidthAndMargin(downcast<ReplacedBox>(formattingContextRoot), horizontalConstraints, { }, overrid eHorizontalValues);469 return inlineReplacedWidthAndMargin(downcast<ReplacedBox>(formattingContextRoot), horizontalConstraints, { }, overriddenHorizontalValues); 470 470 471 471 // 10.3.9 'Inline-block', non-replaced elements in normal flow … … 484 484 } 485 485 486 ContentHeightAndMargin InlineFormattingContext::Geometry::inlineBlockHeightAndMargin(const Box& layoutBox, const HorizontalConstraints& horizontalConstraints, const Overrid eVerticalValues& overrideVerticalValues) const486 ContentHeightAndMargin InlineFormattingContext::Geometry::inlineBlockHeightAndMargin(const Box& layoutBox, const HorizontalConstraints& horizontalConstraints, const OverriddenVerticalValues& overriddenVerticalValues) const 487 487 { 488 488 ASSERT(layoutBox.isInFlow()); … … 490 490 // 10.6.2 Inline replaced elements, block-level replaced elements in normal flow, 'inline-block' replaced elements in normal flow and floating replaced elements 491 491 if (layoutBox.isReplacedBox()) 492 return inlineReplacedHeightAndMargin(downcast<ReplacedBox>(layoutBox), horizontalConstraints, { }, overrid eVerticalValues);492 return inlineReplacedHeightAndMargin(downcast<ReplacedBox>(layoutBox), horizontalConstraints, { }, overriddenVerticalValues); 493 493 494 494 // 10.6.6 Complicated cases 495 495 // - 'Inline-block', non-replaced elements. 496 return complicatedCases(layoutBox, horizontalConstraints, overrid eVerticalValues);496 return complicatedCases(layoutBox, horizontalConstraints, overriddenVerticalValues); 497 497 } 498 498
Note: See TracChangeset
for help on using the changeset viewer.