Title: [281239] trunk/Source/WebCore
Revision
281239
Author
[email protected]
Date
2021-08-19 08:51:31 -0700 (Thu, 19 Aug 2021)

Log Message

Use an OptionSet<MapCoordinatesMode> in place of MapCoordinatesFlags
https://bugs.webkit.org/show_bug.cgi?id=229170

Reviewed by Antti Koivisto.

Replace MapCoordinatesFlags with OptionSet<MapCoordinatesMode>. No behavior
change.

* html/HTMLAnchorElement.cpp:
(WebCore::appendServerMapMousePosition):
* rendering/RenderBox.cpp:
(WebCore::RenderBox::mapLocalToContainer const):
(WebCore::RenderBox::mapAbsoluteToLocalPoint const):
* rendering/RenderBox.h:
* rendering/RenderBoxModelObject.cpp:
(WebCore::RenderBoxModelObject::mapAbsoluteToLocalPoint const):
* rendering/RenderBoxModelObject.h:
* rendering/RenderFragmentedFlow.cpp:
(WebCore::RenderFragmentedFlow::mapLocalToContainer const):
* rendering/RenderFragmentedFlow.h:
* rendering/RenderGeometryMap.cpp:
(WebCore::RenderGeometryMap::RenderGeometryMap):
(WebCore::RenderGeometryMap::pushMappingsToAncestor):
* rendering/RenderGeometryMap.h:
(WebCore::RenderGeometryMap::mapCoordinatesFlags const):
* rendering/RenderInline.cpp:
(WebCore::RenderInline::mapLocalToContainer const):
* rendering/RenderInline.h:
* rendering/RenderMultiColumnFlow.cpp:
(WebCore::RenderMultiColumnFlow::mapAbsoluteToLocalPoint const):
* rendering/RenderMultiColumnFlow.h:
* rendering/RenderObject.cpp:
(WebCore::RenderObject::absoluteBoundingBoxRect const):
(WebCore::RenderObject::localToAbsolute const):
(WebCore::RenderObject::absoluteToLocal const):
(WebCore::RenderObject::absoluteToLocalQuad const):
(WebCore::RenderObject::mapLocalToContainer const):
(WebCore::RenderObject::mapAbsoluteToLocalPoint const):
(WebCore::RenderObject::localToContainerQuad const):
(WebCore::RenderObject::localToContainerPoint const):
* rendering/RenderObject.h:
(WebCore::RenderObject::localToAbsolute):
(WebCore::RenderObject::absoluteToLocal):
(WebCore::RenderObject::localToAbsoluteQuad const):
* rendering/RenderObjectEnums.h:
* rendering/RenderTheme.cpp:
(WebCore::RenderTheme::volumeSliderOffsetFromMuteButton const):
* rendering/RenderView.cpp:
(WebCore::RenderView::mapLocalToContainer const):
(WebCore::RenderView::mapAbsoluteToLocalPoint const):
* rendering/RenderView.h:
* rendering/svg/RenderSVGForeignObject.cpp:
(WebCore::RenderSVGForeignObject::mapLocalToContainer const):
* rendering/svg/RenderSVGForeignObject.h:
* rendering/svg/RenderSVGInline.cpp:
(WebCore::RenderSVGInline::mapLocalToContainer const):
* rendering/svg/RenderSVGInline.h:
* rendering/svg/RenderSVGModelObject.cpp:
(WebCore::RenderSVGModelObject::mapLocalToContainer const):
* rendering/svg/RenderSVGModelObject.h:
* rendering/svg/RenderSVGRoot.cpp:
(WebCore::RenderSVGRoot::mapLocalToContainer const):
* rendering/svg/RenderSVGRoot.h:
* rendering/svg/RenderSVGText.cpp:
(WebCore::RenderSVGText::mapLocalToContainer const):
* rendering/svg/RenderSVGText.h:
* rendering/svg/SVGRenderSupport.cpp:
(WebCore::SVGRenderSupport::mapLocalToContainer):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (281238 => 281239)


--- trunk/Source/WebCore/ChangeLog	2021-08-19 15:47:35 UTC (rev 281238)
+++ trunk/Source/WebCore/ChangeLog	2021-08-19 15:51:31 UTC (rev 281239)
@@ -1,5 +1,76 @@
 2021-08-19  Simon Fraser  <[email protected]>
 
+        Use an OptionSet<MapCoordinatesMode> in place of MapCoordinatesFlags
+        https://bugs.webkit.org/show_bug.cgi?id=229170
+
+        Reviewed by Antti Koivisto.
+
+        Replace MapCoordinatesFlags with OptionSet<MapCoordinatesMode>. No behavior
+        change.
+
+        * html/HTMLAnchorElement.cpp:
+        (WebCore::appendServerMapMousePosition):
+        * rendering/RenderBox.cpp:
+        (WebCore::RenderBox::mapLocalToContainer const):
+        (WebCore::RenderBox::mapAbsoluteToLocalPoint const):
+        * rendering/RenderBox.h:
+        * rendering/RenderBoxModelObject.cpp:
+        (WebCore::RenderBoxModelObject::mapAbsoluteToLocalPoint const):
+        * rendering/RenderBoxModelObject.h:
+        * rendering/RenderFragmentedFlow.cpp:
+        (WebCore::RenderFragmentedFlow::mapLocalToContainer const):
+        * rendering/RenderFragmentedFlow.h:
+        * rendering/RenderGeometryMap.cpp:
+        (WebCore::RenderGeometryMap::RenderGeometryMap):
+        (WebCore::RenderGeometryMap::pushMappingsToAncestor):
+        * rendering/RenderGeometryMap.h:
+        (WebCore::RenderGeometryMap::mapCoordinatesFlags const):
+        * rendering/RenderInline.cpp:
+        (WebCore::RenderInline::mapLocalToContainer const):
+        * rendering/RenderInline.h:
+        * rendering/RenderMultiColumnFlow.cpp:
+        (WebCore::RenderMultiColumnFlow::mapAbsoluteToLocalPoint const):
+        * rendering/RenderMultiColumnFlow.h:
+        * rendering/RenderObject.cpp:
+        (WebCore::RenderObject::absoluteBoundingBoxRect const):
+        (WebCore::RenderObject::localToAbsolute const):
+        (WebCore::RenderObject::absoluteToLocal const):
+        (WebCore::RenderObject::absoluteToLocalQuad const):
+        (WebCore::RenderObject::mapLocalToContainer const):
+        (WebCore::RenderObject::mapAbsoluteToLocalPoint const):
+        (WebCore::RenderObject::localToContainerQuad const):
+        (WebCore::RenderObject::localToContainerPoint const):
+        * rendering/RenderObject.h:
+        (WebCore::RenderObject::localToAbsolute):
+        (WebCore::RenderObject::absoluteToLocal):
+        (WebCore::RenderObject::localToAbsoluteQuad const):
+        * rendering/RenderObjectEnums.h:
+        * rendering/RenderTheme.cpp:
+        (WebCore::RenderTheme::volumeSliderOffsetFromMuteButton const):
+        * rendering/RenderView.cpp:
+        (WebCore::RenderView::mapLocalToContainer const):
+        (WebCore::RenderView::mapAbsoluteToLocalPoint const):
+        * rendering/RenderView.h:
+        * rendering/svg/RenderSVGForeignObject.cpp:
+        (WebCore::RenderSVGForeignObject::mapLocalToContainer const):
+        * rendering/svg/RenderSVGForeignObject.h:
+        * rendering/svg/RenderSVGInline.cpp:
+        (WebCore::RenderSVGInline::mapLocalToContainer const):
+        * rendering/svg/RenderSVGInline.h:
+        * rendering/svg/RenderSVGModelObject.cpp:
+        (WebCore::RenderSVGModelObject::mapLocalToContainer const):
+        * rendering/svg/RenderSVGModelObject.h:
+        * rendering/svg/RenderSVGRoot.cpp:
+        (WebCore::RenderSVGRoot::mapLocalToContainer const):
+        * rendering/svg/RenderSVGRoot.h:
+        * rendering/svg/RenderSVGText.cpp:
+        (WebCore::RenderSVGText::mapLocalToContainer const):
+        * rendering/svg/RenderSVGText.h:
+        * rendering/svg/SVGRenderSupport.cpp:
+        (WebCore::SVGRenderSupport::mapLocalToContainer):
+
+2021-08-19  Simon Fraser  <[email protected]>
+
         Remove duplicate LayerTreeAsText enums and use an OptionSet<>
         https://bugs.webkit.org/show_bug.cgi?id=229226
 

