Title: [281061] trunk/Source/WebCore
Revision
281061
Author
simon.fra...@apple.com
Date
2021-08-15 08:44:27 -0700 (Sun, 15 Aug 2021)

Log Message

[LFC Display] Introduce type-safe rect types for the display tree
https://bugs.webkit.org/show_bug.cgi?id=220214

Reviewed by Alan Bujtas.

Introduce AbsoluteFloatRect, UnadjustedAbsoluteFloatRect and ViewFloatRect which are
type-safe float rect types for the display tree.

AbsoluteFloatRect is relative to document origin. UnadjustedAbsoluteFloatRect is similar,
but is computed before scrolling and transforms are taken into account.

ViewFloatRect is relative to the view.

* WebCore.xcodeproj/project.pbxproj:
* display/DisplayGeometryTypes.h: Copied from Source/WebCore/display/css/DisplayReplacedBox.h.
(WebCore::Display::intersection):
(WebCore::Display::unionRect):
* display/DisplayTree.cpp:
(WebCore::Display::Tree::setBoxNeedsDisplay const):
* display/DisplayTree.h:
* display/DisplayTreeBuilder.cpp:
* display/css/DisplayBox.cpp:
(WebCore::Display::Box::Box):
(WebCore::Display::Box::setNeedsDisplay):
* display/css/DisplayBox.h:
(WebCore::Display::Box::Box):
(WebCore::Display::Box::absoluteBoxRect const):
(WebCore::Display::Box::absolutePaintingExtent const):
* display/css/DisplayBoxClip.cpp:
(WebCore::Display::BoxClip::pushClip):
(WebCore::Display::BoxClip::pushRoundedClip):
* display/css/DisplayBoxClip.h:
(WebCore::Display::BoxClip::clipRect const):
* display/css/DisplayBoxDecorationPainter.cpp:
(WebCore::Display::BoxDecorationPainter::paintFillLayer const):
* display/css/DisplayBoxFactory.cpp:
(WebCore::Display::BoxFactory::displayBoxForRootBox const):
(WebCore::Display::BoxFactory::displayBoxForLayoutBox const):
(WebCore::Display::BoxFactory::displayBoxForTextRun const):
(WebCore::Display::BoxFactory::setupBoxGeometry const):
* display/css/DisplayBoxModelBox.cpp:
(WebCore::Display::BoxModelBox::BoxModelBox):
(WebCore::Display::BoxModelBox::clipForDescendants const):
(WebCore::Display::BoxModelBox::absolutePaintingExtent const):
* display/css/DisplayBoxModelBox.h:
(WebCore::Display::BoxModelBox::BoxModelBox):
(WebCore::Display::BoxModelBox::absoluteBorderBoxRect const):
(WebCore::Display::BoxModelBox::absolutePaddingBoxRect const):
(WebCore::Display::BoxModelBox::absoluteContentBoxRect const):
(WebCore::Display::BoxModelBox::setAbsolutePaddingBoxRect):
(WebCore::Display::BoxModelBox::setAbsoluteContentBoxRect):
* display/css/DisplayContainerBox.cpp:
(WebCore::Display::ContainerBox::ContainerBox):
* display/css/DisplayContainerBox.h:
* display/css/DisplayImageBox.cpp:
(WebCore::Display::ImageBox::ImageBox):
* display/css/DisplayImageBox.h:
* display/css/DisplayReplacedBox.cpp:
(WebCore::Display::ReplacedBox::ReplacedBox):
* display/css/DisplayReplacedBox.h:
(WebCore::Display::ReplacedBox::replacedContentRect const):
(WebCore::Display::ReplacedBox::setReplacedContentRect):
* display/css/DisplayStackingItem.h:
(WebCore::Display::StackingItem::paintedContentBounds const):
(WebCore::Display::StackingItem::paintedBoundsIncludingDescendantItems const):
(WebCore::Display::StackingItem::setPaintedContentBounds):
(WebCore::Display::StackingItem::setPaintedBoundsIncludingDescendantItems):
* display/css/DisplayTextBox.cpp:
(WebCore::Display::TextBox::TextBox):
* display/css/DisplayTextBox.h:

Modified Paths

Added Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (281060 => 281061)


--- trunk/Source/WebCore/ChangeLog	2021-08-15 15:43:36 UTC (rev 281060)
+++ trunk/Source/WebCore/ChangeLog	2021-08-15 15:44:27 UTC (rev 281061)
@@ -1,5 +1,78 @@
 2021-08-15  Simon Fraser  <simon.fra...@apple.com>
 
