<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[159082] trunk</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/159082">159082</a></dd>
<dt>Author</dt> <dd>simon.fraser@apple.com</dd>
<dt>Date</dt> <dd>2013-11-11 16:50:29 -0800 (Mon, 11 Nov 2013)</dd>
</dl>

<h3>Log Message</h3>
<pre>REGRESSION (<a href="http://trac.webkit.org/projects/webkit/changeset/155660">r155660</a>): box-shadow causes overlay scrollbars to be in the wrong position when element is composited (85647)
https://bugs.webkit.org/show_bug.cgi?id=124090

Source/WebCore:

Reviewed by Beth Dakin.

After <a href="http://trac.webkit.org/projects/webkit/changeset/155660">r155660</a> we did fewer layouts, so were left with overlay scrollbars in the
wrong locations because nothing would update them after RenderLayerBacking
computed a new offsetFromRenderer.

First part of the fix is to wean positionOverflowControlsLayers() off of
an absolute offset from the root. Do this by not using Widget::frameRect()
to position the layers, but instead RenderLayer::rectFor{Horizontal|Vertical}Scrollbar
which is what we used to position the scrollbars in the first place.

Second part of the fix is to call positionOverflowControlsLayers() from
RenderLayerBacking::updateGraphicsLayerGeometry() if the offsetFromRenderer
changed.

Test: compositing/overflow/overflow-scrollbar-layer-positions.html

* rendering/RenderLayer.cpp:
(WebCore::RenderLayer::positionOverflowControls):
* rendering/RenderLayerBacking.cpp:
(WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):
(WebCore::RenderLayerBacking::positionOverflowControlsLayers):
* rendering/RenderLayerBacking.h:

LayoutTests:

Reviewed by Beth Dakin.

Test, but it doesn't actually test the fix until we enable overlay scrollbars
in tests (bug 60716).

