Changeset 239205 in webkit
- Timestamp:
- Dec 14, 2018 7:22:02 AM (5 years ago)
- Location:
- trunk/Source/WebCore
- Files:
-
- 1 added
- 14 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/Source/WebCore/ChangeLog
r239201 r239205 1 2018-12-14 Zalan Bujtas <zalan@apple.com> 2 3 [LFC][BFC] Introduce VerticalMargin and HorizontalMargin types. 4 https://bugs.webkit.org/show_bug.cgi?id=192692 5 6 Reviewed by Antti Koivisto. 7 8 This is in preparation for completing block margin collapsing. 9 10 * WebCore.xcodeproj/project.pbxproj: 11 * layout/FormattingContext.cpp: 12 (WebCore::Layout::FormattingContext::computeOutOfFlowVerticalGeometry const): 13 * layout/FormattingContext.h: 14 * layout/FormattingContextGeometry.cpp: 15 (WebCore::Layout::FormattingContext::Geometry::outOfFlowNonReplacedVerticalGeometry): 16 (WebCore::Layout::FormattingContext::Geometry::outOfFlowReplacedVerticalGeometry): 17 (WebCore::Layout::FormattingContext::Geometry::complicatedCases): 18 (WebCore::Layout::FormattingContext::Geometry::inlineReplacedHeightAndMargin): 19 (WebCore::Layout::FormattingContext::Geometry::computedNonCollapsedHorizontalMarginValue): 20 (WebCore::Layout::FormattingContext::Geometry::computedNonCollapsedVerticalMarginValue): 21 * layout/LayoutState.cpp: 22 (WebCore::Layout::LayoutState::LayoutState): 23 * layout/LayoutUnits.h: 24 (WebCore::Layout::HeightAndMargin::usedMarginValues const): Deleted. 25 * layout/MarginTypes.h: Added. 26 (WebCore::Layout::VerticalMargin::nonCollapsedValues const): 27 (WebCore::Layout::VerticalMargin::collapsedValues const): 28 (WebCore::Layout::VerticalMargin::setCollapsedValues): 29 (WebCore::Layout::VerticalMargin::VerticalMargin): 30 (WebCore::Layout::VerticalMargin::usedValues const): 31 * layout/blockformatting/BlockFormattingContext.cpp: 32 (WebCore::Layout::BlockFormattingContext::computeHeightAndMargin const): 33 * layout/blockformatting/BlockFormattingContextGeometry.cpp: 34 (WebCore::Layout::BlockFormattingContext::Geometry::inFlowNonReplacedHeightAndMargin): 35 (WebCore::Layout::BlockFormattingContext::Geometry::inFlowHeightAndMargin): 36 * layout/blockformatting/BlockFormattingContextQuirks.cpp: 37 (WebCore::Layout::BlockFormattingContext::Quirks::stretchedHeight): 38 * layout/displaytree/DisplayBox.cpp: 39 (WebCore::Display::Box::Box): 40 * layout/displaytree/DisplayBox.h: 41 (WebCore::Display::Box::setHorizontalMargin): 42 (WebCore::Display::Box::setVerticalMargin): 43 (WebCore::Display::Box::setHorizontalNonComputedMargin): 44 (WebCore::Display::Box::verticalMargin const): 45 (WebCore::Display::Box::marginTop const): 46 (WebCore::Display::Box::marginLeft const): 47 (WebCore::Display::Box::marginBottom const): 48 (WebCore::Display::Box::marginRight const): 49 (WebCore::Display::Box::nonCollapsedMarginTop const): 50 (WebCore::Display::Box::nonCollapsedMarginBottom const): 51 (WebCore::Display::Box::setVerticalNonCollapsedMargin): Deleted. 52 * layout/floats/FloatingContext.cpp: 53 (WebCore::Layout::FloatingContext::verticalPositionWithClearance const): 54 * layout/inlineformatting/InlineFormattingContext.cpp: 55 (WebCore::Layout::InlineFormattingContext::computeHeightAndMargin const): 56 1 57 2018-12-14 Fujii Hironori <Hironori.Fujii@sony.com> 2 58 -
trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj
r239145 r239205 9150 9150 6FE198132178397B00446F08 /* InlineLineBreaker.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = InlineLineBreaker.cpp; sourceTree = "<group>"; }; 9151 9151 6FE198152178397C00446F08 /* InlineLineBreaker.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InlineLineBreaker.h; sourceTree = "<group>"; }; 9152 6FE7AA2621C37B6300296DCD /* MarginTypes.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = MarginTypes.h; sourceTree = "<group>"; }; 9152 9153 6FE7CFA02177EEF1005B1573 /* InlineItem.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = InlineItem.h; sourceTree = "<group>"; }; 9153 9154 6FE7CFA32177EF10005B1573 /* LayoutLineBreakBox.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = LayoutLineBreakBox.h; sourceTree = "<group>"; }; … … 16136 16137 6F7CA3C4208C2956002F29AB /* LayoutState.h */, 16137 16138 6F73918C2106CEDD006AF262 /* LayoutUnits.h */, 16139 6FE7AA2621C37B6300296DCD /* MarginTypes.h */, 16138 16140 11FF02D520BA3C810083F25B /* Verification.cpp */, 16139 16141 ); … … 25550 25552 D0D8648221B61727003C983C /* WebGPUBufferDescriptor.h */, 25551 25553 D0D8648321B61727003C983C /* WebGPUBufferDescriptor.idl */, 25552 D063AE4E21C0810A000E6A35 /* WebGPUBufferUsage.h */,25553 25554 D063AE3F21C05DDD000E6A35 /* WebGPUBufferUsage.h */, 25554 D063AE4C21C07AB5000E6A35 /* WebGPUBufferUsage.idl */,25555 25555 D063AE4021C05DDD000E6A35 /* WebGPUBufferUsage.idl */, 25556 25556 D001D9AC21B0C81A0023B9BC /* WebGPUColor.h */, -
trunk/Source/WebCore/layout/FormattingContext.cpp
r238995 r239205 117 117 auto& displayBox = layoutState.displayBoxForLayoutBox(layoutBox); 118 118 // Margins of absolutely positioned boxes do not collapse 119 ASSERT(!verticalGeometry.heightAndMargin. collapsedMargin);120 auto nonCollapsedVerticalMargins = verticalGeometry.heightAndMargin. usedMarginValues();119 ASSERT(!verticalGeometry.heightAndMargin.margin.collapsedValues()); 120 auto nonCollapsedVerticalMargins = verticalGeometry.heightAndMargin.margin.nonCollapsedValues(); 121 121 displayBox.setTop(verticalGeometry.top + nonCollapsedVerticalMargins.top); 122 122 displayBox.setContentBoxHeight(verticalGeometry.heightAndMargin.height); 123 displayBox.setVerticalMargin(nonCollapsedVerticalMargins); 124 displayBox.setVerticalNonCollapsedMargin(nonCollapsedVerticalMargins); 123 displayBox.setVerticalMargin(verticalGeometry.heightAndMargin.margin); 125 124 } 126 125 -
trunk/Source/WebCore/layout/FormattingContext.h
r238667 r239205 97 97 static std::optional<Edges> computedPadding(const LayoutState&, const Box&); 98 98 99 static Horizontal EdgescomputedNonCollapsedHorizontalMarginValue(const LayoutState&, const Box&);100 static Vertical Edges computedNonCollapsedVerticalMarginValue(const LayoutState&, const Box&);99 static HorizontalMargin computedNonCollapsedHorizontalMarginValue(const LayoutState&, const Box&); 100 static VerticalMargin::ComputedValues computedNonCollapsedVerticalMarginValue(const LayoutState&, const Box&); 101 101 102 102 static std::optional<LayoutUnit> computedValueIfNotAuto(const Length& geometryProperty, LayoutUnit containingBlockWidth); -
trunk/Source/WebCore/layout/FormattingContextGeometry.cpp
r238961 r239205 357 357 358 358 LOG_WITH_STREAM(FormattingContextLayout, stream << "[Position][Height][Margin] -> out-of-flow non-replaced -> top(" << *top << "px) bottom(" << *bottom << "px) height(" << *height << "px) margin(" << *marginTop << "px, " << *marginBottom << "px) layoutBox(" << &layoutBox << ")"); 359 return { *top, *bottom, { *height, { *marginTop, *marginBottom }, {} } };359 return { *top, *bottom, { *height, { { *marginTop, *marginBottom }, { } } } }; 360 360 } 361 361 … … 572 572 573 573 LOG_WITH_STREAM(FormattingContextLayout, stream << "[Position][Height][Margin] -> out-of-flow replaced -> top(" << *top << "px) bottom(" << *bottom << "px) height(" << height << "px) margin(" << *marginTop << "px, " << *marginBottom << "px) layoutBox(" << &layoutBox << ")"); 574 return { *top, *bottom, { height, { *marginTop, *marginBottom }, {} } };574 return { *top, *bottom, { height, { { *marginTop, *marginBottom }, { } } } }; 575 575 } 576 576 … … 711 711 712 712 LOG_WITH_STREAM(FormattingContextLayout, stream << "[Height][Margin] -> floating non-replaced -> height(" << *height << "px) margin(" << *marginTop << "px, " << *marginBottom << "px) -> layoutBox(" << &layoutBox << ")"); 713 return HeightAndMargin { *height, { *marginTop, *marginBottom }, {} };713 return HeightAndMargin { *height, { { *marginTop, *marginBottom }, { } } }; 714 714 } 715 715 … … 839 839 840 840 LOG_WITH_STREAM(FormattingContextLayout, stream << "[Height][Margin] -> inflow replaced -> height(" << *height << "px) margin(" << margin.top << "px, " << margin.bottom << "px) -> layoutBox(" << &layoutBox << ")"); 841 return { *height, margin, {} };841 return { *height, { margin, { } } }; 842 842 } 843 843 … … 1021 1021 } 1022 1022 1023 Horizontal EdgesFormattingContext::Geometry::computedNonCollapsedHorizontalMarginValue(const LayoutState& layoutState, const Box& layoutBox)1023 HorizontalMargin FormattingContext::Geometry::computedNonCollapsedHorizontalMarginValue(const LayoutState& layoutState, const Box& layoutBox) 1024 1024 { 1025 1025 auto& style = layoutBox.style(); … … 1033 1033 } 1034 1034 1035 Vertical Edges FormattingContext::Geometry::computedNonCollapsedVerticalMarginValue(const LayoutState& layoutState, const Box& layoutBox)1035 VerticalMargin::ComputedValues FormattingContext::Geometry::computedNonCollapsedVerticalMarginValue(const LayoutState& layoutState, const Box& layoutBox) 1036 1036 { 1037 1037 auto& style = layoutBox.style(); -
trunk/Source/WebCore/layout/LayoutState.cpp
r238995 r239205 57 57 displayBox.setHorizontalNonComputedMargin({ }); 58 58 displayBox.setVerticalMargin({ }); 59 displayBox.setVerticalNonCollapsedMargin({ });60 59 displayBox.setBorder({ }); 61 60 displayBox.setPadding({ }); -
trunk/Source/WebCore/layout/LayoutUnits.h
r238931 r239205 31 31 #include "LayoutPoint.h" 32 32 #include "LayoutRect.h" 33 #include "MarginTypes.h" 33 34 #include <wtf/Optional.h> 34 35 … … 103 104 struct WidthAndMargin { 104 105 LayoutUnit width; 105 HorizontalEdges margin; 106 HorizontalEdges nonComputedMargin; 106 HorizontalMargin margin; 107 // FIXME: Figure out if we really really need this. 108 HorizontalMargin nonComputedMargin; 107 109 }; 108 110 109 111 struct HeightAndMargin { 110 VerticalEdges usedMarginValues() const { return collapsedMargin.value_or(nonCollapsedMargin); }111 112 112 LayoutUnit height; 113 VerticalEdges nonCollapsedMargin; 114 std::optional<VerticalEdges> collapsedMargin; 113 VerticalMargin margin; 115 114 }; 116 115 -
trunk/Source/WebCore/layout/blockformatting/BlockFormattingContext.cpp
r238995 r239205 359 359 // Used height should remain the same. 360 360 ASSERT((layoutState.inQuirksMode() && (layoutBox.isBodyBox() || layoutBox.isDocumentBox())) || maxHeightAndMargin.height == *maxHeight); 361 heightAndMargin = { *maxHeight, maxHeightAndMargin. nonCollapsedMargin, maxHeightAndMargin.collapsedMargin };361 heightAndMargin = { *maxHeight, maxHeightAndMargin.margin }; 362 362 } 363 363 } … … 368 368 // Used height should remain the same. 369 369 ASSERT((layoutState.inQuirksMode() && (layoutBox.isBodyBox() || layoutBox.isDocumentBox())) || minHeightAndMargin.height == *minHeight); 370 heightAndMargin = { *minHeight, minHeightAndMargin. nonCollapsedMargin, minHeightAndMargin.collapsedMargin };370 heightAndMargin = { *minHeight, minHeightAndMargin.margin }; 371 371 } 372 372 } … … 374 374 auto& displayBox = layoutState.displayBoxForLayoutBox(layoutBox); 375 375 displayBox.setContentBoxHeight(heightAndMargin.height); 376 displayBox.setVerticalNonCollapsedMargin(heightAndMargin.nonCollapsedMargin); 377 displayBox.setVerticalMargin(heightAndMargin.usedMarginValues()); 376 displayBox.setVerticalMargin(heightAndMargin.margin); 378 377 379 378 // If this box has already been moved by the estimated vertical margin, no need to move it again. 380 379 if (layoutBox.isFloatingPositioned() || !displayBox.estimatedMarginTop()) 381 displayBox.moveVertically(heightAndMargin. usedMarginValues().top);380 displayBox.moveVertically(heightAndMargin.margin.usedValues().top); 382 381 } 383 382 -
trunk/Source/WebCore/layout/blockformatting/BlockFormattingContextGeometry.cpp
r238931 r239205 62 62 auto& displayBox = layoutState.displayBoxForLayoutBox(layoutBox); 63 63 64 VerticalEdges nonCollapsedMargin ={ computedValueIfNotAuto(style.marginTop(), containingBlockWidth).value_or(0),64 auto nonCollapsedMargin = VerticalMargin::ComputedValues { computedValueIfNotAuto(style.marginTop(), containingBlockWidth).value_or(0), 65 65 computedValueIfNotAuto(style.marginBottom(), containingBlockWidth).value_or(0) }; 66 VerticalEdges collapsedMargin ={ MarginCollapse::marginTop(layoutState, layoutBox), MarginCollapse::marginBottom(layoutState, layoutBox) };66 auto collapsedMargin = VerticalMargin::CollapsedValues { MarginCollapse::marginTop(layoutState, layoutBox), MarginCollapse::marginBottom(layoutState, layoutBox) }; 67 67 auto borderAndPaddingTop = displayBox.borderTop() + displayBox.paddingTop().value_or(0); 68 68 69 69 auto height = usedHeight ? usedHeight.value() : computedHeightValue(layoutState, layoutBox, HeightType::Normal); 70 70 if (height) 71 return { height.value(), nonCollapsedMargin, collapsedMargin};71 return { height.value(), { nonCollapsedMargin, collapsedMargin } }; 72 72 73 73 if (!is<Container>(layoutBox) || !downcast<Container>(layoutBox).hasInFlowChild()) 74 return { 0, nonCollapsedMargin, collapsedMargin};74 return { 0, { nonCollapsedMargin, collapsedMargin } }; 75 75 76 76 // 1. the bottom edge of the last line box, if the box establishes a inline formatting context with one or more lines … … 79 79 auto& inlineRuns = downcast<InlineFormattingState>(layoutState.establishedFormattingState(layoutBox)).inlineRuns(); 80 80 auto bottomEdge = inlineRuns.isEmpty() ? LayoutUnit() : inlineRuns.last().logicalBottom(); 81 return { bottomEdge, nonCollapsedMargin, collapsedMargin};81 return { bottomEdge, { nonCollapsedMargin, collapsedMargin } }; 82 82 } 83 83 … … 87 87 if (!MarginCollapse::isMarginBottomCollapsedWithParent(*lastInFlowChild)) { 88 88 auto& lastInFlowDisplayBox = layoutState.displayBoxForLayoutBox(*lastInFlowChild); 89 return { lastInFlowDisplayBox.bottom() + lastInFlowDisplayBox.marginBottom() - borderAndPaddingTop, nonCollapsedMargin, collapsedMargin};89 return { lastInFlowDisplayBox.bottom() + lastInFlowDisplayBox.marginBottom() - borderAndPaddingTop, { nonCollapsedMargin, collapsedMargin } }; 90 90 } 91 91 … … 96 96 if (inFlowChild) { 97 97 auto& inFlowDisplayBox = layoutState.displayBoxForLayoutBox(*inFlowChild); 98 return { inFlowDisplayBox.top() + inFlowDisplayBox.borderBox().height() - borderAndPaddingTop, nonCollapsedMargin, collapsedMargin};98 return { inFlowDisplayBox.top() + inFlowDisplayBox.borderBox().height() - borderAndPaddingTop, { nonCollapsedMargin, collapsedMargin } }; 99 99 } 100 100 101 101 // 4. zero, otherwise 102 return { 0, nonCollapsedMargin, collapsedMargin};102 return { 0, { nonCollapsedMargin, collapsedMargin } }; 103 103 }; 104 104 105 105 auto heightAndMargin = compute(); 106 106 107 LOG_WITH_STREAM(FormattingContextLayout, stream << "[Height][Margin] -> inflow non-replaced -> height(" << heightAndMargin.height << "px) margin(" << heightAndMargin. usedMarginValues().top << "px, " << heightAndMargin.usedMarginValues().bottom << "px) -> layoutBox(" << &layoutBox << ")");107 LOG_WITH_STREAM(FormattingContextLayout, stream << "[Height][Margin] -> inflow non-replaced -> height(" << heightAndMargin.height << "px) margin(" << heightAndMargin.margin.usedValues().top << "px, " << heightAndMargin.margin.usedValues().bottom << "px) -> layoutBox(" << &layoutBox << ")"); 108 108 return heightAndMargin; 109 109 } … … 264 264 heightAndMargin = Quirks::stretchedHeight(layoutState, layoutBox, heightAndMargin); 265 265 266 LOG_WITH_STREAM(FormattingContextLayout, stream << "[Height][Margin] -> inflow non-replaced -> streched to viewport -> height(" << heightAndMargin.height << "px) margin(" << heightAndMargin. usedMarginValues().top << "px, " << heightAndMargin.usedMarginValues().bottom << "px) -> layoutBox(" << &layoutBox << ")");266 LOG_WITH_STREAM(FormattingContextLayout, stream << "[Height][Margin] -> inflow non-replaced -> streched to viewport -> height(" << heightAndMargin.height << "px) margin(" << heightAndMargin.margin.usedValues().top << "px, " << heightAndMargin.margin.usedValues().bottom << "px) -> layoutBox(" << &layoutBox << ")"); 267 267 return heightAndMargin; 268 268 } -
trunk/Source/WebCore/layout/blockformatting/BlockFormattingContextQuirks.cpp
r238995 r239205 81 81 LayoutUnit totalVerticalMargins; 82 82 if (layoutBox.isDocumentBox()) { 83 auto verticalMargins = heightAndMargin. usedMarginValues();83 auto verticalMargins = heightAndMargin.margin.usedValues(); 84 84 // Document box's margins do not collapse. 85 ASSERT(!heightAndMargin. collapsedMargin);85 ASSERT(!heightAndMargin.margin.collapsedValues()); 86 86 totalVerticalMargins = verticalMargins.top + verticalMargins.bottom; 87 87 } else if (layoutBox.isBodyBox()) { … … 94 94 // This quirk happens when the body height is 0 which means its vertical margins collapse through (top and bottom margins are adjoining). 95 95 // However now that we stretch the body they don't collapse through anymore, so we need to use the non-collapsed values instead. 96 auto bodyBoxVerticalMargins = heightAndMargin.height ? heightAndMargin. usedMarginValues() : heightAndMargin.nonCollapsedMargin;96 auto bodyBoxVerticalMargins = heightAndMargin.height ? heightAndMargin.margin.usedValues() : heightAndMargin.margin.nonCollapsedValues(); 97 97 totalVerticalMargins = bodyBoxVerticalMargins.top + bodyBoxVerticalMargins.bottom; 98 98 } -
trunk/Source/WebCore/layout/displaytree/DisplayBox.cpp
r235501 r239205 58 58 , m_contentWidth(other.m_contentWidth) 59 59 , m_contentHeight(other.m_contentHeight) 60 , m_ margin(other.m_margin)61 , m_vertical NonCollapsedMargin(other.m_verticalNonCollapsedMargin)60 , m_horizontalMargin(other.m_horizontalMargin) 61 , m_verticalMargin(other.m_verticalMargin) 62 62 , m_horizontalNonComputedMargin(other.m_horizontalNonComputedMargin) 63 63 , m_estimatedMarginTop(other.m_estimatedMarginTop) -
trunk/Source/WebCore/layout/displaytree/DisplayBox.h
r237631 r239205 139 139 Rect rectWithMargin() const { return { top() - marginTop(), left() - marginLeft(), marginLeft() + width() + marginRight(), marginTop() + height() + marginBottom() }; } 140 140 141 Layout::VerticalMargin verticalMargin() const; 141 142 LayoutUnit marginTop() const; 142 143 LayoutUnit marginLeft() const; … … 191 192 void setContentBoxWidth(LayoutUnit); 192 193 193 void setHorizontalMargin(Layout::HorizontalEdges); 194 void setVerticalMargin(Layout::VerticalEdges); 195 void setVerticalNonCollapsedMargin(Layout::VerticalEdges); 196 void setHorizontalNonComputedMargin(Layout::HorizontalEdges); 194 void setHorizontalMargin(Layout::HorizontalMargin); 195 void setVerticalMargin(Layout::VerticalMargin); 196 void setHorizontalNonComputedMargin(Layout::HorizontalMargin); 197 197 void setEstimatedMarginTop(LayoutUnit marginTop) { m_estimatedMarginTop = marginTop; } 198 198 … … 225 225 LayoutUnit m_contentHeight; 226 226 227 Layout:: Edges m_margin;228 Layout::Vertical Edges m_verticalNonCollapsedMargin;229 Layout::Horizontal Edgesm_horizontalNonComputedMargin;227 Layout::HorizontalMargin m_horizontalMargin; 228 Layout::VerticalMargin m_verticalMargin; 229 Layout::HorizontalMargin m_horizontalNonComputedMargin; 230 230 std::optional<LayoutUnit> m_estimatedMarginTop; 231 231 … … 508 508 } 509 509 510 inline void Box::setHorizontalMargin(Layout::Horizontal Edgesmargin)510 inline void Box::setHorizontalMargin(Layout::HorizontalMargin margin) 511 511 { 512 512 #if !ASSERT_DISABLED 513 513 setHasValidHorizontalMargin(); 514 514 #endif 515 m_ margin.horizontal= margin;516 } 517 518 inline void Box::setVerticalMargin(Layout::Vertical Edgesmargin)515 m_horizontalMargin = margin; 516 } 517 518 inline void Box::setVerticalMargin(Layout::VerticalMargin margin) 519 519 { 520 520 #if !ASSERT_DISABLED 521 521 setHasValidVerticalMargin(); 522 #endif523 ASSERT(!m_estimatedMarginTop || *m_estimatedMarginTop == margin.top);524 m_margin.vertical = margin;525 }526 527 inline void Box::setVerticalNonCollapsedMargin(Layout::VerticalEdges margin)528 {529 #if !ASSERT_DISABLED530 522 setHasValidVerticalNonCollapsedMargin(); 531 523 #endif 532 m_verticalNonCollapsedMargin = margin; 533 } 534 535 inline void Box::setHorizontalNonComputedMargin(Layout::HorizontalEdges margin) 524 ASSERT(!m_estimatedMarginTop || *m_estimatedMarginTop == margin.usedValues().top); 525 m_verticalMargin = margin; 526 } 527 528 inline void Box::setHorizontalNonComputedMargin(Layout::HorizontalMargin margin) 536 529 { 537 530 #if !ASSERT_DISABLED … … 557 550 } 558 551 552 inline Layout::VerticalMargin Box::verticalMargin() const 553 { 554 ASSERT(m_hasValidVerticalMargin); 555 return m_verticalMargin; 556 } 557 559 558 inline LayoutUnit Box::marginTop() const 560 559 { 561 560 ASSERT(m_hasValidVerticalMargin); 562 return m_ margin.vertical.top;561 return m_verticalMargin.usedValues().top; 563 562 } 564 563 … … 566 565 { 567 566 ASSERT(m_hasValidHorizontalMargin); 568 return m_ margin.horizontal.left;567 return m_horizontalMargin.left; 569 568 } 570 569 … … 572 571 { 573 572 ASSERT(m_hasValidVerticalMargin); 574 return m_ margin.vertical.bottom;573 return m_verticalMargin.usedValues().bottom; 575 574 } 576 575 … … 578 577 { 579 578 ASSERT(m_hasValidHorizontalMargin); 580 return m_ margin.horizontal.right;579 return m_horizontalMargin.right; 581 580 } 582 581 … … 584 583 { 585 584 ASSERT(m_hasValidVerticalNonCollapsedMargin); 586 return m_vertical NonCollapsedMargin.top;585 return m_verticalMargin.nonCollapsedValues().top; 587 586 } 588 587 … … 590 589 { 591 590 ASSERT(m_hasValidVerticalNonCollapsedMargin); 592 return m_vertical NonCollapsedMargin.bottom;591 return m_verticalMargin.nonCollapsedValues().bottom; 593 592 } 594 593 -
trunk/Source/WebCore/layout/floats/FloatingContext.cpp
r238995 r239205 193 193 194 194 // Reset previous bottom and current top margins to non-collapsing. 195 previousInFlowDisplayBox.setVerticalMargin({ previousInFlowDisplayBox.marginTop(), previousInFlowDisplayBox.nonCollapsedMarginBottom() }); 196 displayBox.setVerticalMargin({ displayBox.nonCollapsedMarginTop(), displayBox.marginBottom() }); 195 auto previousVerticalMargin = previousInFlowDisplayBox.verticalMargin(); 196 if (previousVerticalMargin.collapsedValues() && previousVerticalMargin.collapsedValues()->bottom) { 197 previousVerticalMargin.setCollapsedValues({ previousVerticalMargin.collapsedValues()->top, { } }); 198 previousInFlowDisplayBox.setVerticalMargin(previousVerticalMargin); 199 } 200 // FIXME: check if collapsing through has anything to do with this. 201 auto verticalMargin = displayBox.verticalMargin(); 202 if (verticalMargin.collapsedValues() && verticalMargin.collapsedValues()->top) { 203 verticalMargin.setCollapsedValues({ { }, verticalMargin.collapsedValues()->bottom }); 204 displayBox.setVerticalMargin(verticalMargin); 205 } 197 206 198 207 auto nonCollapsedMargin = previousInFlowDisplayBox.marginBottom() + displayBox.marginTop(); -
trunk/Source/WebCore/layout/inlineformatting/InlineFormattingContext.cpp
r238995 r239205 363 363 auto& displayBox = layoutState.displayBoxForLayoutBox(layoutBox); 364 364 displayBox.setContentBoxHeight(heightAndMargin.height); 365 displayBox.setVerticalNonCollapsedMargin(heightAndMargin.nonCollapsedMargin); 366 displayBox.setVerticalMargin(heightAndMargin.usedMarginValues()); 365 displayBox.setVerticalMargin(heightAndMargin.margin); 367 366 } 368 367
Note: See TracChangeset
for help on using the changeset viewer.