<!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>[168890] trunk/Source/WebCore</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/168890">168890</a></dd>
<dt>Author</dt> <dd>bdakin@apple.com</dd>
<dt>Date</dt> <dd>2014-05-14 21:08:48 -0700 (Wed, 14 May 2014)</dd>
</dl>

<h3>Log Message</h3>
<pre>Tiled scrolling indicator needs to take topContentInset into account
https://bugs.webkit.org/show_bug.cgi?id=132940

Reviewed by Simon Fraser.

The tiled scrolling indicator needs to move down by the value of the 
topContentInset. This patch makes that happen by caching the topContentInset in 
the TileController. This does feel a little silly since there is already a 
function called setTiledScrollingIndicatorPosition() on TiledBacking. However, it 
was often the case that calling that function had no effect because m_coverageMap 
had not yet been created, and then the information was lost. So instead, we cache 
the value.

Set TiledBacking’s copy of topContentInset whenever it changes for the FrameView.
* page/FrameView.cpp:
(WebCore::FrameView::topContentInsetDidChange):

New function to set the inset. Use the inset to position the coverage map.
* platform/graphics/TiledBacking.h:
* platform/graphics/ca/mac/TileController.h:
* platform/graphics/ca/mac/TileController.mm:
(WebCore::TileController::TileController):
(WebCore::TileController::setTopContentInset):

When the coverage map is created, consult the value of the inset.
* platform/graphics/ca/mac/TileCoverageMap.mm:
(WebCore::TileCoverageMap::TileCoverageMap):