+        [LFC Display] Introduce type-safe rect types for the display tree
+        https://bugs.webkit.org/show_bug.cgi?id=220214
+
+        Reviewed by Alan Bujtas.
+
+        Introduce AbsoluteFloatRect, UnadjustedAbsoluteFloatRect and ViewFloatRect which are
+        type-safe float rect types for the display tree.
+
+        AbsoluteFloatRect is relative to document origin. UnadjustedAbsoluteFloatRect is similar,
+        but is computed before scrolling and transforms are taken into account.
+
+        ViewFloatRect is relative to the view.
+
+        * WebCore.xcodeproj/project.pbxproj:
+        * display/DisplayGeometryTypes.h: Copied from Source/WebCore/display/css/DisplayReplacedBox.h.
+        (WebCore::Display::intersection):
+        (WebCore::Display::unionRect):
+        * display/DisplayTree.cpp:
+        (WebCore::Display::Tree::setBoxNeedsDisplay const):
+        * display/DisplayTree.h:
+        * display/DisplayTreeBuilder.cpp:
+        * display/css/DisplayBox.cpp:
+        (WebCore::Display::Box::Box):
+        (WebCore::Display::Box::setNeedsDisplay):
+        * display/css/DisplayBox.h:
+        (WebCore::Display::Box::Box):
+        (WebCore::Display::Box::absoluteBoxRect const):
+        (WebCore::Display::Box::absolutePaintingExtent const):
+        * display/css/DisplayBoxClip.cpp:
+        (WebCore::Display::BoxClip::pushClip):
+        (WebCore::Display::BoxClip::pushRoundedClip):
+        * display/css/DisplayBoxClip.h:
+        (WebCore::Display::BoxClip::clipRect const):
+        * display/css/DisplayBoxDecorationPainter.cpp:
+        (WebCore::Display::BoxDecorationPainter::paintFillLayer const):
+        * display/css/DisplayBoxFactory.cpp:
+        (WebCore::Display::BoxFactory::displayBoxForRootBox const):
+        (WebCore::Display::BoxFactory::displayBoxForLayoutBox const):
+        (WebCore::Display::BoxFactory::displayBoxForTextRun const):
+        (WebCore::Display::BoxFactory::setupBoxGeometry const):
+        * display/css/DisplayBoxModelBox.cpp:
+        (WebCore::Display::BoxModelBox::BoxModelBox):
+        (WebCore::Display::BoxModelBox::clipForDescendants const):
+        (WebCore::Display::BoxModelBox::absolutePaintingExtent const):
+        * display/css/DisplayBoxModelBox.h:
+        (WebCore::Display::BoxModelBox::BoxModelBox):
+        (WebCore::Display::BoxModelBox::absoluteBorderBoxRect const):
+        (WebCore::Display::BoxModelBox::absolutePaddingBoxRect const):
+        (WebCore::Display::BoxModelBox::absoluteContentBoxRect const):
+        (WebCore::Display::BoxModelBox::setAbsolutePaddingBoxRect):
+        (WebCore::Display::BoxModelBox::setAbsoluteContentBoxRect):
+        * display/css/DisplayContainerBox.cpp:
+        (WebCore::Display::ContainerBox::ContainerBox):
+        * display/css/DisplayContainerBox.h:
+        * display/css/DisplayImageBox.cpp:
+        (WebCore::Display::ImageBox::ImageBox):
+        * display/css/DisplayImageBox.h:
+        * display/css/DisplayReplacedBox.cpp:
+        (WebCore::Display::ReplacedBox::ReplacedBox):
+        * display/css/DisplayReplacedBox.h:
+        (WebCore::Display::ReplacedBox::replacedContentRect const):
+        (WebCore::Display::ReplacedBox::setReplacedContentRect):
+        * display/css/DisplayStackingItem.h:
+        (WebCore::Display::StackingItem::paintedContentBounds const):
+        (WebCore::Display::StackingItem::paintedBoundsIncludingDescendantItems const):
+        (WebCore::Display::StackingItem::setPaintedContentBounds):
+        (WebCore::Display::StackingItem::setPaintedBoundsIncludingDescendantItems):
+        * display/css/DisplayTextBox.cpp:
+        (WebCore::Display::TextBox::TextBox):
+        * display/css/DisplayTextBox.h:
+
+2021-08-15  Simon Fraser  <simon.fra...@apple.com>
+
         [LFC Display] Add a Display::Box flag for HasTransfrom
         https://bugs.webkit.org/show_bug.cgi?id=229115
 

Modified: trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj (281060 => 281061)


--- trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj	2021-08-15 15:43:36 UTC (rev 281060)
+++ trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj	2021-08-15 15:44:27 UTC (rev 281061)
@@ -6356,6 +6356,7 @@
 		0FF29A5325101A61003C34E2 /* LayoutBoxGeometry.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LayoutBoxGeometry.h; sourceTree = "<group>"; };
 		0FF29A5525101A61003C34E2 /* LayoutBoxGeometry.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = LayoutBoxGeometry.cpp; sourceTree = "<group>"; };
 		0FF2E80C1EE0D430009EABD4 /* PerformanceLoggingClient.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PerformanceLoggingClient.cpp; sourceTree = "<group>"; };
+		0FF3312926C8A1EC00E27D48 /* DisplayGeometryTypes.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = DisplayGeometryTypes.h; sourceTree = "<group>"; };
 		0FF3B9241EE3B6DE00B84144 /* JSDOMQuad.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSDOMQuad.cpp; sourceTree = "<group>"; };
 		0FF3B9251EE3B6DE00B84144 /* JSDOMQuad.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSDOMQuad.h; sourceTree = "<group>"; };
 		0FF3B9261EE3B6DE00B84144 /* JSDOMQuadInit.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSDOMQuadInit.cpp; sourceTree = "<group>"; };
@@ -17837,6 +17838,7 @@
 			children = (
 				0FC692C3257D70CA0098E3F9 /* compositing */,
 				0FFF1B71251BC6570098795A /* css */,
+				0FF3312926C8A1EC00E27D48 /* DisplayGeometryTypes.h */,
 				0FFF1B82251BC6630098795A /* DisplayTree.cpp */,
 				0FFF1B81251BC6630098795A /* DisplayTree.h */,
 				0FFF1B80251BC6620098795A /* DisplayTreeBuilder.cpp */,

Copied: trunk/Source/WebCore/display/DisplayGeometryTypes.h (from rev 281060, trunk/Source/WebCore/display/css/DisplayReplacedBox.h) (0 => 281061)


