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; }