Modified: trunk/Source/WebCore/html/HTMLAnchorElement.cpp (281238 => 281239)


--- trunk/Source/WebCore/html/HTMLAnchorElement.cpp	2021-08-19 15:47:35 UTC (rev 281238)
+++ trunk/Source/WebCore/html/HTMLAnchorElement.cpp	2021-08-19 15:51:31 UTC (rev 281239)
@@ -171,7 +171,7 @@
     if (!is<RenderImage>(renderer))
         return;
 
-    // FIXME: This should probably pass UseTransforms in the MapCoordinatesFlags.
+    // FIXME: This should probably pass UseTransforms in the OptionSet<MapCoordinatesMode>.
     auto absolutePosition = downcast<RenderImage>(*renderer).absoluteToLocal(FloatPoint(mouseEvent.pageX(), mouseEvent.pageY()));
     url.append('?', std::lround(absolutePosition.x()), ',', std::lround(absolutePosition.y()));
 }

Modified: trunk/Source/WebCore/rendering/RenderBox.cpp (281238 => 281239)


--- trunk/Source/WebCore/rendering/RenderBox.cpp	2021-08-19 15:47:35 UTC (rev 281238)
+++ trunk/Source/WebCore/rendering/RenderBox.cpp	2021-08-19 15:51:31 UTC (rev 281239)
@@ -2222,7 +2222,7 @@
     return cb->adjustContentBoxLogicalHeightForBoxSizing(LayoutUnit(logicalHeightLength.value()));
 }
 
-void RenderBox::mapLocalToContainer(const RenderLayerModelObject* ancestorContainer, TransformState& transformState, MapCoordinatesFlags mode, bool* wasFixed) const
+void RenderBox::mapLocalToContainer(const RenderLayerModelObject* ancestorContainer, TransformState& transformState, OptionSet<MapCoordinatesMode> mode, bool* wasFixed) const
 {
     if (ancestorContainer == this)
         return;
@@ -2245,17 +2245,17 @@
     // If this box has a transform, it acts as a fixed position container for fixed descendants,
     // and may itself also be fixed position. So propagate 'fixed' up only if this box is fixed position.
     if (hasTransform() && !isFixedPos)
-        mode &= ~IsFixed;
+        mode.remove(IsFixed);
     else if (isFixedPos)
-        mode |= IsFixed;
+        mode.add(IsFixed);
 
     if (wasFixed)
-        *wasFixed = mode & IsFixed;
+        *wasFixed = mode.contains(IsFixed);
     
     LayoutSize containerOffset = offsetFromContainer(*container, LayoutPoint(transformState.mappedPoint()));
     
-    bool preserve3D = mode & UseTransforms && (container->style().preserves3D() || style().preserves3D());
-    if (mode & UseTransforms && shouldUseTransformFromContainer(container)) {
+    bool preserve3D = mode.contains(UseTransforms) && (container->style().preserves3D() || style().preserves3D());
+    if (mode.contains(UseTransforms) && shouldUseTransformFromContainer(container)) {
         TransformationMatrix t;
         getTransformFromContainer(container, containerOffset, t);
         transformState.applyTransform(t, preserve3D ? TransformState::AccumulateTransform : TransformState::FlattenTransform);
@@ -2270,7 +2270,7 @@
         return;
     }
 
-    mode &= ~ApplyContainerFlip;
+    mode.remove(ApplyContainerFlip);
 
     container->mapLocalToContainer(ancestorContainer, transformState, mode, wasFixed);
 }
@@ -2310,15 +2310,15 @@
     return ancestorSkipped ? ancestorToStopAt : container;
 }
 
-void RenderBox::mapAbsoluteToLocalPoint(MapCoordinatesFlags mode, TransformState& transformState) const
+void RenderBox::mapAbsoluteToLocalPoint(OptionSet<MapCoordinatesMode> mode, TransformState& transformState) const
 {
     bool isFixedPos = isFixedPositioned();
     if (hasTransform() && !isFixedPos) {
         // If this box has a transform, it acts as a fixed position container for fixed descendants,
         // and may itself also be fixed position. So propagate 'fixed' up only if this box is fixed position.
-        mode &= ~IsFixed;
+        mode.remove(IsFixed);
     } else if (isFixedPos)
-        mode |= IsFixed;
+        mode.add(IsFixed);
 
     RenderBoxModelObject::mapAbsoluteToLocalPoint(mode, transformState);
 }

Modified: trunk/Source/WebCore/rendering/RenderBox.h (281238 => 281239)


--- trunk/Source/WebCore/rendering/RenderBox.h	2021-08-19 15:47:35 UTC (rev 281238)
+++ trunk/Source/WebCore/rendering/RenderBox.h	2021-08-19 15:51:31 UTC (rev 281239)
@@ -697,9 +697,9 @@
     
     virtual bool shouldComputeSizeAsReplaced() const { return isReplaced() && !isInlineBlockOrInlineTable(); }
 
-    void mapLocalToContainer(const RenderLayerModelObject* ancestorContainer, TransformState&, MapCoordinatesFlags, bool* wasFixed) const override;
+    void mapLocalToContainer(const RenderLayerModelObject* ancestorContainer, TransformState&, OptionSet<MapCoordinatesMode>, bool* wasFixed) const override;
     const RenderObject* pushMappingToContainer(const RenderLayerModelObject*, RenderGeometryMap&) const override;
-    void mapAbsoluteToLocalPoint(MapCoordinatesFlags, TransformState&) const override;
+    void mapAbsoluteToLocalPoint(OptionSet<MapCoordinatesMode>, TransformState&) const override;
 
     void paintRootBoxFillLayers(const PaintInfo&);
 