--- trunk/Source/WebCore/display/DisplayGeometryTypes.h	                        (rev 0)
+++ trunk/Source/WebCore/display/DisplayGeometryTypes.h	2021-08-15 15:44:27 UTC (rev 281061)
@@ -0,0 +1,63 @@
+/*
+ * Copyright (C) 2020 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. AND ITS CONTRIBUTORS ``AS IS''
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
+ * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR ITS CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF
+ * THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#if ENABLE(LAYOUT_FORMATTING_CONTEXT)
+
+#include "FloatRect.h"
+
+namespace WebCore {
+namespace Display {
+
+// Absolute coordinates are anchored at the document origin.
+class AbsoluteFloatRect : public FloatRect { };
+
+// Absolute coordinates ignoring the effects of scrolling and transforms.
+class UnadjustedAbsoluteFloatRect : public FloatRect { };
+
+// View coordinates.
+class ViewFloatRect : public FloatRect { };
+
+template<typename T>
+inline auto intersection(T& a, const T& b) -> typename std::enable_if_t<std::is_base_of_v<FloatRect, T>, T>
+{
+    T c = a;
+    c.intersect(b);
+    return c;
+}
+
+template<typename T>
+inline auto unionRect(T& a, const T& b) -> typename std::enable_if_t<std::is_base_of_v<FloatRect, T>, T>
+{
+    T c = a;
+    c.unite(b);
+    return c;
+}
+
+} // namespace Display
+} // namespace WebCore
+
+#endif // ENABLE(LAYOUT_FORMATTING_CONTEXT)

Modified: trunk/Source/WebCore/display/DisplayTree.cpp (281060 => 281061)


--- trunk/Source/WebCore/display/DisplayTree.cpp	2021-08-15 15:43:36 UTC (rev 281060)
+++ trunk/Source/WebCore/display/DisplayTree.cpp	2021-08-15 15:44:27 UTC (rev 281061)
@@ -49,7 +49,7 @@
     return downcast<ContainerBox>(m_rootStackingItem->box());
 }
 
-void Tree::setBoxNeedsDisplay(Box&, std::optional<AbsoluteFloatRect>) const
+void Tree::setBoxNeedsDisplay(Box&, std::optional<UnadjustedAbsoluteFloatRect>) const
 {
     // FIXME: For now, just repaint the world.
     if (m_view)

Modified: trunk/Source/WebCore/display/DisplayTree.h (281060 => 281061)


--- trunk/Source/WebCore/display/DisplayTree.h	2021-08-15 15:43:36 UTC (rev 281060)
+++ trunk/Source/WebCore/display/DisplayTree.h	2021-08-15 15:44:27 UTC (rev 281061)
@@ -27,7 +27,7 @@
 
 #if ENABLE(LAYOUT_FORMATTING_CONTEXT)
 
-#include "FloatRect.h"
+#include "DisplayGeometryTypes.h"
 #include <wtf/IsoMalloc.h>
 
 namespace WebCore {
@@ -38,8 +38,6 @@
 class StackingItem;
 class View;
 
-using AbsoluteFloatRect = FloatRect;
-
 class Tree {
     WTF_MAKE_FAST_ALLOCATED(Tree);
     friend class TreeBuilder;
@@ -51,9 +49,9 @@
     void setView(View* view) { m_view = view; }
 
     const StackingItem& rootStackingItem() const { return *m_rootStackingItem; }
-     const ContainerBox& rootBox() const;
+    const ContainerBox& rootBox() const;
 
-    void setBoxNeedsDisplay(Box&, std::optional<AbsoluteFloatRect> subrect = std::nullopt) const;
+    void setBoxNeedsDisplay(Box&, std::optional<UnadjustedAbsoluteFloatRect> subrect = std::nullopt) const;
 
 private:
     void setRootStackingItem(std::unique_ptr<StackingItem>&&);

Modified: trunk/Source/WebCore/display/DisplayTreeBuilder.cpp (281060 => 281061)


--- trunk/Source/WebCore/display/DisplayTreeBuilder.cpp	2021-08-15 15:43:36 UTC (rev 281060)
+++ trunk/Source/WebCore/display/DisplayTreeBuilder.cpp	2021-08-15 15:44:27 UTC (rev 281061)
@@ -104,8 +104,8 @@
     StackingItem& currentStackingItem;
     StackingItem& currentStackingContextItem;
 
-    AbsoluteFloatRect currentStackingItemPaintedContentExtent; // This stacking item's contents only.
-    AbsoluteFloatRect currentStackingItemPaintingExtent; // Including descendant items.
+    UnadjustedAbsoluteFloatRect currentStackingItemPaintedContentExtent; // This stacking item's contents only.
+    UnadjustedAbsoluteFloatRect currentStackingItemPaintingExtent; // Including descendant items.
 };
 
 TreeBuilder::TreeBuilder(float pixelSnappingFactor)

Modified: trunk/Source/WebCore/display/css/DisplayBox.cpp (281060 => 281061)


--- trunk/Source/WebCore/display/css/DisplayBox.cpp	2021-08-15 15:43:36 UTC (rev 281060)
+++ trunk/Source/WebCore/display/css/DisplayBox.cpp	2021-08-15 15:44:27 UTC (rev 281061)
@@ -39,7 +39,7 @@
 
 DEFINE_ALLOCATOR_WITH_HEAP_IDENTIFIER(Box);
 
-Box::Box(Tree& tree, AbsoluteFloatRect absoluteRect, Style&& displayStyle, OptionSet<TypeFlags> flags)
+Box::Box(Tree& tree, UnadjustedAbsoluteFloatRect absoluteRect, Style&& displayStyle, OptionSet<TypeFlags> flags)
     : m_tree(tree)
     , m_absoluteBoxRect(absoluteRect)
     , m_style(WTFMove(displayStyle))
@@ -59,7 +59,7 @@
     return !isLineBreakBox() && style().participatesInZOrderSorting();
 }
 
-void Box::setNeedsDisplay(std::optional<AbsoluteFloatRect> subrect)
+void Box::setNeedsDisplay(std::optional<UnadjustedAbsoluteFloatRect> subrect)
 {
     m_tree.setBoxNeedsDisplay(*this, subrect);
 }

Modified: trunk/Source/WebCore/display/css/DisplayBox.h (281060 => 281061)


--- trunk/Source/WebCore/display/css/DisplayBox.h	2021-08-15 15:43:36 UTC (rev 281060)
+++ trunk/Source/WebCore/display/css/DisplayBox.h	2021-08-15 15:44:27 UTC (rev 281061)
@@ -27,6 +27,7 @@
 
 #if ENABLE(LAYOUT_FORMATTING_CONTEXT)
 
+#include "DisplayGeometryTypes.h"
 #include "DisplayStyle.h"
 #include "FloatRect.h"
 #include <wtf/IsoMalloc.h>
@@ -38,9 +39,6 @@
 class ContainerBox;
 class Tree;
 
-// FIXME: Make this a strong type.
-using AbsoluteFloatRect = FloatRect;
-
 DECLARE_ALLOCATOR_WITH_HEAP_IDENTIFIER(Box);
 class Box {
     WTF_MAKE_FAST_ALLOCATED_WITH_HEAP_IDENTIFIER(Box);
@@ -57,14 +55,14 @@
         HasTransform     = 1 << 0,
     };
 
-    Box(Tree&, AbsoluteFloatRect, Style&&, OptionSet<TypeFlags> = { });
+    Box(Tree&, UnadjustedAbsoluteFloatRect, Style&&, OptionSet<TypeFlags> = { });
     virtual ~Box();
 
     const Style& style() const { return m_style; }
 
-    AbsoluteFloatRect absoluteBoxRect() const { return m_absoluteBoxRect; }
+    UnadjustedAbsoluteFloatRect absoluteBoxRect() const { return m_absoluteBoxRect; }
 
-    virtual AbsoluteFloatRect absolutePaintingExtent() const { return m_absoluteBoxRect; }
+    virtual UnadjustedAbsoluteFloatRect absolutePaintingExtent() const { return m_absoluteBoxRect; }
 
     bool isBoxModelBox() const { return m_typeFlags.contains(TypeFlags::BoxModelBox); }
     bool isContainerBox() const { return m_typeFlags.contains(TypeFlags::ContainerBox); }
@@ -84,7 +82,7 @@
     void setHasTransform(bool value) { m_styleFlags.set(StyleFlags::HasTransform, value); }
     bool hasTransform() const { return m_styleFlags.contains(StyleFlags::HasTransform); }
 
-    void setNeedsDisplay(std::optional<AbsoluteFloatRect> subrect = std::nullopt);
+    void setNeedsDisplay(std::optional<UnadjustedAbsoluteFloatRect> subrect = std::nullopt);
 
     virtual String debugDescription() const;
 
@@ -92,7 +90,7 @@
     virtual const char* boxName() const;
 
     const Tree& m_tree;
-    AbsoluteFloatRect m_absoluteBoxRect;
+    UnadjustedAbsoluteFloatRect m_absoluteBoxRect;
     Style m_style;
     ContainerBox* m_parent { nullptr };
     std::unique_ptr<Box> m_nextSibling;

Modified: trunk/Source/WebCore/display/css/DisplayBoxClip.cpp (281060 => 281061)


--- trunk/Source/WebCore/display/css/DisplayBoxClip.cpp	2021-08-15 15:43:36 UTC (rev 281060)
+++ trunk/Source/WebCore/display/css/DisplayBoxClip.cpp	2021-08-15 15:44:27 UTC (rev 281061)
@@ -50,7 +50,7 @@
     return adoptRef(*new BoxClip(*this));
 }
 
-void BoxClip::pushClip(const AbsoluteFloatRect& rect)
+void BoxClip::pushClip(const UnadjustedAbsoluteFloatRect& rect)
 {
     if (m_clipRect) {
         m_clipRect->intersect(rect);
@@ -63,7 +63,7 @@
 void BoxClip::pushRoundedClip(const FloatRoundedRect& roundedRect)
 {
     ASSERT(roundedRect.isRounded());
-    pushClip(roundedRect.rect());
+    pushClip(UnadjustedAbsoluteFloatRect { roundedRect.rect() });
 
     m_affectedByBorderRadius = true;
     m_clipStack.append(roundedRect);

Modified: trunk/Source/WebCore/display/css/DisplayBoxClip.h (281060 => 281061)


--- trunk/Source/WebCore/display/css/DisplayBoxClip.h	2021-08-15 15:43:36 UTC (rev 281060)
+++ trunk/Source/WebCore/display/css/DisplayBoxClip.h	2021-08-15 15:44:27 UTC (rev 281061)
@@ -54,12 +54,12 @@
     static Ref<BoxClip> create() { return adoptRef(*new BoxClip); }
     Ref<BoxClip> copy() const;
 
-    std::optional<AbsoluteFloatRect> clipRect() const { return m_clipRect; }
+    std::optional<UnadjustedAbsoluteFloatRect> clipRect() const { return m_clipRect; }
     
     bool affectedByBorderRadius() const { return m_affectedByBorderRadius; }
     const Vector<FloatRoundedRect>& clipStack() const { return m_clipStack; }
 
-    void pushClip(const AbsoluteFloatRect&);
+    void pushClip(const UnadjustedAbsoluteFloatRect&);
     void pushRoundedClip(const FloatRoundedRect&);
 
 private:
@@ -66,7 +66,7 @@
     BoxClip();
     BoxClip(const BoxClip&);
 
-    std::optional<AbsoluteFloatRect> m_clipRect;
+    std::optional<UnadjustedAbsoluteFloatRect> m_clipRect;
     Vector<FloatRoundedRect> m_clipStack;
     bool m_affectedByBorderRadius { false };
 };

Modified: trunk/Source/WebCore/display/css/DisplayBoxDecorationPainter.cpp (281060 => 281061)


--- trunk/Source/WebCore/display/css/DisplayBoxDecorationPainter.cpp	2021-08-15 15:43:36 UTC (rev 281060)
+++ trunk/Source/WebCore/display/css/DisplayBoxDecorationPainter.cpp	2021-08-15 15:44:27 UTC (rev 281061)
@@ -1204,7 +1204,7 @@
 {
     GraphicsContextStateSaver stateSaver(paintingContext.context, false);
 
-    auto clipRectForLayer = [](const BoxModelBox& box, const FillLayer& layer) {
+    auto clipRectForLayer = [](const BoxModelBox& box, const FillLayer& layer) -> UnadjustedAbsoluteFloatRect {
         switch (layer.clip()) {
         case FillBox::Border:
             return box.absoluteBorderBoxRect();
@@ -1215,7 +1215,7 @@
         case FillBox::Text:
             break;
         }
-        return AbsoluteFloatRect();
+        return { };
     };
 
     switch (layer.clip()) {

Modified: trunk/Source/WebCore/display/css/DisplayBoxFactory.cpp (281060 => 281061)


--- trunk/Source/WebCore/display/css/DisplayBoxFactory.cpp	2021-08-15 15:43:36 UTC (rev 281060)
+++ trunk/Source/WebCore/display/css/DisplayBoxFactory.cpp	2021-08-15 15:44:27 UTC (rev 281061)
@@ -88,7 +88,7 @@
 
     auto style = Style { rootLayoutBox.style(), styleForBackground };
 
-    auto rootBox = makeUnique<ContainerBox>(m_treeBuilder.tree(), snapRectToDevicePixels(borderBoxRect, m_pixelSnappingFactor), WTFMove(style));
+    auto rootBox = makeUnique<ContainerBox>(m_treeBuilder.tree(), UnadjustedAbsoluteFloatRect { snapRectToDevicePixels(borderBoxRect, m_pixelSnappingFactor) }, WTFMove(style));
     // We pass rootBox as its own containingBlockBox here to allow it to be a reference everywhere else.
     setupBoxModelBox(*rootBox, rootLayoutBox, geometry, { *rootBox, { 0, 0 } }, styleForBackground);
     return rootBox;
@@ -116,7 +116,7 @@
     // FIXME: Need to map logical to physical rects.
     auto borderBoxRect = LayoutRect { Layout::BoxGeometry::borderBoxRect(geometry) };
     borderBoxRect.move(containingBlockContext.offsetFromRoot);
-    auto pixelSnappedBorderBoxRect = snapRectToDevicePixels(borderBoxRect, m_pixelSnappingFactor);
+    auto pixelSnappedBorderBoxRect = UnadjustedAbsoluteFloatRect { snapRectToDevicePixels(borderBoxRect, m_pixelSnappingFactor) };
 
     // FIXME: Handle isAnonymous()
     
@@ -143,7 +143,7 @@
     if (layoutBox.isLineBreakBox())
         flags.add(Box::TypeFlags::LineBreakBox);
 
-    return makeUnique<Box>(m_treeBuilder.tree(), snapRectToDevicePixels(borderBoxRect, m_pixelSnappingFactor), WTFMove(style), flags);
+    return makeUnique<Box>(m_treeBuilder.tree(), pixelSnappedBorderBoxRect, WTFMove(style), flags);
 }
 
 std::unique_ptr<Box> BoxFactory::displayBoxForTextRun(const Layout::LineRun& run, const Layout::InlineLineGeometry& lineGeometry, const ContainingBlockContext& containingBlockContext) const
@@ -157,7 +157,7 @@
     runRect.move(containingBlockContext.offsetFromRoot);
 
     auto style = Style { run.layoutBox().style() };
-    return makeUnique<TextBox>(m_treeBuilder.tree(), snapRectToDevicePixels(runRect, m_pixelSnappingFactor), WTFMove(style), run);
+    return makeUnique<TextBox>(m_treeBuilder.tree(), UnadjustedAbsoluteFloatRect { snapRectToDevicePixels(runRect, m_pixelSnappingFactor) }, WTFMove(style), run);
 }
 
 void BoxFactory::setupBoxGeometry(BoxModelBox& box, const Layout::Box&, const Layout::BoxGeometry& layoutGeometry, const ContainingBlockContext& containingBlockContext) const
@@ -167,11 +167,11 @@
 
     auto paddingBoxRect = LayoutRect { layoutGeometry.paddingBox() };
     paddingBoxRect.moveBy(borderBoxRect.location());
-    box.setAbsolutePaddingBoxRect(snapRectToDevicePixels(paddingBoxRect, m_pixelSnappingFactor));
+    box.setAbsolutePaddingBoxRect(UnadjustedAbsoluteFloatRect { snapRectToDevicePixels(paddingBoxRect, m_pixelSnappingFactor) });
 
     auto contentBoxRect = LayoutRect { layoutGeometry.contentBox() };
     contentBoxRect.moveBy(borderBoxRect.location());
-    box.setAbsoluteContentBoxRect(snapRectToDevicePixels(contentBoxRect, m_pixelSnappingFactor));
+    box.setAbsoluteContentBoxRect(UnadjustedAbsoluteFloatRect { snapRectToDevicePixels(contentBoxRect, m_pixelSnappingFactor) });
 
     if (is<ReplacedBox>(box)) {
         auto& replacedBox = downcast<ReplacedBox>(box);
@@ -178,7 +178,7 @@
         // FIXME: Need to get the correct rect taking object-fit etc into account.
         auto replacedContentRect = LayoutRect { layoutGeometry.contentBoxLeft(), layoutGeometry.contentBoxTop(), layoutGeometry.contentBoxWidth(), layoutGeometry.contentBoxHeight() };
         replacedContentRect.moveBy(borderBoxRect.location());
-        auto pixelSnappedReplacedContentRect = snapRectToDevicePixels(replacedContentRect, m_pixelSnappingFactor);
+        auto pixelSnappedReplacedContentRect = UnadjustedAbsoluteFloatRect { snapRectToDevicePixels(replacedContentRect, m_pixelSnappingFactor) };
         replacedBox.setReplacedContentRect(pixelSnappedReplacedContentRect);
     }
 }

Modified: trunk/Source/WebCore/display/css/DisplayBoxModelBox.cpp (281060 => 281061)


--- trunk/Source/WebCore/display/css/DisplayBoxModelBox.cpp	2021-08-15 15:43:36 UTC (rev 281060)
+++ trunk/Source/WebCore/display/css/DisplayBoxModelBox.cpp	2021-08-15 15:44:27 UTC (rev 281061)
@@ -40,7 +40,7 @@
 
 DEFINE_ALLOCATOR_WITH_HEAP_IDENTIFIER(BoxModelBox);
 
-BoxModelBox::BoxModelBox(Tree& tree, AbsoluteFloatRect borderBox, Style&& displayStyle, OptionSet<TypeFlags> flags)
+BoxModelBox::BoxModelBox(Tree& tree, UnadjustedAbsoluteFloatRect borderBox, Style&& displayStyle, OptionSet<TypeFlags> flags)
     : Box(tree, borderBox, WTFMove(displayStyle), flags | TypeFlags::BoxModelBox)
 {
 }
@@ -108,7 +108,7 @@
                 return;
             }
 
-            boxClip.pushClip(roundedInnerBorder.rect());
+            boxClip.pushClip(UnadjustedAbsoluteFloatRect { roundedInnerBorder.rect() });
             return;
         }
 
@@ -119,7 +119,7 @@
     return clip;
 }
 
-AbsoluteFloatRect BoxModelBox::absolutePaintingExtent() const
+UnadjustedAbsoluteFloatRect BoxModelBox::absolutePaintingExtent() const
 {
     auto paintingExtent = absoluteBorderBoxRect();
 

Modified: trunk/Source/WebCore/display/css/DisplayBoxModelBox.h (281060 => 281061)


--- trunk/Source/WebCore/display/css/DisplayBoxModelBox.h	2021-08-15 15:43:36 UTC (rev 281060)
+++ trunk/Source/WebCore/display/css/DisplayBoxModelBox.h	2021-08-15 15:44:27 UTC (rev 281061)
@@ -44,14 +44,14 @@
     WTF_MAKE_FAST_ALLOCATED_WITH_HEAP_IDENTIFIER(BoxModelBox);
     friend class BoxFactory;
 public:
-    BoxModelBox(Tree&, AbsoluteFloatRect borderBox, Style&&, OptionSet<TypeFlags> = { });
+    BoxModelBox(Tree&, UnadjustedAbsoluteFloatRect borderBox, Style&&, OptionSet<TypeFlags> = { });
     virtual ~BoxModelBox();
 
-    AbsoluteFloatRect absoluteBorderBoxRect() const { return absoluteBoxRect(); }
-    AbsoluteFloatRect absolutePaddingBoxRect() const { return m_paddingBoxRect; }
-    AbsoluteFloatRect absoluteContentBoxRect() const { return m_contentBoxRect; }
+    UnadjustedAbsoluteFloatRect absoluteBorderBoxRect() const { return absoluteBoxRect(); }
+    UnadjustedAbsoluteFloatRect absolutePaddingBoxRect() const { return m_paddingBoxRect; }
+    UnadjustedAbsoluteFloatRect absoluteContentBoxRect() const { return m_contentBoxRect; }
 
-    AbsoluteFloatRect absolutePaintingExtent() const override;
+    UnadjustedAbsoluteFloatRect absolutePaintingExtent() const override;
 
     const BoxDecorationData* boxDecorationData() const { return m_boxDecorationData.get(); }
     const BoxRareGeometry* rareGeometry() const { return m_boxRareGeometry.get(); }
@@ -68,8 +68,8 @@
 private:
     const char* boxName() const override;
 
-    void setAbsolutePaddingBoxRect(const AbsoluteFloatRect& box) { m_paddingBoxRect = box; }
-    void setAbsoluteContentBoxRect(const AbsoluteFloatRect& box) { m_contentBoxRect = box; }
+    void setAbsolutePaddingBoxRect(const UnadjustedAbsoluteFloatRect& box) { m_paddingBoxRect = box; }
+    void setAbsoluteContentBoxRect(const UnadjustedAbsoluteFloatRect& box) { m_contentBoxRect = box; }
 
     void setBoxDecorationData(std::unique_ptr<BoxDecorationData>&&);
     void setBoxRareGeometry(std::unique_ptr<BoxRareGeometry>&&);
@@ -77,8 +77,8 @@
     void setAncestorClip(RefPtr<BoxClip>&&);
     RefPtr<BoxClip> clipForDescendants() const;
 
-    AbsoluteFloatRect m_paddingBoxRect;
-    AbsoluteFloatRect m_contentBoxRect;
+    UnadjustedAbsoluteFloatRect m_paddingBoxRect;
+    UnadjustedAbsoluteFloatRect m_contentBoxRect;
 
     std::unique_ptr<BoxDecorationData> m_boxDecorationData;
     std::unique_ptr<BoxRareGeometry> m_boxRareGeometry;

Modified: trunk/Source/WebCore/display/css/DisplayContainerBox.cpp (281060 => 281061)


--- trunk/Source/WebCore/display/css/DisplayContainerBox.cpp	2021-08-15 15:43:36 UTC (rev 281060)
+++ trunk/Source/WebCore/display/css/DisplayContainerBox.cpp	2021-08-15 15:44:27 UTC (rev 281061)
@@ -37,7 +37,7 @@
 
 DEFINE_ALLOCATOR_WITH_HEAP_IDENTIFIER(ContainerBox);
 
-ContainerBox::ContainerBox(Tree& tree, AbsoluteFloatRect borderBox, Style&& displayStyle)
+ContainerBox::ContainerBox(Tree& tree, UnadjustedAbsoluteFloatRect borderBox, Style&& displayStyle)
     : BoxModelBox(tree, borderBox, WTFMove(displayStyle), { TypeFlags::ContainerBox })
 {
 }

Modified: trunk/Source/WebCore/display/css/DisplayContainerBox.h (281060 => 281061)


--- trunk/Source/WebCore/display/css/DisplayContainerBox.h	2021-08-15 15:43:36 UTC (rev 281060)
+++ trunk/Source/WebCore/display/css/DisplayContainerBox.h	2021-08-15 15:44:27 UTC (rev 281061)
@@ -36,7 +36,7 @@
 class ContainerBox : public BoxModelBox {
     WTF_MAKE_FAST_ALLOCATED_WITH_HEAP_IDENTIFIER(ContainerBox);
 public:
-    ContainerBox(Tree&, AbsoluteFloatRect borderBox, Style&&);
+    ContainerBox(Tree&, UnadjustedAbsoluteFloatRect borderBox, Style&&);
     
     const Box* firstChild() const { return m_firstChild.get(); }
     void setFirstChild(std::unique_ptr<Box>&&);

Modified: trunk/Source/WebCore/display/css/DisplayImageBox.cpp (281060 => 281061)


--- trunk/Source/WebCore/display/css/DisplayImageBox.cpp	2021-08-15 15:43:36 UTC (rev 281060)
+++ trunk/Source/WebCore/display/css/DisplayImageBox.cpp	2021-08-15 15:44:27 UTC (rev 281061)
@@ -36,7 +36,7 @@
 
 DEFINE_ALLOCATOR_WITH_HEAP_IDENTIFIER(ImageBox);
 
-ImageBox::ImageBox(Tree& tree, AbsoluteFloatRect borderBox, Style&& displayStyle, RefPtr<Image>&& image)
+ImageBox::ImageBox(Tree& tree, UnadjustedAbsoluteFloatRect borderBox, Style&& displayStyle, RefPtr<Image>&& image)
     : ReplacedBox(tree, borderBox, WTFMove(displayStyle), { TypeFlags::ImageBox })
     , m_image(WTFMove(image))
 {

Modified: trunk/Source/WebCore/display/css/DisplayImageBox.h (281060 => 281061)


--- trunk/Source/WebCore/display/css/DisplayImageBox.h	2021-08-15 15:43:36 UTC (rev 281060)
+++ trunk/Source/WebCore/display/css/DisplayImageBox.h	2021-08-15 15:44:27 UTC (rev 281061)
@@ -41,7 +41,7 @@
 class ImageBox : public ReplacedBox {
     WTF_MAKE_FAST_ALLOCATED_WITH_HEAP_IDENTIFIER(ImageBox);
 public:
-    ImageBox(Tree&, AbsoluteFloatRect borderBox, Style&&, RefPtr<Image>&&);
+    ImageBox(Tree&, UnadjustedAbsoluteFloatRect borderBox, Style&&, RefPtr<Image>&&);
 
     Image* image() const { return m_image.get(); }
 

Modified: trunk/Source/WebCore/display/css/DisplayReplacedBox.cpp (281060 => 281061)


--- trunk/Source/WebCore/display/css/DisplayReplacedBox.cpp	2021-08-15 15:43:36 UTC (rev 281060)
+++ trunk/Source/WebCore/display/css/DisplayReplacedBox.cpp	2021-08-15 15:44:27 UTC (rev 281061)
@@ -35,7 +35,7 @@
 
 DEFINE_ALLOCATOR_WITH_HEAP_IDENTIFIER(ReplacedBox);
 
-ReplacedBox::ReplacedBox(Tree& tree, AbsoluteFloatRect borderBox, Style&& displayStyle, OptionSet<TypeFlags> flags)
+ReplacedBox::ReplacedBox(Tree& tree, UnadjustedAbsoluteFloatRect borderBox, Style&& displayStyle, OptionSet<TypeFlags> flags)
     : BoxModelBox(tree, borderBox, WTFMove(displayStyle), flags)
 {
 }

Modified: trunk/Source/WebCore/display/css/DisplayReplacedBox.h (281060 => 281061)


--- trunk/Source/WebCore/display/css/DisplayReplacedBox.h	2021-08-15 15:43:36 UTC (rev 281060)
+++ trunk/Source/WebCore/display/css/DisplayReplacedBox.h	2021-08-15 15:44:27 UTC (rev 281061)
@@ -33,20 +33,21 @@
 namespace Display {
 
 DECLARE_ALLOCATOR_WITH_HEAP_IDENTIFIER(ReplacedBox);
+
 class ReplacedBox : public BoxModelBox {
     WTF_MAKE_FAST_ALLOCATED_WITH_HEAP_IDENTIFIER(ReplacedBox);
     friend class BoxFactory;
 public:
-    ReplacedBox(Tree&, AbsoluteFloatRect borderBox, Style&&, OptionSet<TypeFlags>);
+    ReplacedBox(Tree&, UnadjustedAbsoluteFloatRect borderBox, Style&&, OptionSet<TypeFlags>);
     
-    AbsoluteFloatRect replacedContentRect() const { return m_replacedContentRect; }
+    UnadjustedAbsoluteFloatRect replacedContentRect() const { return m_replacedContentRect; }
 
 private:
     const char* boxName() const override;
 
-    void setReplacedContentRect(const AbsoluteFloatRect& box) { m_replacedContentRect = box; }
+    void setReplacedContentRect(const UnadjustedAbsoluteFloatRect& box) { m_replacedContentRect = box; }
 
-    AbsoluteFloatRect m_replacedContentRect;
+    UnadjustedAbsoluteFloatRect m_replacedContentRect;
 };
 
 } // namespace Display

Modified: trunk/Source/WebCore/display/css/DisplayStackingItem.h (281060 => 281061)


--- trunk/Source/WebCore/display/css/DisplayStackingItem.h	2021-08-15 15:43:36 UTC (rev 281060)
+++ trunk/Source/WebCore/display/css/DisplayStackingItem.h	2021-08-15 15:44:27 UTC (rev 281061)
@@ -55,9 +55,9 @@
     bool isStackingContext() const;
 
     // Bounds for the painted content of this stacking item (excluding descendant items), not taking clips from ancestors into account.
-    AbsoluteFloatRect paintedContentBounds() const { return m_paintedContentBounds; }
+    UnadjustedAbsoluteFloatRect paintedContentBounds() const { return m_paintedContentBounds; }
     // Bounds for the painted content of this stacking item and descendant stacking items.
-    AbsoluteFloatRect paintedBoundsIncludingDescendantItems() const { return m_paintedBoundsIncludingDescendantItems; }
+    UnadjustedAbsoluteFloatRect paintedBoundsIncludingDescendantItems() const { return m_paintedBoundsIncludingDescendantItems; }
 
     const StackingItemList& negativeZOrderList() const { return m_negativeZOrderList; }
     const StackingItemList& positiveZOrderList() const { return m_positiveZOrderList; }
@@ -65,15 +65,15 @@
 private:
     void sortLists();
 
-    void setPaintedContentBounds(const AbsoluteFloatRect& bounds) { m_paintedContentBounds = bounds; }
-    void setPaintedBoundsIncludingDescendantItems(const AbsoluteFloatRect& bounds) { m_paintedBoundsIncludingDescendantItems = bounds; }
+    void setPaintedContentBounds(const UnadjustedAbsoluteFloatRect& bounds) { m_paintedContentBounds = bounds; }
+    void setPaintedBoundsIncludingDescendantItems(const UnadjustedAbsoluteFloatRect& bounds) { m_paintedBoundsIncludingDescendantItems = bounds; }
 
     std::unique_ptr<BoxModelBox> m_box;
     StackingItemList m_negativeZOrderList;
     StackingItemList m_positiveZOrderList;
     
-    AbsoluteFloatRect m_paintedContentBounds;
-    AbsoluteFloatRect m_paintedBoundsIncludingDescendantItems;
+    UnadjustedAbsoluteFloatRect m_paintedContentBounds;
+    UnadjustedAbsoluteFloatRect m_paintedBoundsIncludingDescendantItems;
 };
 
 } // namespace Display

Modified: trunk/Source/WebCore/display/css/DisplayTextBox.cpp (281060 => 281061)


--- trunk/Source/WebCore/display/css/DisplayTextBox.cpp	2021-08-15 15:43:36 UTC (rev 281060)
+++ trunk/Source/WebCore/display/css/DisplayTextBox.cpp	2021-08-15 15:44:27 UTC (rev 281061)
@@ -36,7 +36,7 @@
 
 DEFINE_ALLOCATOR_WITH_HEAP_IDENTIFIER(TextBox);
 
-TextBox::TextBox(Tree& tree, AbsoluteFloatRect borderBox, Style&& displayStyle, const Layout::LineRun& lineRun)
+TextBox::TextBox(Tree& tree, UnadjustedAbsoluteFloatRect borderBox, Style&& displayStyle, const Layout::LineRun& lineRun)
     : Box(tree, borderBox, WTFMove(displayStyle), { TypeFlags::TextBox })
     , m_expansion(lineRun.expansion())
     , m_text(lineRun.text().value())

Modified: trunk/Source/WebCore/display/css/DisplayTextBox.h (281060 => 281061)


--- trunk/Source/WebCore/display/css/DisplayTextBox.h	2021-08-15 15:43:36 UTC (rev 281060)
+++ trunk/Source/WebCore/display/css/DisplayTextBox.h	2021-08-15 15:44:27 UTC (rev 281061)
@@ -38,7 +38,7 @@
 class TextBox : public Box {
     WTF_MAKE_FAST_ALLOCATED_WITH_HEAP_IDENTIFIER(TextBox);
 public:
-    TextBox(Tree&, AbsoluteFloatRect borderBox, Style&&, const Layout::LineRun&);
+    TextBox(Tree&, UnadjustedAbsoluteFloatRect borderBox, Style&&, const Layout::LineRun&);
 
     Layout::LineRun::Expansion expansion() const { return m_expansion; }
     const Layout::LineRun::Text& text() const { return m_text; }
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to