<!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>[160833] 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/160833">160833</a></dd>
<dt>Author</dt> <dd>commit-queue@webkit.org</dd>
<dt>Date</dt> <dd>2013-12-19 08:30:51 -0800 (Thu, 19 Dec 2013)</dd>
</dl>

<h3>Log Message</h3>
<pre>[CoordinatedGraphics] Regressions in WebView's contentScaleFactor/contentPosition
https://bugs.webkit.org/show_bug.cgi?id=125943

Patch by Nick Diego Yamane &lt;nick.yamane@openbossa.org&gt; on 2013-12-19
Reviewed by Noam Rosenthal.

When WebView::pageDidRequestScroll is called it is scaling position requested
to scroll before store it as contentPosition, that is not necessary since WebView
already stores the requested contentScaleFactor so it's able to do that internally
when needed, what simplifies the API and improves the readability of webview's code.
This patch reverts changes from https://bugs.webkit.org/show_bug.cgi?id=118548, which
was causing some regressions in contentScaleFactor/contentPosition related stuff.
Besides that WebView::pageDidRequestScroll calls viewClient callback with the wrong
position (different from the position stored in WebView).

* UIProcess/API/efl/EwkView.cpp:
(EwkView::scrollBy):
* UIProcess/CoordinatedGraphics/WebView.cpp:
(WebKit::WebView::transformToScene):
(WebKit::WebView::updateViewportSize):
(WebKit::WebView::pageDidRequestScroll):
* UIProcess/efl/PageViewportControllerClientEfl.cpp:
(WebKit::PageViewportControllerClientEfl::setViewportPosition):</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebKit2ChangeLog">trunk/Source/WebKit2/ChangeLog</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPIeflEwkViewcpp">trunk/Source/WebKit2/UIProcess/API/efl/EwkView.cpp</a></li>
<li><a href="#trunkSourceWebKit2UIProcessCoordinatedGraphicsWebViewcpp">trunk/Source/WebKit2/UIProcess/CoordinatedGraphics/WebView.cpp</a></li>
<li><a href="#trunkSourceWebKit2UIProcesseflPageViewportControllerClientEflcpp">trunk/Source/WebKit2/UIProcess/efl/PageViewportControllerClientEfl.cpp</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebKit2ChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/ChangeLog (160832 => 160833)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/ChangeLog        2013-12-19 16:21:47 UTC (rev 160832)
+++ trunk/Source/WebKit2/ChangeLog        2013-12-19 16:30:51 UTC (rev 160833)
</span><span class="lines">@@ -1,3 +1,27 @@
</span><ins>+2013-12-19  Nick Diego Yamane  &lt;nick.yamane@openbossa.org&gt;
+
+        [CoordinatedGraphics] Regressions in WebView's contentScaleFactor/contentPosition
+        https://bugs.webkit.org/show_bug.cgi?id=125943
+
+        Reviewed by Noam Rosenthal.
+
+        When WebView::pageDidRequestScroll is called it is scaling position requested
+        to scroll before store it as contentPosition, that is not necessary since WebView
+        already stores the requested contentScaleFactor so it's able to do that internally
+        when needed, what simplifies the API and improves the readability of webview's code.
+        This patch reverts changes from https://bugs.webkit.org/show_bug.cgi?id=118548, which
+        was causing some regressions in contentScaleFactor/contentPosition related stuff.
+        Besides that WebView::pageDidRequestScroll calls viewClient callback with the wrong
+        position (different from the position stored in WebView).
+
+        * UIProcess/API/efl/EwkView.cpp:
+        (EwkView::scrollBy):
+        * UIProcess/CoordinatedGraphics/WebView.cpp:
+        (WebKit::WebView::transformToScene):
+        (WebKit::WebView::updateViewportSize):
+        (WebKit::WebView::pageDidRequestScroll):
+        * UIProcess/efl/PageViewportControllerClientEfl.cpp:
+        (WebKit::PageViewportControllerClientEfl::setViewportPosition):
</ins><span class="cx"> 2013-12-18  Tim Horton  &lt;timothy_horton@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         WebKit2 View Gestures: Move WebProcess-side geometry collection into its own class
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPIeflEwkViewcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/efl/EwkView.cpp (160832 => 160833)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/efl/EwkView.cpp        2013-12-19 16:21:47 UTC (rev 160832)
+++ trunk/Source/WebKit2/UIProcess/API/efl/EwkView.cpp        2013-12-19 16:30:51 UTC (rev 160833)
</span><span class="lines">@@ -1396,16 +1396,16 @@
</span><span class="cx"> bool EwkView::scrollBy(const IntSize&amp; offset)
</span><span class="cx"> {
</span><span class="cx">     WKPoint oldPosition = WKViewGetContentPosition(wkView());
</span><del>-    FloatPoint newPosition(oldPosition.x + offset.width(), oldPosition.y + offset.height());
</del><ins>+    float contentScale = WKViewGetContentScaleFactor(wkView());
</ins><span class="cx"> 
</span><ins>+    FloatPoint newPosition(oldPosition.x + offset.width() / contentScale, oldPosition.y + offset.height() / contentScale);
+
</ins><span class="cx">     // Update new position to the PageViewportController.
</span><del>-    float contentScale = WKViewGetContentScaleFactor(wkView());
-    newPosition.scale(1 / contentScale, 1 / contentScale);
</del><span class="cx">     newPosition = m_pageViewportController.boundContentsPositionAtScale(newPosition, contentScale);
</span><span class="cx">     m_pageViewportController.didChangeContentsVisibility(newPosition, contentScale);
</span><span class="cx"> 
</span><span class="cx">     // Update new position to the WKView.
</span><del>-    WKPoint position = WKPointMake(newPosition.x() * contentScale, newPosition.y() * contentScale);
</del><ins>+    WKPoint position = WKPointMake(newPosition.x(), newPosition.y());
</ins><span class="cx">     WKViewSetContentPosition(wkView(), position);
</span><span class="cx"> 
</span><span class="cx">     // If the page position has not changed, notify the caller using the return value.
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessCoordinatedGraphicsWebViewcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/CoordinatedGraphics/WebView.cpp (160832 => 160833)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/CoordinatedGraphics/WebView.cpp        2013-12-19 16:21:47 UTC (rev 160832)
+++ trunk/Source/WebKit2/UIProcess/CoordinatedGraphics/WebView.cpp        2013-12-19 16:30:51 UTC (rev 160833)
</span><span class="lines">@@ -239,7 +239,7 @@
</span><span class="cx"> {
</span><span class="cx">     FloatPoint position = -m_contentPosition;
</span><span class="cx">     float effectiveScale = m_contentScaleFactor * m_page-&gt;deviceScaleFactor();
</span><del>-    position.scale(m_page-&gt;deviceScaleFactor(), m_page-&gt;deviceScaleFactor());
</del><ins>+    position.scale(effectiveScale, effectiveScale);
</ins><span class="cx"> 
</span><span class="cx">     TransformationMatrix transform = m_userViewportTransform;
</span><span class="cx">     transform.translate(position.x(), position.y());
</span><span class="lines">@@ -261,9 +261,7 @@
</span><span class="cx">     if (CoordinatedDrawingAreaProxy* drawingArea = static_cast&lt;CoordinatedDrawingAreaProxy*&gt;(page()-&gt;drawingArea())) {
</span><span class="cx">         // Web Process expects sizes in UI units, and not raw device units.
</span><span class="cx">         drawingArea-&gt;setSize(roundedIntSize(dipSize()), IntSize(), IntSize());
</span><del>-        FloatPoint position = contentPosition();
-        position.scale(1 / m_contentScaleFactor, 1 / m_contentScaleFactor);
-        FloatRect visibleContentsRect(position, visibleContentsSize());
</del><ins>+        FloatRect visibleContentsRect(contentPosition(), visibleContentsSize());
</ins><span class="cx">         visibleContentsRect.intersect(FloatRect(FloatPoint(), contentsSize()));
</span><span class="cx">         drawingArea-&gt;setVisibleContentsRect(visibleContentsRect, FloatPoint());
</span><span class="cx">     }
</span><span class="lines">@@ -515,7 +513,6 @@
</span><span class="cx"> void WebView::pageDidRequestScroll(const IntPoint&amp; position)
</span><span class="cx"> {
</span><span class="cx">     FloatPoint uiPosition(position);
</span><del>-    uiPosition.scale(contentScaleFactor(), contentScaleFactor());
</del><span class="cx">     setContentPosition(uiPosition);
</span><span class="cx"> 
</span><span class="cx">     m_client.didChangeContentsPosition(this, position);
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcesseflPageViewportControllerClientEflcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/efl/PageViewportControllerClientEfl.cpp (160832 => 160833)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/efl/PageViewportControllerClientEfl.cpp        2013-12-19 16:21:47 UTC (rev 160832)
+++ trunk/Source/WebKit2/UIProcess/efl/PageViewportControllerClientEfl.cpp        2013-12-19 16:30:51 UTC (rev 160833)
</span><span class="lines">@@ -53,10 +53,8 @@
</span><span class="cx"> {
</span><span class="cx">     m_contentPosition = contentsPoint;
</span><span class="cx"> 
</span><del>-    FloatPoint pos(contentsPoint);
</del><span class="cx">     float scaleFactor = WKViewGetContentScaleFactor(m_view-&gt;wkView());
</span><del>-    pos.scale(scaleFactor, scaleFactor);
-    WKViewSetContentPosition(m_view-&gt;wkView(), WKPointMake(pos.x(), pos.y()));
</del><ins>+    WKViewSetContentPosition(m_view-&gt;wkView(), WKPointMake(contentsPoint.x(), contentsPoint.y()));
</ins><span class="cx"> 
</span><span class="cx">     m_controller-&gt;didChangeContentsVisibility(m_contentPosition, scaleFactor);
</span><span class="cx"> }
</span></span></pre>
</div>
</div>

</body>
</html>