[LFC][BFC] contentHeightForFormattingContextRoot uses the wrong coordinate system...
authorzalan@apple.com <zalan@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sun, 5 Aug 2018 23:19:57 +0000 (23:19 +0000)
committerzalan@apple.com <zalan@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Sun, 5 Aug 2018 23:19:57 +0000 (23:19 +0000)
https://bugs.webkit.org/show_bug.cgi?id=188319

Reviewed by Antti Koivisto.

Display::Box::marginBox() is in the coordinate system of the box itself (8px top margin translates to y = -8px).
What we need instead to compute the content height is the top/bottom position in the containing block's coordinate system (rect and rectWithMargin).

* layout/FormattingContextGeometry.cpp:
(WebCore::Layout::contentHeightForFormattingContextRoot):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@234584 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/layout/FormattingContextGeometry.cpp

index 3d89b3c..9dd2c29 100644 (file)
@@ -1,3 +1,16 @@
+2018-08-05  Zalan Bujtas  <zalan@apple.com>
+
+        [LFC][BFC] contentHeightForFormattingContextRoot uses the wrong coordinate system to compute the height.
+        https://bugs.webkit.org/show_bug.cgi?id=188319
+
+        Reviewed by Antti Koivisto.
+
+        Display::Box::marginBox() is in the coordinate system of the box itself (8px top margin translates to y = -8px).
+        What we need instead to compute the content height is the top/bottom position in the containing block's coordinate system (rect and rectWithMargin).
+
+        * layout/FormattingContextGeometry.cpp:
+        (WebCore::Layout::contentHeightForFormattingContextRoot):
+
 2018-08-05  Ms2ger  <Ms2ger@igalia.com>
 
         [GStreamer] Remove unsound assertions in MediaPlayerPrivateGStreamerBase.
index a8ac6f6..d90be21 100644 (file)
@@ -55,18 +55,20 @@ static LayoutUnit contentHeightForFormattingContextRoot(LayoutContext& layoutCon
 
     auto* firstDisplayBox = layoutContext.displayBoxForLayoutBox(*formattingRootContainer.firstInFlowChild());
     auto* lastDisplayBox = layoutContext.displayBoxForLayoutBox(*formattingRootContainer.lastInFlowChild());
+    auto top = firstDisplayBox->rectWithMargin().top();
+    auto bottom = lastDisplayBox->rectWithMargin().bottom();
+
     auto* formattingContextRoot = &layoutBox;
     // TODO: The document renderer is not a formatting context root by default at all. Need to find out what it is.
     if (!layoutBox.establishesFormattingContext()) {
         ASSERT(layoutBox.isDocumentBox());
         formattingContextRoot = &layoutBox.formattingContextRoot();
     }
-    auto floatsBottom = layoutContext.establishedFormattingState(*formattingContextRoot).floatingState().bottom(*formattingContextRoot);
 
-    auto top = firstDisplayBox->marginBox().top();
-    auto bottom = lastDisplayBox->marginBox().bottom();
+    auto floatsBottom = layoutContext.establishedFormattingState(*formattingContextRoot).floatingState().bottom(*formattingContextRoot);
     if (floatsBottom)
         bottom = std::max(*floatsBottom, bottom);
+
     auto computedHeight = bottom - top;
     LOG_WITH_STREAM(FormattingContextLayout, stream << "[Height] -> content height for formatting context root -> height(" << computedHeight << "px) layoutBox("<< &layoutBox << ")");
     return computedHeight;