* compositing/overflow/overflow-scrollbar-layer-positions-expected.txt: Added.
* compositing/overflow/overflow-scrollbar-layer-positions.html: Added.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderLayercpp">trunk/Source/WebCore/rendering/RenderLayer.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderLayerBackingcpp">trunk/Source/WebCore/rendering/RenderLayerBacking.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderLayerBackingh">trunk/Source/WebCore/rendering/RenderLayerBacking.h</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkLayoutTestscompositingoverflowoverflowscrollbarlayerpositionsexpectedtxt">trunk/LayoutTests/compositing/overflow/overflow-scrollbar-layer-positions-expected.txt</a></li>
<li><a href="#trunkLayoutTestscompositingoverflowoverflowscrollbarlayerpositionshtml">trunk/LayoutTests/compositing/overflow/overflow-scrollbar-layer-positions.html</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (159081 => 159082)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2013-11-12 00:33:24 UTC (rev 159081)
+++ trunk/LayoutTests/ChangeLog        2013-11-12 00:50:29 UTC (rev 159082)
</span><span class="lines">@@ -1,5 +1,18 @@
</span><span class="cx"> 2013-11-11  Simon Fraser  &lt;simon.fraser@apple.com&gt;
</span><span class="cx"> 
</span><ins>+        REGRESSION (r155660): box-shadow causes overlay scrollbars to be in the wrong position when element is composited (85647)
+        https://bugs.webkit.org/show_bug.cgi?id=124090
+
+        Reviewed by Beth Dakin.
+        
+        Test, but it doesn't actually test the fix until we enable overlay scrollbars
+        in tests (bug 60716).
+
+        * compositing/overflow/overflow-scrollbar-layer-positions-expected.txt: Added.
+        * compositing/overflow/overflow-scrollbar-layer-positions.html: Added.
+
+2013-11-11  Simon Fraser  &lt;simon.fraser@apple.com&gt;
+
</ins><span class="cx">         Actually land a result for the test that I added (and make it a text test).
</span><span class="cx"> 
</span><span class="cx">         * compositing/tiling/tiled-in-iframe-expected.txt: Added.
</span></span></pre></div>
<a id="trunkLayoutTestscompositingoverflowoverflowscrollbarlayerpositionsexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/compositing/overflow/overflow-scrollbar-layer-positions-expected.txt (0 => 159082)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/compositing/overflow/overflow-scrollbar-layer-positions-expected.txt                                (rev 0)
+++ trunk/LayoutTests/compositing/overflow/overflow-scrollbar-layer-positions-expected.txt        2013-11-12 00:50:29 UTC (rev 159082)
</span><span class="lines">@@ -0,0 +1,18 @@
</span><ins>+Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
+(GraphicsLayer
+  (bounds 800.00 600.00)
+  (children 1
+    (GraphicsLayer
+      (bounds 800.00 600.00)
+      (contentsOpaque 1)
+      (children 1
+        (GraphicsLayer
+          (position 2.00 -6.00)
+          (bounds 244.00 244.00)
+          (drawsContent 1)
+        )
+      )
+    )
+  )
+)
+
</ins></span></pre></div>
<a id="trunkLayoutTestscompositingoverflowoverflowscrollbarlayerpositionshtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/compositing/overflow/overflow-scrollbar-layer-positions.html (0 => 159082)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/compositing/overflow/overflow-scrollbar-layer-positions.html                                (rev 0)
+++ trunk/LayoutTests/compositing/overflow/overflow-scrollbar-layer-positions.html        2013-11-12 00:50:29 UTC (rev 159082)
</span><span class="lines">@@ -0,0 +1,44 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+
+&lt;html&gt;
+&lt;head&gt;
+    &lt;style&gt;
+    .scroll {
+        width: 200px;
+        height: 200px;
+        border: 1px solid black;
+        margin: 15px;
+        overflow: scroll;
+        -webkit-transform: translate3d(0, 0, 0);
+        box-shadow: 0 0 15px black;
+    }
+    
+    .scroll &gt; div {
+        line-height: 2;
+    }
+    &lt;/style&gt;
+    &lt;script&gt;
+    if (window.testRunner) {
+        if (window.internals)
+            internals.setUsesOverlayScrollbars(true);
+        testRunner.dumpAsText();
+    }
+    
+    function dumpLayers()
+    {
+        document.getElementById(&quot;layerTree&quot;).innerText = window.internals.layerTreeAsText(document);
+    }
+    window.addEventListener('load', dumpLayers, false);
+    &lt;/script&gt;
+&lt;/head&gt;
+&lt;body&gt;
+
+    &lt;div class=&quot;scroll&quot;&gt;
+        &lt;div&gt;Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
+        &lt;/div&gt;
+    &lt;/div&gt;
+&lt;pre id=&quot;layerTree&quot;&gt;&lt;/pre&gt;
+
+
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (159081 => 159082)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2013-11-12 00:33:24 UTC (rev 159081)
+++ trunk/Source/WebCore/ChangeLog        2013-11-12 00:50:29 UTC (rev 159082)
</span><span class="lines">@@ -1,3 +1,32 @@
</span><ins>+2013-11-11  Simon Fraser  &lt;simon.fraser@apple.com&gt;
+
+        REGRESSION (r155660): box-shadow causes overlay scrollbars to be in the wrong position when element is composited (85647)
+        https://bugs.webkit.org/show_bug.cgi?id=124090
+
+        Reviewed by Beth Dakin.
+        
+        After r155660 we did fewer layouts, so were left with overlay scrollbars in the
+        wrong locations because nothing would update them after RenderLayerBacking
+        computed a new offsetFromRenderer.
+        
+        First part of the fix is to wean positionOverflowControlsLayers() off of
+        an absolute offset from the root. Do this by not using Widget::frameRect()
+        to position the layers, but instead RenderLayer::rectFor{Horizontal|Vertical}Scrollbar
+        which is what we used to position the scrollbars in the first place.
+        
+        Second part of the fix is to call positionOverflowControlsLayers() from
+        RenderLayerBacking::updateGraphicsLayerGeometry() if the offsetFromRenderer
+        changed.
+
+        Test: compositing/overflow/overflow-scrollbar-layer-positions.html
+
+        * rendering/RenderLayer.cpp:
+        (WebCore::RenderLayer::positionOverflowControls):
+        * rendering/RenderLayerBacking.cpp:
+        (WebCore::RenderLayerBacking::updateGraphicsLayerGeometry):
+        (WebCore::RenderLayerBacking::positionOverflowControlsLayers):
+        * rendering/RenderLayerBacking.h:
+
</ins><span class="cx"> 2013-11-11  Brent Fulgham  &lt;bfulgham@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [Win] m_isCompositeFontReference is uninitialized.
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderLayercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderLayer.cpp (159081 => 159082)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderLayer.cpp        2013-11-12 00:33:24 UTC (rev 159081)
+++ trunk/Source/WebCore/rendering/RenderLayer.cpp        2013-11-12 00:50:29 UTC (rev 159082)
</span><span class="lines">@@ -3005,7 +3005,7 @@
</span><span class="cx"> 
</span><span class="cx"> #if USE(ACCELERATED_COMPOSITING)    
</span><span class="cx">     if (isComposited())
</span><del>-        backing()-&gt;positionOverflowControlsLayers(offsetFromRoot);
</del><ins>+        backing()-&gt;positionOverflowControlsLayers();
</ins><span class="cx"> #endif
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderLayerBackingcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderLayerBacking.cpp (159081 => 159082)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderLayerBacking.cpp        2013-11-12 00:33:24 UTC (rev 159081)
+++ trunk/Source/WebCore/rendering/RenderLayerBacking.cpp        2013-11-12 00:50:29 UTC (rev 159082)
</span><span class="lines">@@ -697,7 +697,11 @@
</span><span class="cx"> 
</span><span class="cx">     m_graphicsLayer-&gt;setPosition(FloatPoint(relativeCompositingBounds.location() - graphicsLayerParentLocation));
</span><span class="cx">     m_graphicsLayer-&gt;setSize(contentsSize);
</span><del>-    m_graphicsLayer-&gt;setOffsetFromRenderer(toIntSize(localCompositingBounds.location()));
</del><ins>+    IntSize offsetFromRenderer = toIntSize(localCompositingBounds.location());
+    if (offsetFromRenderer != m_graphicsLayer-&gt;offsetFromRenderer()) {
+        m_graphicsLayer-&gt;setOffsetFromRenderer(toIntSize(localCompositingBounds.location()));
+        positionOverflowControlsLayers();
+    }
</ins><span class="cx"> 
</span><span class="cx">     if (!m_isMainFrameRenderViewLayer) {
</span><span class="cx">         // For non-root layers, background is always painted by the primary graphics layer.
</span><span class="lines">@@ -1124,35 +1128,36 @@
</span><span class="cx">     return horizontalScrollbarLayerChanged || verticalScrollbarLayerChanged || scrollCornerLayerChanged;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void RenderLayerBacking::positionOverflowControlsLayers(const IntSize&amp; offsetFromRoot)
</del><ins>+void RenderLayerBacking::positionOverflowControlsLayers()
</ins><span class="cx"> {
</span><ins>+    if (!m_owningLayer.hasScrollbars())
+        return;
+
+    const IntRect borderBox = toRenderBox(renderer()).pixelSnappedBorderBoxRect();
+
</ins><span class="cx">     IntSize offsetFromRenderer = m_graphicsLayer-&gt;offsetFromRenderer();
</span><span class="cx">     if (GraphicsLayer* layer = layerForHorizontalScrollbar()) {
</span><del>-        Scrollbar* hBar = m_owningLayer.horizontalScrollbar();
-        if (hBar) {
-            layer-&gt;setPosition(hBar-&gt;frameRect().location() - offsetFromRoot - offsetFromRenderer);
-            layer-&gt;setSize(hBar-&gt;frameRect().size());
-            if (layer-&gt;hasContentsLayer()) {
-                IntRect barRect = IntRect(IntPoint(), hBar-&gt;frameRect().size());
-                layer-&gt;setContentsRect(barRect);
-                layer-&gt;setContentsClippingRect(barRect);
-            }
</del><ins>+        IntRect hBarRect = m_owningLayer.rectForHorizontalScrollbar(borderBox);
+        layer-&gt;setPosition(hBarRect.location() - offsetFromRenderer);
+        layer-&gt;setSize(hBarRect.size());
+        if (layer-&gt;hasContentsLayer()) {
+            IntRect barRect = IntRect(IntPoint(), hBarRect.size());
+            layer-&gt;setContentsRect(barRect);
+            layer-&gt;setContentsClippingRect(barRect);
</ins><span class="cx">         }
</span><del>-        layer-&gt;setDrawsContent(hBar &amp;&amp; !layer-&gt;hasContentsLayer());
</del><ins>+        layer-&gt;setDrawsContent(m_owningLayer.horizontalScrollbar() &amp;&amp; !layer-&gt;hasContentsLayer());
</ins><span class="cx">     }
</span><span class="cx">     
</span><span class="cx">     if (GraphicsLayer* layer = layerForVerticalScrollbar()) {
</span><del>-        Scrollbar* vBar = m_owningLayer.verticalScrollbar();
-        if (vBar) {
-            layer-&gt;setPosition(vBar-&gt;frameRect().location() - offsetFromRoot - offsetFromRenderer);
-            layer-&gt;setSize(vBar-&gt;frameRect().size());
-            if (layer-&gt;hasContentsLayer()) {
-                IntRect barRect = IntRect(IntPoint(), vBar-&gt;frameRect().size());
-                layer-&gt;setContentsRect(barRect);
-                layer-&gt;setContentsClippingRect(barRect);
-            }
</del><ins>+        IntRect vBarRect = m_owningLayer.rectForVerticalScrollbar(borderBox);
+        layer-&gt;setPosition(vBarRect.location() - offsetFromRenderer);
+        layer-&gt;setSize(vBarRect.size());
+        if (layer-&gt;hasContentsLayer()) {
+            IntRect barRect = IntRect(IntPoint(), vBarRect.size());
+            layer-&gt;setContentsRect(barRect);
+            layer-&gt;setContentsClippingRect(barRect);
</ins><span class="cx">         }
</span><del>-        layer-&gt;setDrawsContent(vBar &amp;&amp; !layer-&gt;hasContentsLayer());
</del><ins>+        layer-&gt;setDrawsContent(m_owningLayer.verticalScrollbar() &amp;&amp; !layer-&gt;hasContentsLayer());
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     if (GraphicsLayer* layer = layerForScrollCorner()) {
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderLayerBackingh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderLayerBacking.h (159081 => 159082)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderLayerBacking.h        2013-11-12 00:33:24 UTC (rev 159081)
+++ trunk/Source/WebCore/rendering/RenderLayerBacking.h        2013-11-12 00:50:29 UTC (rev 159082)
</span><span class="lines">@@ -146,7 +146,7 @@
</span><span class="cx">     void updateCompositedBounds();
</span><span class="cx">     
</span><span class="cx">     void updateAfterWidgetResize();
</span><del>-    void positionOverflowControlsLayers(const IntSize&amp; offsetFromRoot);
</del><ins>+    void positionOverflowControlsLayers();
</ins><span class="cx">     bool hasUnpositionedOverflowControlsLayers() const;
</span><span class="cx"> 
</span><span class="cx">     bool usingTiledBacking() const { return m_usingTiledCacheLayer; }
</span></span></pre>
</div>
</div>

</body>
</html>