Modified: trunk/Source/WebCore/rendering/RenderBoxModelObject.cpp (281238 => 281239)


--- trunk/Source/WebCore/rendering/RenderBoxModelObject.cpp	2021-08-19 15:47:35 UTC (rev 281238)
+++ trunk/Source/WebCore/rendering/RenderBoxModelObject.cpp	2021-08-19 15:51:31 UTC (rev 281239)
@@ -2641,7 +2641,7 @@
     return !context.getCTM().isIdentityOrTranslationOrFlipped();
 }
 
-void RenderBoxModelObject::mapAbsoluteToLocalPoint(MapCoordinatesFlags mode, TransformState& transformState) const
+void RenderBoxModelObject::mapAbsoluteToLocalPoint(OptionSet<MapCoordinatesMode> mode, TransformState& transformState) const
 {
     RenderElement* container = this->container();
     if (!container)
@@ -2651,8 +2651,8 @@
 
     LayoutSize containerOffset = offsetFromContainer(*container, LayoutPoint());
 
-    bool preserve3D = mode & UseTransforms && (container->style().preserves3D() || style().preserves3D());
-    if (mode & UseTransforms && shouldUseTransformFromContainer(container)) {
+    bool preserve3D = mode.contains(UseTransforms) && (container->style().preserves3D() || style().preserves3D());
+    if (mode.contains(UseTransforms) && shouldUseTransformFromContainer(container)) {
         TransformationMatrix t;
         getTransformFromContainer(container, containerOffset, t);
         transformState.applyTransform(t, preserve3D ? TransformState::AccumulateTransform : TransformState::FlattenTransform);

Modified: trunk/Source/WebCore/rendering/RenderBoxModelObject.h (281238 => 281239)


--- trunk/Source/WebCore/rendering/RenderBoxModelObject.h	2021-08-19 15:47:35 UTC (rev 281238)
+++ trunk/Source/WebCore/rendering/RenderBoxModelObject.h	2021-08-19 15:51:31 UTC (rev 281239)
@@ -218,7 +218,7 @@
     virtual LayoutUnit lineHeight(bool firstLine, LineDirectionMode, LinePositionMode = PositionOnContainingLine) const = 0;
     virtual LayoutUnit baselinePosition(FontBaseline, bool firstLine, LineDirectionMode, LinePositionMode = PositionOnContainingLine) const = 0;
 
-    void mapAbsoluteToLocalPoint(MapCoordinatesFlags, TransformState&) const override;
+    void mapAbsoluteToLocalPoint(OptionSet<MapCoordinatesMode>, TransformState&) const override;
 
     void setSelectionState(HighlightState) override;
 

Modified: trunk/Source/WebCore/rendering/RenderFragmentedFlow.cpp (281238 => 281239)


--- trunk/Source/WebCore/rendering/RenderFragmentedFlow.cpp	2021-08-19 15:47:35 UTC (rev 281238)
+++ trunk/Source/WebCore/rendering/RenderFragmentedFlow.cpp	2021-08-19 15:51:31 UTC (rev 281239)
@@ -937,7 +937,7 @@
     return currentBlock->isHorizontalWritingMode() ? blockRect.y() : blockRect.x();
 }
 
-void RenderFragmentedFlow::mapLocalToContainer(const RenderLayerModelObject* ancestorContainer, TransformState& transformState, MapCoordinatesFlags mode, bool* wasFixed) const
+void RenderFragmentedFlow::mapLocalToContainer(const RenderLayerModelObject* ancestorContainer, TransformState& transformState, OptionSet<MapCoordinatesMode> mode, bool* wasFixed) const
 {
     if (this == ancestorContainer)
         return;

Modified: trunk/Source/WebCore/rendering/RenderFragmentedFlow.h (281238 => 281239)


--- trunk/Source/WebCore/rendering/RenderFragmentedFlow.h	2021-08-19 15:47:35 UTC (rev 281238)
+++ trunk/Source/WebCore/rendering/RenderFragmentedFlow.h	2021-08-19 15:51:31 UTC (rev 281239)
@@ -195,7 +195,7 @@
     void clearLinesToFragmentMap();
     void willBeDestroyed() override;
 
-    void mapLocalToContainer(const RenderLayerModelObject* ancestorContainer, TransformState&, MapCoordinatesFlags, bool* wasFixed) const override;
+    void mapLocalToContainer(const RenderLayerModelObject* ancestorContainer, TransformState&, OptionSet<MapCoordinatesMode>, bool* wasFixed) const override;
 
     void updateFragmentsFragmentedFlowPortionRect();
     bool shouldRepaint(const LayoutRect&) const;

Modified: trunk/Source/WebCore/rendering/RenderGeometryMap.cpp (281238 => 281239)


--- trunk/Source/WebCore/rendering/RenderGeometryMap.cpp	2021-08-19 15:47:35 UTC (rev 281238)
+++ trunk/Source/WebCore/rendering/RenderGeometryMap.cpp	2021-08-19 15:51:31 UTC (rev 281239)
@@ -34,12 +34,8 @@
 
 namespace WebCore {
 
-RenderGeometryMap::RenderGeometryMap(MapCoordinatesFlags flags)
-    : m_insertionPosition(notFound)
-    , m_nonUniformStepsCount(0)
-    , m_transformedStepsCount(0)
-    , m_fixedStepsCount(0)
-    , m_mapCoordinatesFlags(flags)
+RenderGeometryMap::RenderGeometryMap(OptionSet<MapCoordinatesMode> flags)
+    : m_mapCoordinatesFlags(flags)
 {
 }
 
@@ -172,9 +168,12 @@
 
 void RenderGeometryMap::pushMappingsToAncestor(const RenderLayer* layer, const RenderLayer* ancestorLayer, bool respectTransforms)
 {
-    MapCoordinatesFlags newFlags = respectTransforms ? m_mapCoordinatesFlags : m_mapCoordinatesFlags & ~UseTransforms;
-    SetForScope<MapCoordinatesFlags> flagsChange(m_mapCoordinatesFlags, newFlags);
+    OptionSet<MapCoordinatesMode> newFlags = m_mapCoordinatesFlags;
+    if (!respectTransforms)
+        newFlags.remove(UseTransforms);
 
+    SetForScope<OptionSet<MapCoordinatesMode>> flagsChange(m_mapCoordinatesFlags, newFlags);
+
     const RenderLayerModelObject& renderer = layer->renderer();
 
     // We have to visit all the renderers to detect flipped blocks. This might defeat the gains

Modified: trunk/Source/WebCore/rendering/RenderGeometryMap.h (281238 => 281239)


--- trunk/Source/WebCore/rendering/RenderGeometryMap.h	2021-08-19 15:47:35 UTC (rev 281238)
+++ trunk/Source/WebCore/rendering/RenderGeometryMap.h	2021-08-19 15:51:31 UTC (rev 281239)
@@ -73,10 +73,10 @@
 class RenderGeometryMap {
     WTF_MAKE_NONCOPYABLE(RenderGeometryMap);
 public:
-    explicit RenderGeometryMap(MapCoordinatesFlags = UseTransforms);
+    explicit RenderGeometryMap(OptionSet<MapCoordinatesMode> = UseTransforms);
     ~RenderGeometryMap();
 
-    MapCoordinatesFlags mapCoordinatesFlags() const { return m_mapCoordinatesFlags; }
+    OptionSet<MapCoordinatesMode> mapCoordinatesFlags() const { return m_mapCoordinatesFlags; }
 
     FloatPoint absolutePoint(const FloatPoint& p) const
     {
@@ -123,13 +123,13 @@
 
     typedef Vector<RenderGeometryMapStep, 32> RenderGeometryMapSteps;
 
-    size_t m_insertionPosition;
-    int m_nonUniformStepsCount;
-    int m_transformedStepsCount;
-    int m_fixedStepsCount;
+    size_t m_insertionPosition { notFound };
+    int m_nonUniformStepsCount { 0 };
+    int m_transformedStepsCount { 0 };
+    int m_fixedStepsCount { 0 };
     RenderGeometryMapSteps m_mapping;
     LayoutSize m_accumulatedOffset;
-    MapCoordinatesFlags m_mapCoordinatesFlags;
+    OptionSet<MapCoordinatesMode> m_mapCoordinatesFlags;
 #if ASSERT_ENABLED
     bool m_accumulatedOffsetMightBeSaturated { false };
 #endif

Modified: trunk/Source/WebCore/rendering/RenderInline.cpp (281238 => 281239)


--- trunk/Source/WebCore/rendering/RenderInline.cpp	2021-08-19 15:47:35 UTC (rev 281238)
+++ trunk/Source/WebCore/rendering/RenderInline.cpp	2021-08-19 15:51:31 UTC (rev 281239)
@@ -994,7 +994,7 @@
     return offset;
 }
 
-void RenderInline::mapLocalToContainer(const RenderLayerModelObject* ancestorContainer, TransformState& transformState, MapCoordinatesFlags mode, bool* wasFixed) const
+void RenderInline::mapLocalToContainer(const RenderLayerModelObject* ancestorContainer, TransformState& transformState, OptionSet<MapCoordinatesMode> mode, bool* wasFixed) const
 {
     if (ancestorContainer == this)
         return;
@@ -1013,18 +1013,18 @@
     if (!container)
         return;
 
-    if (mode & ApplyContainerFlip && is<RenderBox>(*container)) {
+    if (mode.contains(ApplyContainerFlip) && is<RenderBox>(*container)) {
         if (container->style().isFlippedBlocksWritingMode()) {
             LayoutPoint centerPoint(transformState.mappedPoint());
             transformState.move(downcast<RenderBox>(*container).flipForWritingMode(centerPoint) - centerPoint);
         }
-        mode &= ~ApplyContainerFlip;
+        mode.remove(ApplyContainerFlip);
     }
 
     LayoutSize containerOffset = offsetFromContainer(*container, LayoutPoint(transformState.mappedPoint()));
 
-    bool preserve3D = mode & UseTransforms && (container->style().preserves3D() || style().preserves3D());
-    if (mode & UseTransforms && shouldUseTransformFromContainer(container)) {
+    bool preserve3D = mode.contains(UseTransforms) && (container->style().preserves3D() || style().preserves3D());
+    if (mode.contains(UseTransforms) && shouldUseTransformFromContainer(container)) {
         TransformationMatrix t;
         getTransformFromContainer(container, containerOffset, t);
         transformState.applyTransform(t, preserve3D ? TransformState::AccumulateTransform : TransformState::FlattenTransform);

Modified: trunk/Source/WebCore/rendering/RenderInline.h (281238 => 281239)


--- trunk/Source/WebCore/rendering/RenderInline.h	2021-08-19 15:47:35 UTC (rev 281238)
+++ trunk/Source/WebCore/rendering/RenderInline.h	2021-08-19 15:51:31 UTC (rev 281239)
@@ -132,7 +132,7 @@
     std::optional<LayoutRect> computeVisibleRectInContainer(const LayoutRect&, const RenderLayerModelObject* container, VisibleRectContext) const final;
     LayoutRect computeVisibleRectUsingPaintOffset(const LayoutRect&) const;
 
-    void mapLocalToContainer(const RenderLayerModelObject* repaintContainer, TransformState&, MapCoordinatesFlags, bool* wasFixed) const override;
+    void mapLocalToContainer(const RenderLayerModelObject* repaintContainer, TransformState&, OptionSet<MapCoordinatesMode>, bool* wasFixed) const override;
     const RenderObject* pushMappingToContainer(const RenderLayerModelObject* ancestorToStopAt, RenderGeometryMap&) const override;
 
     VisiblePosition positionForPoint(const LayoutPoint&, const RenderFragmentContainer*) final;

Modified: trunk/Source/WebCore/rendering/RenderMultiColumnFlow.cpp (281238 => 281239)


--- trunk/Source/WebCore/rendering/RenderMultiColumnFlow.cpp	2021-08-19 15:47:35 UTC (rev 281238)
+++ trunk/Source/WebCore/rendering/RenderMultiColumnFlow.cpp	2021-08-19 15:51:31 UTC (rev 281239)
@@ -282,7 +282,7 @@
     return offset;
 }
     
-void RenderMultiColumnFlow::mapAbsoluteToLocalPoint(MapCoordinatesFlags mode, TransformState& transformState) const
+void RenderMultiColumnFlow::mapAbsoluteToLocalPoint(OptionSet<MapCoordinatesMode> mode, TransformState& transformState) const
 {
     // First get the transform state's point into the block flow thread's physical coordinate space.
     parent()->mapAbsoluteToLocalPoint(mode, transformState);
@@ -309,8 +309,8 @@
     // Once we have a good guess as to which fragment we hit tested through (and yes, this was just a heuristic, but it's
     // the best we could do), then we can map from the fragment into the flow thread.
     LayoutSize translationOffset = physicalTranslationFromFragmentToFlow(candidateColumnSet, candidatePoint) + candidateContainerOffset;
-    bool preserve3D = mode & UseTransforms && (parent()->style().preserves3D() || style().preserves3D());
-    if (mode & UseTransforms && shouldUseTransformFromContainer(parent())) {
+    bool preserve3D = mode.contains(UseTransforms) && (parent()->style().preserves3D() || style().preserves3D());
+    if (mode.contains(UseTransforms) && shouldUseTransformFromContainer(parent())) {
         TransformationMatrix t;
         getTransformFromContainer(parent(), translationOffset, t);
         transformState.applyTransform(t, preserve3D ? TransformState::AccumulateTransform : TransformState::FlattenTransform);

Modified: trunk/Source/WebCore/rendering/RenderMultiColumnFlow.h (281238 => 281239)


--- trunk/Source/WebCore/rendering/RenderMultiColumnFlow.h	2021-08-19 15:47:35 UTC (rev 281238)
+++ trunk/Source/WebCore/rendering/RenderMultiColumnFlow.h	2021-08-19 15:51:31 UTC (rev 281239)
@@ -89,7 +89,7 @@
     
     bool nodeAtPoint(const HitTestRequest&, HitTestResult&, const HitTestLocation& locationInContainer, const LayoutPoint& accumulatedOffset, HitTestAction) override;
     
-    void mapAbsoluteToLocalPoint(MapCoordinatesFlags, TransformState&) const override;
+    void mapAbsoluteToLocalPoint(OptionSet<MapCoordinatesMode>, TransformState&) const override;
     LayoutSize offsetFromContainer(RenderElement&, const LayoutPoint&, bool* offsetDependsOnPoint = nullptr) const override;
     
     // FIXME: Eventually as column and fragment flow threads start nesting, this will end up changing.

Modified: trunk/Source/WebCore/rendering/RenderObject.cpp (281238 => 281239)


--- trunk/Source/WebCore/rendering/RenderObject.cpp	2021-08-19 15:47:35 UTC (rev 281238)
+++ trunk/Source/WebCore/rendering/RenderObject.cpp	2021-08-19 15:51:31 UTC (rev 281239)
@@ -751,7 +751,7 @@
         return enclosingIntRect(unitedBoundingBoxes(quads));
     }
 
-    FloatPoint absPos = localToAbsolute(FloatPoint(), 0 /* ignore transforms */, wasFixed);
+    FloatPoint absPos = localToAbsolute(FloatPoint(), { } /* ignore transforms */, wasFixed);
     Vector<IntRect> rects;
     absoluteRects(rects, flooredLayoutPoint(absPos));
 
@@ -1286,7 +1286,7 @@
 
 #endif // NDEBUG
 
-FloatPoint RenderObject::localToAbsolute(const FloatPoint& localPoint, MapCoordinatesFlags mode, bool* wasFixed) const
+FloatPoint RenderObject::localToAbsolute(const FloatPoint& localPoint, OptionSet<MapCoordinatesMode> mode, bool* wasFixed) const
 {
     TransformState transformState(TransformState::ApplyTransformDirection, localPoint);
     mapLocalToContainer(nullptr, transformState, mode | ApplyContainerFlip, wasFixed);
@@ -1295,7 +1295,7 @@
     return transformState.lastPlanarPoint();
 }
 
-FloatPoint RenderObject::absoluteToLocal(const FloatPoint& containerPoint, MapCoordinatesFlags mode) const
+FloatPoint RenderObject::absoluteToLocal(const FloatPoint& containerPoint, OptionSet<MapCoordinatesMode> mode) const
 {
     TransformState transformState(TransformState::UnapplyInverseTransformDirection, containerPoint);
     mapAbsoluteToLocalPoint(mode, transformState);
@@ -1304,7 +1304,7 @@
     return transformState.lastPlanarPoint();
 }
 
-FloatQuad RenderObject::absoluteToLocalQuad(const FloatQuad& quad, MapCoordinatesFlags mode) const
+FloatQuad RenderObject::absoluteToLocalQuad(const FloatQuad& quad, OptionSet<MapCoordinatesMode> mode) const
 {
     TransformState transformState(TransformState::UnapplyInverseTransformDirection, quad.boundingBox().center(), quad);
     mapAbsoluteToLocalPoint(mode, transformState);
@@ -1312,7 +1312,7 @@
     return transformState.lastPlanarQuad();
 }
 
-void RenderObject::mapLocalToContainer(const RenderLayerModelObject* ancestorContainer, TransformState& transformState, MapCoordinatesFlags mode, bool* wasFixed) const
+void RenderObject::mapLocalToContainer(const RenderLayerModelObject* ancestorContainer, TransformState& transformState, OptionSet<MapCoordinatesMode> mode, bool* wasFixed) const
 {
     if (ancestorContainer == this)
         return;
@@ -1323,10 +1323,10 @@
 
     // FIXME: this should call offsetFromContainer to share code, but I'm not sure it's ever called.
     LayoutPoint centerPoint(transformState.mappedPoint());
-    if (mode & ApplyContainerFlip && is<RenderBox>(*parent)) {
+    if (mode.contains(ApplyContainerFlip) && is<RenderBox>(*parent)) {
         if (parent->style().isFlippedBlocksWritingMode())
             transformState.move(downcast<RenderBox>(parent)->flipForWritingMode(LayoutPoint(transformState.mappedPoint())) - centerPoint);
-        mode &= ~ApplyContainerFlip;
+        mode.remove(ApplyContainerFlip);
     }
 
     if (is<RenderBox>(*parent))
@@ -1353,7 +1353,7 @@
     return container;
 }
 
-void RenderObject::mapAbsoluteToLocalPoint(MapCoordinatesFlags mode, TransformState& transformState) const
+void RenderObject::mapAbsoluteToLocalPoint(OptionSet<MapCoordinatesMode> mode, TransformState& transformState) const
 {
     if (auto* parent = this->parent()) {
         parent->mapAbsoluteToLocalPoint(mode, transformState);
@@ -1398,7 +1398,7 @@
 #endif
 }
 
-FloatQuad RenderObject::localToContainerQuad(const FloatQuad& localQuad, const RenderLayerModelObject* container, MapCoordinatesFlags mode, bool* wasFixed) const
+FloatQuad RenderObject::localToContainerQuad(const FloatQuad& localQuad, const RenderLayerModelObject* container, OptionSet<MapCoordinatesMode> mode, bool* wasFixed) const
 {
     // Track the point at the center of the quad's bounding box. As mapLocalToContainer() calls offsetFromContainer(),
     // it will use that point as the reference point to decide which column's transform to apply in multiple-column blocks.
@@ -1409,7 +1409,7 @@
     return transformState.lastPlanarQuad();
 }
 
-FloatPoint RenderObject::localToContainerPoint(const FloatPoint& localPoint, const RenderLayerModelObject* container, MapCoordinatesFlags mode, bool* wasFixed) const
+FloatPoint RenderObject::localToContainerPoint(const FloatPoint& localPoint, const RenderLayerModelObject* container, OptionSet<MapCoordinatesMode> mode, bool* wasFixed) const
 {
     TransformState transformState(TransformState::ApplyTransformDirection, localPoint);
     mapLocalToContainer(container, transformState, mode | ApplyContainerFlip, wasFixed);

Modified: trunk/Source/WebCore/rendering/RenderObject.h (281238 => 281239)


--- trunk/Source/WebCore/rendering/RenderObject.h	2021-08-19 15:47:35 UTC (rev 281238)
+++ trunk/Source/WebCore/rendering/RenderObject.h	2021-08-19 15:51:31 UTC (rev 281239)
@@ -529,18 +529,18 @@
     WEBCORE_EXPORT RenderBlock* containingBlock() const;
     RenderBlock* containingBlockForObjectInFlow() const;
 
-    // Convert the given local point to absolute coordinates. If MapCoordinatesFlags includes UseTransforms, take transforms into account.
-    WEBCORE_EXPORT FloatPoint localToAbsolute(const FloatPoint& localPoint = FloatPoint(), MapCoordinatesFlags = 0, bool* wasFixed = nullptr) const;
-    FloatPoint absoluteToLocal(const FloatPoint&, MapCoordinatesFlags = 0) const;
+    // Convert the given local point to absolute coordinates. If OptionSet<MapCoordinatesMode> includes UseTransforms, take transforms into account.
+    WEBCORE_EXPORT FloatPoint localToAbsolute(const FloatPoint& localPoint = FloatPoint(), OptionSet<MapCoordinatesMode> = { }, bool* wasFixed = nullptr) const;
+    FloatPoint absoluteToLocal(const FloatPoint&, OptionSet<MapCoordinatesMode> = { }) const;
 
     // Convert a local quad to absolute coordinates, taking transforms into account.
-    FloatQuad localToAbsoluteQuad(const FloatQuad&, MapCoordinatesFlags = UseTransforms, bool* wasFixed = nullptr) const;
+    FloatQuad localToAbsoluteQuad(const FloatQuad&, OptionSet<MapCoordinatesMode> = UseTransforms, bool* wasFixed = nullptr) const;
     // Convert an absolute quad to local coordinates.
-    FloatQuad absoluteToLocalQuad(const FloatQuad&, MapCoordinatesFlags = UseTransforms) const;
+    FloatQuad absoluteToLocalQuad(const FloatQuad&, OptionSet<MapCoordinatesMode> = UseTransforms) const;
 
     // Convert a local quad into the coordinate system of container, taking transforms into account.
-    WEBCORE_EXPORT FloatQuad localToContainerQuad(const FloatQuad&, const RenderLayerModelObject* container, MapCoordinatesFlags = UseTransforms, bool* wasFixed = nullptr) const;
-    WEBCORE_EXPORT FloatPoint localToContainerPoint(const FloatPoint&, const RenderLayerModelObject* container, MapCoordinatesFlags = UseTransforms, bool* wasFixed = nullptr) const;
+    WEBCORE_EXPORT FloatQuad localToContainerQuad(const FloatQuad&, const RenderLayerModelObject* container, OptionSet<MapCoordinatesMode> = UseTransforms, bool* wasFixed = nullptr) const;
+    WEBCORE_EXPORT FloatPoint localToContainerPoint(const FloatPoint&, const RenderLayerModelObject* container, OptionSet<MapCoordinatesMode> = UseTransforms, bool* wasFixed = nullptr) const;
 
     // Return the offset from the container() renderer (excluding transforms). In multi-column layout,
     // different offsets apply at different points, so return the offset that applies to the given point.
@@ -711,8 +711,8 @@
 
     // Map points and quads through elements, potentially via 3d transforms. You should never need to call these directly; use
     // localToAbsolute/absoluteToLocal methods instead.
-    virtual void mapLocalToContainer(const RenderLayerModelObject* repaintContainer, TransformState&, MapCoordinatesFlags, bool* wasFixed = nullptr) const;
-    virtual void mapAbsoluteToLocalPoint(MapCoordinatesFlags, TransformState&) const;
+    virtual void mapLocalToContainer(const RenderLayerModelObject* repaintContainer, TransformState&, OptionSet<MapCoordinatesMode>, bool* wasFixed = nullptr) const;
+    virtual void mapAbsoluteToLocalPoint(OptionSet<MapCoordinatesMode>, TransformState&) const;
 
     // Pushes state onto RenderGeometryMap about how to map coordinates from this renderer to its container, or ancestorToStopAt (whichever is encountered first).
     // Returns the renderer which was mapped to (container or ancestorToStopAt).
@@ -1133,7 +1133,7 @@
     m_bitfields.setPositionedState(static_cast<int>(position));
 }
 
-inline FloatQuad RenderObject::localToAbsoluteQuad(const FloatQuad& quad, MapCoordinatesFlags mode, bool* wasFixed) const
+inline FloatQuad RenderObject::localToAbsoluteQuad(const FloatQuad& quad, OptionSet<MapCoordinatesMode> mode, bool* wasFixed) const
 {
     return localToContainerQuad(quad, nullptr, mode, wasFixed);
 }

Modified: trunk/Source/WebCore/rendering/RenderObjectEnums.h (281238 => 281239)


--- trunk/Source/WebCore/rendering/RenderObjectEnums.h	2021-08-19 15:47:35 UTC (rev 281238)
+++ trunk/Source/WebCore/rendering/RenderObjectEnums.h	2021-08-19 15:51:31 UTC (rev 281239)
@@ -59,6 +59,5 @@
     UseTransforms       = 1 << 1,
     ApplyContainerFlip  = 1 << 2
 };
-typedef unsigned MapCoordinatesFlags;
 
 }

Modified: trunk/Source/WebCore/rendering/RenderTheme.cpp (281238 => 281239)


--- trunk/Source/WebCore/rendering/RenderTheme.cpp	2021-08-19 15:47:35 UTC (rev 281238)
+++ trunk/Source/WebCore/rendering/RenderTheme.cpp	2021-08-19 15:51:31 UTC (rev 281239)
@@ -595,7 +595,7 @@
 LayoutPoint RenderTheme::volumeSliderOffsetFromMuteButton(const RenderBox& muteButtonBox, const LayoutSize& size) const
 {
     LayoutUnit y = -size.height();
-    FloatPoint absPoint = muteButtonBox.localToAbsolute(FloatPoint(muteButtonBox.offsetLeft(), y), IsFixed | UseTransforms);
+    FloatPoint absPoint = muteButtonBox.localToAbsolute(FloatPoint(muteButtonBox.offsetLeft(), y), { IsFixed, UseTransforms });
     if (absPoint.y() < 0)
         y = muteButtonBox.height();
     return LayoutPoint(0_lu, y);

Modified: trunk/Source/WebCore/rendering/RenderView.cpp (281238 => 281239)


--- trunk/Source/WebCore/rendering/RenderView.cpp	2021-08-19 15:47:35 UTC (rev 281238)
+++ trunk/Source/WebCore/rendering/RenderView.cpp	2021-08-19 15:51:31 UTC (rev 281239)
@@ -237,17 +237,17 @@
     return clientLogicalHeight();
 }
 
-void RenderView::mapLocalToContainer(const RenderLayerModelObject* ancestorContainer, TransformState& transformState, MapCoordinatesFlags mode, bool* wasFixed) const
+void RenderView::mapLocalToContainer(const RenderLayerModelObject* ancestorContainer, TransformState& transformState, OptionSet<MapCoordinatesMode> mode, bool* wasFixed) const
 {
     // If a container was specified, and was not nullptr or the RenderView,
     // then we should have found it by now.
     ASSERT_ARG(ancestorContainer, !ancestorContainer || ancestorContainer == this);
-    ASSERT_UNUSED(wasFixed, !wasFixed || *wasFixed == (mode & IsFixed));
+    ASSERT_UNUSED(wasFixed, !wasFixed || *wasFixed == (mode.contains(IsFixed)));
 
-    if (mode & IsFixed)
+    if (mode.contains(IsFixed))
         transformState.move(toLayoutSize(frameView().scrollPositionRespectingCustomFixedPosition()));
 
-    if (!ancestorContainer && mode & UseTransforms && shouldUseTransformFromContainer(nullptr)) {
+    if (!ancestorContainer && mode.contains(UseTransforms) && shouldUseTransformFromContainer(nullptr)) {
         TransformationMatrix t;
         getTransformFromContainer(nullptr, LayoutSize(), t);
         transformState.applyTransform(t);
@@ -272,7 +272,7 @@
     return nullptr;
 }
 
-void RenderView::mapAbsoluteToLocalPoint(MapCoordinatesFlags mode, TransformState& transformState) const
+void RenderView::mapAbsoluteToLocalPoint(OptionSet<MapCoordinatesMode> mode, TransformState& transformState) const
 {
     if (mode & UseTransforms && shouldUseTransformFromContainer(nullptr)) {
         TransformationMatrix t;

Modified: trunk/Source/WebCore/rendering/RenderView.h (281238 => 281239)


--- trunk/Source/WebCore/rendering/RenderView.h	2021-08-19 15:47:35 UTC (rev 281238)
+++ trunk/Source/WebCore/rendering/RenderView.h	2021-08-19 15:51:31 UTC (rev 281239)
@@ -200,9 +200,9 @@
     const HashSet<const RenderBox*>& boxesWithScrollSnapPositions() { return m_boxesWithScrollSnapPositions; }
 
 private:
-    void mapLocalToContainer(const RenderLayerModelObject* repaintContainer, TransformState&, MapCoordinatesFlags, bool* wasFixed) const override;
+    void mapLocalToContainer(const RenderLayerModelObject* repaintContainer, TransformState&, OptionSet<MapCoordinatesMode>, bool* wasFixed) const override;
     const RenderObject* pushMappingToContainer(const RenderLayerModelObject* ancestorToStopAt, RenderGeometryMap&) const override;
-    void mapAbsoluteToLocalPoint(MapCoordinatesFlags, TransformState&) const override;
+    void mapAbsoluteToLocalPoint(OptionSet<MapCoordinatesMode>, TransformState&) const override;
     bool requiresColumns(int desiredColumnCount) const override;
 
     void computeColumnCountAndWidth() override;

Modified: trunk/Source/WebCore/rendering/svg/RenderSVGForeignObject.cpp (281238 => 281239)


--- trunk/Source/WebCore/rendering/svg/RenderSVGForeignObject.cpp	2021-08-19 15:47:35 UTC (rev 281238)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGForeignObject.cpp	2021-08-19 15:51:31 UTC (rev 281239)
@@ -204,7 +204,7 @@
     return false;
 }
 
-void RenderSVGForeignObject::mapLocalToContainer(const RenderLayerModelObject* ancestorContainer, TransformState& transformState, MapCoordinatesFlags, bool* wasFixed) const
+void RenderSVGForeignObject::mapLocalToContainer(const RenderLayerModelObject* ancestorContainer, TransformState& transformState, OptionSet<MapCoordinatesMode>, bool* wasFixed) const
 {
     SVGRenderSupport::mapLocalToContainer(*this, ancestorContainer, transformState, wasFixed);
 }

Modified: trunk/Source/WebCore/rendering/svg/RenderSVGForeignObject.h (281238 => 281239)


--- trunk/Source/WebCore/rendering/svg/RenderSVGForeignObject.h	2021-08-19 15:47:35 UTC (rev 281238)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGForeignObject.h	2021-08-19 15:51:31 UTC (rev 281239)
@@ -53,7 +53,7 @@
     bool nodeAtFloatPoint(const HitTestRequest&, HitTestResult&, const FloatPoint& pointInParent, HitTestAction) override;
     bool nodeAtPoint(const HitTestRequest&, HitTestResult&, const HitTestLocation& locationInContainer, const LayoutPoint& accumulatedOffset, HitTestAction) override;
 
-    void mapLocalToContainer(const RenderLayerModelObject* ancestorContainer, TransformState&, MapCoordinatesFlags, bool* wasFixed) const override;
+    void mapLocalToContainer(const RenderLayerModelObject* ancestorContainer, TransformState&, OptionSet<MapCoordinatesMode>, bool* wasFixed) const override;
     const RenderObject* pushMappingToContainer(const RenderLayerModelObject* ancestorToStopAt, RenderGeometryMap&) const override;
     void setNeedsTransformUpdate() override { m_needsTransformUpdate = true; }
 

Modified: trunk/Source/WebCore/rendering/svg/RenderSVGInline.cpp (281238 => 281239)


--- trunk/Source/WebCore/rendering/svg/RenderSVGInline.cpp	2021-08-19 15:47:35 UTC (rev 281238)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGInline.cpp	2021-08-19 15:51:31 UTC (rev 281239)
@@ -80,7 +80,7 @@
     return SVGRenderSupport::computeFloatVisibleRectInContainer(*this, rect, container, context);
 }
 
-void RenderSVGInline::mapLocalToContainer(const RenderLayerModelObject* ancestorContainer, TransformState& transformState, MapCoordinatesFlags, bool* wasFixed) const
+void RenderSVGInline::mapLocalToContainer(const RenderLayerModelObject* ancestorContainer, TransformState& transformState, OptionSet<MapCoordinatesMode>, bool* wasFixed) const
 {
     SVGRenderSupport::mapLocalToContainer(*this, ancestorContainer, transformState, wasFixed);
 }

Modified: trunk/Source/WebCore/rendering/svg/RenderSVGInline.h (281238 => 281239)


--- trunk/Source/WebCore/rendering/svg/RenderSVGInline.h	2021-08-19 15:47:35 UTC (rev 281238)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGInline.h	2021-08-19 15:51:31 UTC (rev 281239)
@@ -52,7 +52,7 @@
 
     LayoutRect clippedOverflowRect(const RenderLayerModelObject* repaintContainer, VisibleRectContext) const final;
     std::optional<FloatRect> computeFloatVisibleRectInContainer(const FloatRect&, const RenderLayerModelObject* container, VisibleRectContext) const final;
-    void mapLocalToContainer(const RenderLayerModelObject* ancestorContainer, TransformState&, MapCoordinatesFlags, bool* wasFixed) const final;
+    void mapLocalToContainer(const RenderLayerModelObject* ancestorContainer, TransformState&, OptionSet<MapCoordinatesMode>, bool* wasFixed) const final;
     const RenderObject* pushMappingToContainer(const RenderLayerModelObject* ancestorToStopAt, RenderGeometryMap&) const final;
     void absoluteQuads(Vector<FloatQuad>&, bool* wasFixed) const final;
 

Modified: trunk/Source/WebCore/rendering/svg/RenderSVGModelObject.cpp (281238 => 281239)


--- trunk/Source/WebCore/rendering/svg/RenderSVGModelObject.cpp	2021-08-19 15:47:35 UTC (rev 281238)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGModelObject.cpp	2021-08-19 15:51:31 UTC (rev 281239)
@@ -57,7 +57,7 @@
     return SVGRenderSupport::computeFloatVisibleRectInContainer(*this, rect, container, context);
 }
 
-void RenderSVGModelObject::mapLocalToContainer(const RenderLayerModelObject* ancestorContainer, TransformState& transformState, MapCoordinatesFlags, bool* wasFixed) const
+void RenderSVGModelObject::mapLocalToContainer(const RenderLayerModelObject* ancestorContainer, TransformState& transformState, OptionSet<MapCoordinatesMode>, bool* wasFixed) const
 {
     SVGRenderSupport::mapLocalToContainer(*this, ancestorContainer, transformState, wasFixed);
 }

Modified: trunk/Source/WebCore/rendering/svg/RenderSVGModelObject.h (281238 => 281239)


--- trunk/Source/WebCore/rendering/svg/RenderSVGModelObject.h	2021-08-19 15:47:35 UTC (rev 281238)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGModelObject.h	2021-08-19 15:51:31 UTC (rev 281239)
@@ -53,7 +53,7 @@
     void absoluteRects(Vector<IntRect>&, const LayoutPoint& accumulatedOffset) const final;
     void absoluteQuads(Vector<FloatQuad>&, bool* wasFixed) const override;
 
-    void mapLocalToContainer(const RenderLayerModelObject* ancestorContainer, TransformState&, MapCoordinatesFlags, bool* wasFixed) const final;
+    void mapLocalToContainer(const RenderLayerModelObject* ancestorContainer, TransformState&, OptionSet<MapCoordinatesMode>, bool* wasFixed) const final;
     const RenderObject* pushMappingToContainer(const RenderLayerModelObject* ancestorToStopAt, RenderGeometryMap&) const final;
     void styleDidChange(StyleDifference, const RenderStyle* oldStyle) override;
 

Modified: trunk/Source/WebCore/rendering/svg/RenderSVGRoot.cpp (281238 => 281239)


--- trunk/Source/WebCore/rendering/svg/RenderSVGRoot.cpp	2021-08-19 15:47:35 UTC (rev 281238)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGRoot.cpp	2021-08-19 15:51:31 UTC (rev 281239)
@@ -398,10 +398,10 @@
 // This method expects local CSS box coordinates.
 // Callers with local SVG viewport coordinates should first apply the localToBorderBoxTransform
 // to convert from SVG viewport coordinates to local CSS box coordinates.
-void RenderSVGRoot::mapLocalToContainer(const RenderLayerModelObject* ancestorContainer, TransformState& transformState, MapCoordinatesFlags mode, bool* wasFixed) const
+void RenderSVGRoot::mapLocalToContainer(const RenderLayerModelObject* ancestorContainer, TransformState& transformState, OptionSet<MapCoordinatesMode> mode, bool* wasFixed) const
 {
-    ASSERT(mode & ~IsFixed); // We should have no fixed content in the SVG rendering tree.
-    ASSERT(mode & UseTransforms); // mapping a point through SVG w/o respecting trasnforms is useless.
+    ASSERT(!mode.contains(IsFixed)); // We should have no fixed content in the SVG rendering tree.
+    ASSERT(mode.contains(UseTransforms)); // mapping a point through SVG w/o respecting transforms is useless.
 
     RenderReplaced::mapLocalToContainer(ancestorContainer, transformState, mode | ApplyContainerFlip, wasFixed);
 }

Modified: trunk/Source/WebCore/rendering/svg/RenderSVGRoot.h (281238 => 281239)


--- trunk/Source/WebCore/rendering/svg/RenderSVGRoot.h	2021-08-19 15:47:35 UTC (rev 281238)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGRoot.h	2021-08-19 15:51:31 UTC (rev 281239)
@@ -95,7 +95,7 @@
     LayoutRect clippedOverflowRect(const RenderLayerModelObject* repaintContainer, VisibleRectContext) const override;
     std::optional<FloatRect> computeFloatVisibleRectInContainer(const FloatRect&, const RenderLayerModelObject* container, VisibleRectContext) const override;
 
-    void mapLocalToContainer(const RenderLayerModelObject* ancestorContainer, TransformState&, MapCoordinatesFlags, bool* wasFixed) const override;
+    void mapLocalToContainer(const RenderLayerModelObject* ancestorContainer, TransformState&, OptionSet<MapCoordinatesMode>, bool* wasFixed) const override;
     const RenderObject* pushMappingToContainer(const RenderLayerModelObject* ancestorToStopAt, RenderGeometryMap&) const override;
 
     bool canBeSelectionLeaf() const override { return false; }

Modified: trunk/Source/WebCore/rendering/svg/RenderSVGText.cpp (281238 => 281239)


--- trunk/Source/WebCore/rendering/svg/RenderSVGText.cpp	2021-08-19 15:47:35 UTC (rev 281238)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGText.cpp	2021-08-19 15:51:31 UTC (rev 281239)
@@ -105,7 +105,7 @@
     return SVGRenderSupport::computeFloatVisibleRectInContainer(*this, rect, container, context);
 }
 
-void RenderSVGText::mapLocalToContainer(const RenderLayerModelObject* ancestorContainer, TransformState& transformState, MapCoordinatesFlags, bool* wasFixed) const
+void RenderSVGText::mapLocalToContainer(const RenderLayerModelObject* ancestorContainer, TransformState& transformState, OptionSet<MapCoordinatesMode>, bool* wasFixed) const
 {
     SVGRenderSupport::mapLocalToContainer(*this, ancestorContainer, transformState, wasFixed);
 }

Modified: trunk/Source/WebCore/rendering/svg/RenderSVGText.h (281238 => 281239)


--- trunk/Source/WebCore/rendering/svg/RenderSVGText.h	2021-08-19 15:47:35 UTC (rev 281238)
+++ trunk/Source/WebCore/rendering/svg/RenderSVGText.h	2021-08-19 15:51:31 UTC (rev 281239)
@@ -81,7 +81,7 @@
     std::optional<LayoutRect> computeVisibleRectInContainer(const LayoutRect&, const RenderLayerModelObject* container, VisibleRectContext) const override;
     std::optional<FloatRect> computeFloatVisibleRectInContainer(const FloatRect&, const RenderLayerModelObject* container, VisibleRectContext) const override;
 
-    void mapLocalToContainer(const RenderLayerModelObject* ancestorContainer, TransformState&, MapCoordinatesFlags, bool* wasFixed) const override;
+    void mapLocalToContainer(const RenderLayerModelObject* ancestorContainer, TransformState&, OptionSet<MapCoordinatesMode>, bool* wasFixed) const override;
     const RenderObject* pushMappingToContainer(const RenderLayerModelObject* ancestorToStopAt, RenderGeometryMap&) const override;
     void willBeDestroyed() override;
 

Modified: trunk/Source/WebCore/rendering/svg/SVGRenderSupport.cpp (281238 => 281239)


--- trunk/Source/WebCore/rendering/svg/SVGRenderSupport.cpp	2021-08-19 15:47:35 UTC (rev 281238)
+++ trunk/Source/WebCore/rendering/svg/SVGRenderSupport.cpp	2021-08-19 15:51:31 UTC (rev 281239)
@@ -101,7 +101,7 @@
 
     transformState.applyTransform(transform);
 
-    MapCoordinatesFlags mode = UseTransforms;
+    OptionSet<MapCoordinatesMode> mode = UseTransforms;
     parent.mapLocalToContainer(ancestorContainer, transformState, mode, wasFixed);
 }
 
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to