Title: [237122] trunk/Source/WebCore
Revision
237122
Author
simon.fra...@apple.com
Date
2018-10-15 10:25:45 -0700 (Mon, 15 Oct 2018)

Log Message

Make a helper function to check for reflection layers
https://bugs.webkit.org/show_bug.cgi?id=190584

Reviewed by Zalan Bujtas.

Add RenderLayer::isReflectionLayer() which returns true if the passed layer
is the layer of this layer's reflection. It's used in z-order list building.

* rendering/RenderLayer.cpp:
(WebCore::RenderLayer::updateNormalFlowList):
(WebCore::RenderLayer::rebuildZOrderLists):
(WebCore::RenderLayer::collectLayers):
(WebCore::expandClipRectForDescendantsAndReflection):
(WebCore::RenderLayer::calculateClipRects const):
* rendering/RenderLayer.h:

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (237121 => 237122)


--- trunk/Source/WebCore/ChangeLog	2018-10-15 17:25:42 UTC (rev 237121)
+++ trunk/Source/WebCore/ChangeLog	2018-10-15 17:25:45 UTC (rev 237122)
@@ -1,5 +1,23 @@
 2018-10-15  Simon Fraser  <simon.fra...@apple.com>
 
+        Make a helper function to check for reflection layers
+        https://bugs.webkit.org/show_bug.cgi?id=190584
+
+        Reviewed by Zalan Bujtas.
+
+        Add RenderLayer::isReflectionLayer() which returns true if the passed layer
+        is the layer of this layer's reflection. It's used in z-order list building.
+
+        * rendering/RenderLayer.cpp:
+        (WebCore::RenderLayer::updateNormalFlowList):
+        (WebCore::RenderLayer::rebuildZOrderLists):
+        (WebCore::RenderLayer::collectLayers):
+        (WebCore::expandClipRectForDescendantsAndReflection):
+        (WebCore::RenderLayer::calculateClipRects const):
+        * rendering/RenderLayer.h:
+
+2018-10-15  Simon Fraser  <simon.fra...@apple.com>
+
         RenderLayer::addChild() and removeChild() should take references
         https://bugs.webkit.org/show_bug.cgi?id=190582
 

Modified: trunk/Source/WebCore/rendering/RenderLayer.cpp (237121 => 237122)


--- trunk/Source/WebCore/rendering/RenderLayer.cpp	2018-10-15 17:25:42 UTC (rev 237121)
+++ trunk/Source/WebCore/rendering/RenderLayer.cpp	2018-10-15 17:25:45 UTC (rev 237122)
@@ -643,7 +643,7 @@
 
     for (RenderLayer* child = firstChild(); child; child = child->nextSibling()) {
         // Ignore non-overflow layers and reflections.
-        if (child->isNormalFlowOnly() && (!m_reflection || reflectionLayer() != child)) {
+        if (child->isNormalFlowOnly() && !isReflectionLayer(*child)) {
             if (!m_normalFlowList)
                 m_normalFlowList = std::make_unique<Vector<RenderLayer*>>();
             m_normalFlowList->append(child);
@@ -665,7 +665,7 @@
 {
     bool includeHiddenLayers = compositor().inCompositingMode();
     for (RenderLayer* child = firstChild(); child; child = child->nextSibling()) {
-        if (!m_reflection || reflectionLayer() != child)
+        if (!isReflectionLayer(*child))
             child->collectLayers(includeHiddenLayers, posZOrderList, negZOrderList);
     }
 
@@ -700,7 +700,7 @@
     if ((includeHiddenLayers || m_hasVisibleDescendant) && !isStacking) {
         for (RenderLayer* child = firstChild(); child; child = child->nextSibling()) {
             // Ignore reflections.
-            if (!m_reflection || reflectionLayer() != child)
+            if (!isReflectionLayer(*child))
                 child->collectLayers(includeHiddenLayers, positiveZOrderList, negativeZOrderList);
         }
     }
@@ -1850,7 +1850,7 @@
         // Note: we don't have to walk z-order lists since transparent elements always establish
         // a stacking container. This means we can just walk the layer tree directly.
         for (RenderLayer* curr = layer.firstChild(); curr; curr = curr->nextSibling()) {
-            if (!layer.reflection() || layer.reflectionLayer() != curr)
+            if (!layer.isReflectionLayer(*curr))
                 clipRect.unite(transparencyClipBox(*curr, rootLayer, transparencyBehavior, DescendantsOfTransparencyClipBox, paintBehavior));
         }
     }
@@ -6422,6 +6422,11 @@
     return m_reflection ? m_reflection->layer() : nullptr;
 }
 
+bool RenderLayer::isReflectionLayer(const RenderLayer& layer) const
+{
+    return m_reflection ? &layer == m_reflection->layer() : false;
+}
+
 void RenderLayer::createReflection()
 {
     ASSERT(!m_reflection);

Modified: trunk/Source/WebCore/rendering/RenderLayer.h (237121 => 237122)


--- trunk/Source/WebCore/rendering/RenderLayer.h	2018-10-15 17:25:42 UTC (rev 237121)
+++ trunk/Source/WebCore/rendering/RenderLayer.h	2018-10-15 17:25:45 UTC (rev 237122)
@@ -265,6 +265,7 @@
     bool isReflection() const { return renderer().isReplica(); }
     RenderReplica* reflection() const { return m_reflection.get(); }
     RenderLayer* reflectionLayer() const;
+    bool isReflectionLayer(const RenderLayer&) const;
 
     const LayoutPoint& location() const { return m_topLeft; }
     void setLocation(const LayoutPoint& p) { m_topLeft = p; }
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to