Once the backing has been ensured, set the inset.
* rendering/RenderLayerCompositor.cpp:
(WebCore::RenderLayerCompositor::updateBacking):</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCorepageFrameViewcpp">trunk/Source/WebCore/page/FrameView.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsTiledBackingh">trunk/Source/WebCore/platform/graphics/TiledBacking.h</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicscamacTileControllerh">trunk/Source/WebCore/platform/graphics/ca/mac/TileController.h</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicscamacTileControllermm">trunk/Source/WebCore/platform/graphics/ca/mac/TileController.mm</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicscamacTileCoverageMapmm">trunk/Source/WebCore/platform/graphics/ca/mac/TileCoverageMap.mm</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderLayerCompositorcpp">trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (168889 => 168890)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2014-05-15 03:58:04 UTC (rev 168889)
+++ trunk/Source/WebCore/ChangeLog        2014-05-15 04:08:48 UTC (rev 168890)
</span><span class="lines">@@ -1,3 +1,37 @@
</span><ins>+2014-05-14  Beth Dakin  &lt;bdakin@apple.com&gt;
+
+        Tiled scrolling indicator needs to take topContentInset into account
+        https://bugs.webkit.org/show_bug.cgi?id=132940
+
+        Reviewed by Simon Fraser.
+
+        The tiled scrolling indicator needs to move down by the value of the 
+        topContentInset. This patch makes that happen by caching the topContentInset in 
+        the TileController. This does feel a little silly since there is already a 
+        function called setTiledScrollingIndicatorPosition() on TiledBacking. However, it 
+        was often the case that calling that function had no effect because m_coverageMap 
+        had not yet been created, and then the information was lost. So instead, we cache 
+        the value.
+
+        Set TiledBacking’s copy of topContentInset whenever it changes for the FrameView.
+        * page/FrameView.cpp:
+        (WebCore::FrameView::topContentInsetDidChange):
+
+        New function to set the inset. Use the inset to position the coverage map.
+        * platform/graphics/TiledBacking.h:
+        * platform/graphics/ca/mac/TileController.h:
+        * platform/graphics/ca/mac/TileController.mm:
+        (WebCore::TileController::TileController):
+        (WebCore::TileController::setTopContentInset):
+
+        When the coverage map is created, consult the value of the inset.
+        * platform/graphics/ca/mac/TileCoverageMap.mm:
+        (WebCore::TileCoverageMap::TileCoverageMap):
+
+        Once the backing has been ensured, set the inset.
+        * rendering/RenderLayerCompositor.cpp:
+        (WebCore::RenderLayerCompositor::updateBacking):
+
</ins><span class="cx"> 2014-05-14  Brent Fulgham  &lt;bfulgham@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Merge r1267628 from branch.
</span></span></pre></div>
<a id="trunkSourceWebCorepageFrameViewcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/FrameView.cpp (168889 => 168890)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/FrameView.cpp        2014-05-15 03:58:04 UTC (rev 168889)
+++ trunk/Source/WebCore/page/FrameView.cpp        2014-05-15 04:08:48 UTC (rev 168890)
</span><span class="lines">@@ -949,6 +949,9 @@
</span><span class="cx">     updateScrollbars(scrollOffset());
</span><span class="cx">     if (renderView-&gt;usesCompositing())
</span><span class="cx">         renderView-&gt;compositor().frameViewDidChangeSize();
</span><ins>+
+    if (TiledBacking* tiledBacking = this-&gt;tiledBacking())
+        tiledBacking-&gt;setTopContentInset(topContentInset());
</ins><span class="cx"> }
</span><span class="cx">     
</span><span class="cx"> bool FrameView::hasCompositedContent() const
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsTiledBackingh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/TiledBacking.h (168889 => 168890)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/TiledBacking.h        2014-05-15 03:58:04 UTC (rev 168889)
+++ trunk/Source/WebCore/platform/graphics/TiledBacking.h        2014-05-15 04:08:48 UTC (rev 168890)
</span><span class="lines">@@ -51,6 +51,7 @@
</span><span class="cx">     virtual bool tilesWouldChangeForVisibleRect(const FloatRect&amp;) const = 0;
</span><span class="cx"> 
</span><span class="cx">     virtual void setTiledScrollingIndicatorPosition(const FloatPoint&amp;) = 0;
</span><ins>+    virtual void setTopContentInset(float) = 0;
</ins><span class="cx"> 
</span><span class="cx">     virtual void prepopulateRect(const FloatRect&amp;) = 0;
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicscamacTileControllerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/ca/mac/TileController.h (168889 => 168890)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/ca/mac/TileController.h        2014-05-15 03:58:04 UTC (rev 168889)
+++ trunk/Source/WebCore/platform/graphics/ca/mac/TileController.h        2014-05-15 04:08:48 UTC (rev 168890)
</span><span class="lines">@@ -127,6 +127,8 @@
</span><span class="cx"> 
</span><span class="cx">     Vector&lt;RefPtr&lt;PlatformCALayer&gt;&gt; containerLayers();
</span><span class="cx"> 
</span><ins>+    float topContentInset() const { return m_topContentInset; }
+
</ins><span class="cx"> private:
</span><span class="cx">     TileController(PlatformCALayer*);
</span><span class="cx"> 
</span><span class="lines">@@ -136,6 +138,7 @@
</span><span class="cx">     virtual void setVisibleRect(const FloatRect&amp;) override;
</span><span class="cx">     virtual bool tilesWouldChangeForVisibleRect(const FloatRect&amp;) const override;
</span><span class="cx">     virtual void setTiledScrollingIndicatorPosition(const FloatPoint&amp;) override;
</span><ins>+    virtual void setTopContentInset(float) override;
</ins><span class="cx">     virtual void prepopulateRect(const FloatRect&amp;) override;
</span><span class="cx">     virtual void setIsInWindow(bool) override;
</span><span class="cx">     virtual void setTileCoverage(TileCoverage) override;
</span><span class="lines">@@ -197,6 +200,7 @@
</span><span class="cx">     Color m_tileDebugBorderColor;
</span><span class="cx">     float m_tileDebugBorderWidth;
</span><span class="cx">     ScrollingModeIndication m_indicatorMode;
</span><ins>+    float m_topContentInset;
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicscamacTileControllermm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/ca/mac/TileController.mm (168889 => 168890)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/ca/mac/TileController.mm        2014-05-15 03:58:04 UTC (rev 168889)
+++ trunk/Source/WebCore/platform/graphics/ca/mac/TileController.mm        2014-05-15 04:08:48 UTC (rev 168890)
</span><span class="lines">@@ -69,6 +69,7 @@
</span><span class="cx">     , m_hasTilesWithTemporaryScaleFactor(false)
</span><span class="cx">     , m_tileDebugBorderWidth(0)
</span><span class="cx">     , m_indicatorMode(AsyncScrollingIndication)
</span><ins>+    , m_topContentInset(0)
</ins><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -190,6 +191,12 @@
</span><span class="cx">     return tileGrid().tilesWouldChangeForVisibleRect(newVisibleRect, m_visibleRect);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void TileController::setTopContentInset(float topContentInset)
+{
+    m_topContentInset = topContentInset;
+    setTiledScrollingIndicatorPosition(FloatPoint(0, m_topContentInset));
+}
+
</ins><span class="cx"> void TileController::setTiledScrollingIndicatorPosition(const FloatPoint&amp; position)
</span><span class="cx"> {
</span><span class="cx">     if (!m_coverageMap)
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicscamacTileCoverageMapmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/ca/mac/TileCoverageMap.mm (168889 => 168890)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/ca/mac/TileCoverageMap.mm        2014-05-15 03:58:04 UTC (rev 168889)
+++ trunk/Source/WebCore/platform/graphics/ca/mac/TileCoverageMap.mm        2014-05-15 04:08:48 UTC (rev 168890)
</span><span class="lines">@@ -36,6 +36,7 @@
</span><span class="cx">     : m_controller(controller)
</span><span class="cx">     , m_layer(*controller.rootLayer().createCompatibleLayer(PlatformCALayer::LayerTypeSimpleLayer, this))
</span><span class="cx">     , m_visibleRectIndicatorLayer(*controller.rootLayer().createCompatibleLayer(PlatformCALayer::LayerTypeLayer, nullptr))
</span><ins>+    , m_position(FloatPoint(0, controller.topContentInset()))
</ins><span class="cx"> {
</span><span class="cx">     m_layer.get().setOpacity(0.75);
</span><span class="cx">     m_layer.get().setAnchorPoint(FloatPoint3D());
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderLayerCompositorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp (168889 => 168890)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp        2014-05-15 03:58:04 UTC (rev 168889)
+++ trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp        2014-05-15 04:08:48 UTC (rev 168890)
</span><span class="lines">@@ -838,6 +838,9 @@
</span><span class="cx"> #endif
</span><span class="cx">                 if (m_renderView.frameView().frame().settings().backgroundShouldExtendBeyondPage())
</span><span class="cx">                     m_rootContentLayer-&gt;setMasksToBounds(false);
</span><ins>+
+                if (TiledBacking* tiledBacking = layer.backing()-&gt;tiledBacking())
+                    tiledBacking-&gt;setTopContentInset(m_renderView.frameView().topContentInset());
</ins><span class="cx">             }
</span><span class="cx"> 
</span><span class="cx">             // This layer and all of its descendants have cached repaints rects that are relative to
</span></span></pre>
</div>
</div>

</body>
</html>