<!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>[176334] trunk/Source/WebKit2</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/176334">176334</a></dd>
<dt>Author</dt> <dd>simon.fraser@apple.com</dd>
<dt>Date</dt> <dd>2014-11-19 13:31:11 -0800 (Wed, 19 Nov 2014)</dd>
</dl>

<h3>Log Message</h3>
<pre>[WK2 UI-side Compositing] Fix the position and scroll indicator of the UI-side tiled scrolling indicator
https://bugs.webkit.org/show_bug.cgi?id=138876

Reviewed by Beth Dakin.

Fix the position of the tiled scrolling indicator in MiniBrowser by taking top
content offset into account.

On Mac, pass the current scroll position back to the UI process via the RemoteLayerTreeTransaction
so that we can use it to show the correctly scroll offset in the indicator. This is temporary until
Mac does UI-side scrolling.

* Shared/mac/RemoteLayerTreeTransaction.h:
(WebKit::RemoteLayerTreeTransaction::scrollPosition):
(WebKit::RemoteLayerTreeTransaction::setScrollPosition):
* Shared/mac/RemoteLayerTreeTransaction.mm:
(WebKit::RemoteLayerTreeTransaction::encode):
(WebKit::RemoteLayerTreeTransaction::decode):
* UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.h:
* UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm:
(WebKit::RemoteLayerTreeDrawingAreaProxy::commitLayerTree):
(WebKit::RemoteLayerTreeDrawingAreaProxy::indicatorLocation):
(WebKit::RemoteLayerTreeDrawingAreaProxy::updateDebugIndicator):
* WebProcess/WebPage/WebPage.cpp:
(WebKit::WebPage::willCommitLayerTree):</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebKit2ChangeLog">trunk/Source/WebKit2/ChangeLog</a></li>
<li><a href="#trunkSourceWebKit2SharedmacRemoteLayerTreeTransactionh">trunk/Source/WebKit2/Shared/mac/RemoteLayerTreeTransaction.h</a></li>
<li><a href="#trunkSourceWebKit2SharedmacRemoteLayerTreeTransactionmm">trunk/Source/WebKit2/Shared/mac/RemoteLayerTreeTransaction.mm</a></li>
<li><a href="#trunkSourceWebKit2UIProcessmacRemoteLayerTreeDrawingAreaProxyh">trunk/Source/WebKit2/UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessmacRemoteLayerTreeDrawingAreaProxymm">trunk/Source/WebKit2/UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm</a></li>
<li><a href="#trunkSourceWebKit2WebProcessWebPageWebPagecpp">trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebKit2ChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/ChangeLog (176333 => 176334)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/ChangeLog        2014-11-19 21:15:00 UTC (rev 176333)
+++ trunk/Source/WebKit2/ChangeLog        2014-11-19 21:31:11 UTC (rev 176334)
</span><span class="lines">@@ -1,3 +1,31 @@
</span><ins>+2014-11-19  Simon Fraser  &lt;simon.fraser@apple.com&gt;
+
+        [WK2 UI-side Compositing] Fix the position and scroll indicator of the UI-side tiled scrolling indicator
+        https://bugs.webkit.org/show_bug.cgi?id=138876
+
+        Reviewed by Beth Dakin.
+        
+        Fix the position of the tiled scrolling indicator in MiniBrowser by taking top
+        content offset into account.
+        
+        On Mac, pass the current scroll position back to the UI process via the RemoteLayerTreeTransaction
+        so that we can use it to show the correctly scroll offset in the indicator. This is temporary until
+        Mac does UI-side scrolling.
+
+        * Shared/mac/RemoteLayerTreeTransaction.h:
+        (WebKit::RemoteLayerTreeTransaction::scrollPosition):
+        (WebKit::RemoteLayerTreeTransaction::setScrollPosition):
+        * Shared/mac/RemoteLayerTreeTransaction.mm:
+        (WebKit::RemoteLayerTreeTransaction::encode):
+        (WebKit::RemoteLayerTreeTransaction::decode):
+        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.h:
+        * UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm:
+        (WebKit::RemoteLayerTreeDrawingAreaProxy::commitLayerTree):
+        (WebKit::RemoteLayerTreeDrawingAreaProxy::indicatorLocation):
+        (WebKit::RemoteLayerTreeDrawingAreaProxy::updateDebugIndicator):
+        * WebProcess/WebPage/WebPage.cpp:
+        (WebKit::WebPage::willCommitLayerTree):
+
</ins><span class="cx"> 2014-11-19  Michael Catanzaro  &lt;mcatanzaro@igalia.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [GTK] Error in documentation of webkit_print_operation_get_page_setup()
</span></span></pre></div>
<a id="trunkSourceWebKit2SharedmacRemoteLayerTreeTransactionh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/Shared/mac/RemoteLayerTreeTransaction.h (176333 => 176334)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Shared/mac/RemoteLayerTreeTransaction.h        2014-11-19 21:15:00 UTC (rev 176333)
+++ trunk/Source/WebKit2/Shared/mac/RemoteLayerTreeTransaction.h        2014-11-19 21:31:11 UTC (rev 176334)
</span><span class="lines">@@ -195,6 +195,11 @@
</span><span class="cx">     WebCore::Color pageExtendedBackgroundColor() const { return m_pageExtendedBackgroundColor; }
</span><span class="cx">     void setPageExtendedBackgroundColor(WebCore::Color color) { m_pageExtendedBackgroundColor = color; }
</span><span class="cx"> 
</span><ins>+#if PLATFORM(MAC)
+    WebCore::IntPoint scrollPosition() const { return m_scrollPosition; }
+    void setScrollPosition(WebCore::IntPoint p) { m_scrollPosition = p; }
+#endif
+
</ins><span class="cx">     double pageScaleFactor() const { return m_pageScaleFactor; }
</span><span class="cx">     void setPageScaleFactor(double pageScaleFactor) { m_pageScaleFactor = pageScaleFactor; }
</span><span class="cx"> 
</span><span class="lines">@@ -233,6 +238,9 @@
</span><span class="cx">     Vector&lt;TransactionCallbackID&gt; m_callbackIDs;
</span><span class="cx"> 
</span><span class="cx">     WebCore::IntSize m_contentsSize;
</span><ins>+#if PLATFORM(MAC)
+    WebCore::IntPoint m_scrollPosition;
+#endif
</ins><span class="cx">     WebCore::Color m_pageExtendedBackgroundColor;
</span><span class="cx">     double m_pageScaleFactor;
</span><span class="cx">     double m_minimumScaleFactor;
</span></span></pre></div>
<a id="trunkSourceWebKit2SharedmacRemoteLayerTreeTransactionmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/Shared/mac/RemoteLayerTreeTransaction.mm (176333 => 176334)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Shared/mac/RemoteLayerTreeTransaction.mm        2014-11-19 21:15:00 UTC (rev 176333)
+++ trunk/Source/WebKit2/Shared/mac/RemoteLayerTreeTransaction.mm        2014-11-19 21:31:11 UTC (rev 176334)
</span><span class="lines">@@ -487,6 +487,9 @@
</span><span class="cx">     encoder &lt;&lt; m_layerIDsWithNewlyUnreachableBackingStore;
</span><span class="cx"> 
</span><span class="cx">     encoder &lt;&lt; m_contentsSize;
</span><ins>+#if PLATFORM(MAC)
+    encoder &lt;&lt; m_scrollPosition;
+#endif
</ins><span class="cx">     encoder &lt;&lt; m_pageExtendedBackgroundColor;
</span><span class="cx">     encoder &lt;&lt; m_pageScaleFactor;
</span><span class="cx">     encoder &lt;&lt; m_minimumScaleFactor;
</span><span class="lines">@@ -548,6 +551,11 @@
</span><span class="cx"> 
</span><span class="cx">     if (!decoder.decode(result.m_contentsSize))
</span><span class="cx">         return false;
</span><ins>+
+#if PLATFORM(MAC)
+    if (!decoder.decode(result.m_scrollPosition))
+        return false;
+#endif
</ins><span class="cx">     
</span><span class="cx">     if (!decoder.decode(result.m_pageExtendedBackgroundColor))
</span><span class="cx">         return false;
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessmacRemoteLayerTreeDrawingAreaProxyh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.h (176333 => 176334)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.h        2014-11-19 21:15:00 UTC (rev 176333)
+++ trunk/Source/WebKit2/UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.h        2014-11-19 21:31:11 UTC (rev 176334)
</span><span class="lines">@@ -71,7 +71,7 @@
</span><span class="cx"> 
</span><span class="cx">     float indicatorScale(WebCore::IntSize contentsSize) const;
</span><span class="cx">     virtual void updateDebugIndicator() override;
</span><del>-    void updateDebugIndicator(WebCore::IntSize contentsSize, bool rootLayerChanged, float scale);
</del><ins>+    void updateDebugIndicator(WebCore::IntSize contentsSize, bool rootLayerChanged, float scale, const WebCore::IntPoint&amp; scrollPosition);
</ins><span class="cx">     void updateDebugIndicatorPosition();
</span><span class="cx">     void initializeDebugIndicator();
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessmacRemoteLayerTreeDrawingAreaProxymm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm (176333 => 176334)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm        2014-11-19 21:15:00 UTC (rev 176333)
+++ trunk/Source/WebKit2/UIProcess/mac/RemoteLayerTreeDrawingAreaProxy.mm        2014-11-19 21:31:11 UTC (rev 176334)
</span><span class="lines">@@ -225,7 +225,11 @@
</span><span class="cx">     if (m_debugIndicatorLayerTreeHost) {
</span><span class="cx">         float scale = indicatorScale(layerTreeTransaction.contentsSize());
</span><span class="cx">         bool rootLayerChanged = m_debugIndicatorLayerTreeHost-&gt;updateLayerTree(layerTreeTransaction, scale);
</span><del>-        updateDebugIndicator(layerTreeTransaction.contentsSize(), rootLayerChanged, scale);
</del><ins>+        IntPoint scrollPosition;
+#if PLATFORM(MAC)
+        scrollPosition = layerTreeTransaction.scrollPosition();
+#endif
+        updateDebugIndicator(layerTreeTransaction.contentsSize(), rootLayerChanged, scale, scrollPosition);
</ins><span class="cx">         asLayer(m_debugIndicatorLayerTreeHost-&gt;rootLayer()).name = @&quot;Indicator host root&quot;;
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -272,7 +276,7 @@
</span><span class="cx">         return tiledMapLocation;
</span><span class="cx">     }
</span><span class="cx">     
</span><del>-    return FloatPoint(indicatorInset, indicatorInset);
</del><ins>+    return FloatPoint(indicatorInset, indicatorInset + m_webPageProxy.topContentInset());
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void RemoteLayerTreeDrawingAreaProxy::updateDebugIndicatorPosition()
</span><span class="lines">@@ -303,7 +307,7 @@
</span><span class="cx">     updateDebugIndicatorPosition();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void RemoteLayerTreeDrawingAreaProxy::updateDebugIndicator(IntSize contentsSize, bool rootLayerChanged, float scale)
</del><ins>+void RemoteLayerTreeDrawingAreaProxy::updateDebugIndicator(IntSize contentsSize, bool rootLayerChanged, float scale, const IntPoint&amp; scrollPosition)
</ins><span class="cx"> {
</span><span class="cx">     // Make sure we're the last sublayer.
</span><span class="cx">     CALayer *rootLayer = asLayer(m_remoteLayerTreeHost.rootLayer());
</span><span class="lines">@@ -333,7 +337,7 @@
</span><span class="cx">         [m_exposedRectIndicatorLayer setPosition:scaledExposedRect.location()];
</span><span class="cx">         [m_exposedRectIndicatorLayer setBounds:FloatRect(FloatPoint(), scaledExposedRect.size())];
</span><span class="cx">     } else {
</span><del>-        // FIXME: Get the correct scroll position.
</del><ins>+        [m_exposedRectIndicatorLayer setPosition:scrollPosition];
</ins><span class="cx">         [m_exposedRectIndicatorLayer setBounds:FloatRect(FloatPoint(), viewSize)];
</span><span class="cx">     }
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebPageWebPagecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp (176333 => 176334)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp        2014-11-19 21:15:00 UTC (rev 176333)
+++ trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp        2014-11-19 21:31:11 UTC (rev 176334)
</span><span class="lines">@@ -2875,6 +2875,9 @@
</span><span class="cx">     layerTransaction.setMaximumScaleFactor(m_viewportConfiguration.maximumScale());
</span><span class="cx">     layerTransaction.setAllowsUserScaling(allowsUserScaling());
</span><span class="cx"> #endif
</span><ins>+#if PLATFORM(MAC)
+    layerTransaction.setScrollPosition(corePage()-&gt;mainFrame().view()-&gt;scrollPosition());
+#endif
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void WebPage::didFlushLayerTreeAtTime(std::chrono::milliseconds timestamp)
</span></span></pre>
</div>
</div>

</body>
</html>