<!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>[169324] trunk/Source</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/169324">169324</a></dd>
<dt>Author</dt> <dd>benjamin@webkit.org</dd>
<dt>Date</dt> <dd>2014-05-25 15:17:43 -0700 (Sun, 25 May 2014)</dd>
</dl>

<h3>Log Message</h3>
<pre>[iOS][WK2] Use ScrollView's scrollOffset as the unobscuredContentRect
https://bugs.webkit.org/show_bug.cgi?id=133262

Patch by Benjamin Poulain &lt;bpoulain@apple.com&gt; on 2014-05-25
Reviewed by Simon Fraser.


Source/WebCore: 
Since VisibleContentRect was fixed, we were no longer sending scroll events when updating the scrollOffset
when updating the visible content rects. The reason is that the scrollOffset was defined as the top left of the
VisibleContentRect, and as such was already at the end position after updating the unobscured rect.

This patch split the unobscuredContentRect in unobscuredContentSize (updated live on zoom) and the position defined
by the ScrollView's scrollOffset (updated when scrolling).

* WebCore.exp.in:
* platform/ScrollView.h:
* platform/ios/ScrollViewIOS.mm:
(WebCore::ScrollView::unobscuredContentRect):
(WebCore::ScrollView::setUnobscuredContentSize):
(WebCore::ScrollView::setUnobscuredContentRect): Deleted.

Source/WebKit2: 
* WebProcess/WebPage/ios/WebPageIOS.mm:
(WebKit::WebPage::dynamicViewportSizeUpdate):
(WebKit::WebPage::viewportConfigurationChanged):
(WebKit::WebPage::updateVisibleContentRects):</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreWebCoreexpin">trunk/Source/WebCore/WebCore.exp.in</a></li>
<li><a href="#trunkSourceWebCoreplatformScrollViewh">trunk/Source/WebCore/platform/ScrollView.h</a></li>
<li><a href="#trunkSourceWebCoreplatformiosScrollViewIOSmm">trunk/Source/WebCore/platform/ios/ScrollViewIOS.mm</a></li>
<li><a href="#trunkSourceWebKit2ChangeLog">trunk/Source/WebKit2/ChangeLog</a></li>
<li><a href="#trunkSourceWebKit2WebProcessWebPageiosWebPageIOSmm">trunk/Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (169323 => 169324)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2014-05-25 19:54:54 UTC (rev 169323)
+++ trunk/Source/WebCore/ChangeLog        2014-05-25 22:17:43 UTC (rev 169324)
</span><span class="lines">@@ -1,3 +1,24 @@
</span><ins>+2014-05-25  Benjamin Poulain  &lt;bpoulain@apple.com&gt;
+
+        [iOS][WK2] Use ScrollView's scrollOffset as the unobscuredContentRect
+        https://bugs.webkit.org/show_bug.cgi?id=133262
+
+        Reviewed by Simon Fraser.
+
+        Since VisibleContentRect was fixed, we were no longer sending scroll events when updating the scrollOffset
+        when updating the visible content rects. The reason is that the scrollOffset was defined as the top left of the
+        VisibleContentRect, and as such was already at the end position after updating the unobscured rect.
+
+        This patch split the unobscuredContentRect in unobscuredContentSize (updated live on zoom) and the position defined
+        by the ScrollView's scrollOffset (updated when scrolling).
+
+        * WebCore.exp.in:
+        * platform/ScrollView.h:
+        * platform/ios/ScrollViewIOS.mm:
+        (WebCore::ScrollView::unobscuredContentRect):
+        (WebCore::ScrollView::setUnobscuredContentSize):
+        (WebCore::ScrollView::setUnobscuredContentRect): Deleted.
+
</ins><span class="cx"> 2014-05-25  David Kilzer  &lt;ddkilzer@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Add type-checked casts for TransformOperations
</span></span></pre></div>
<a id="trunkSourceWebCoreWebCoreexpin"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/WebCore.exp.in (169323 => 169324)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/WebCore.exp.in        2014-05-25 19:54:54 UTC (rev 169323)
+++ trunk/Source/WebCore/WebCore.exp.in        2014-05-25 22:17:43 UTC (rev 169324)
</span><span class="lines">@@ -2477,7 +2477,7 @@
</span><span class="cx"> __ZN7WebCore10RenderView35resumePausedImageAnimationsIfNeededEv
</span><span class="cx"> __ZN7WebCore10ScrollView15setScrollOffsetERKNS_8IntPointE
</span><span class="cx"> __ZN7WebCore10ScrollView21setExposedContentRectERKNS_7IntRectE
</span><del>-__ZN7WebCore10ScrollView24setUnobscuredContentRectERKNS_7IntRectE
</del><ins>+__ZN7WebCore10ScrollView24setUnobscuredContentSizeERKNS_7IntSizeE
</ins><span class="cx"> __ZN7WebCore10XLinkNames4initEv
</span><span class="cx"> __ZN7WebCore10inSameLineERKNS_15VisiblePositionES2_
</span><span class="cx"> __ZN7WebCore11BidiContext41copyStackRemovingUnicodeEmbeddingContextsEv
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformScrollViewh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/ScrollView.h (169323 => 169324)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/ScrollView.h        2014-05-25 19:54:54 UTC (rev 169323)
+++ trunk/Source/WebCore/platform/ScrollView.h        2014-05-25 22:17:43 UTC (rev 169324)
</span><span class="lines">@@ -186,7 +186,7 @@
</span><span class="cx"> 
</span><span class="cx">     // The given rects are only used if there is no platform widget.
</span><span class="cx">     void setExposedContentRect(const IntRect&amp;);
</span><del>-    void setUnobscuredContentRect(const IntRect&amp;);
</del><ins>+    void setUnobscuredContentSize(const IntSize&amp;);
</ins><span class="cx"> 
</span><span class="cx">     void setActualScrollPosition(const IntPoint&amp;);
</span><span class="cx">     LegacyTileCache* legacyTileCache();
</span><span class="lines">@@ -427,10 +427,10 @@
</span><span class="cx">     bool m_canBlitOnScroll;
</span><span class="cx"> 
</span><span class="cx">     // FIXME: exposedContentRect is a very similar concept to fixedVisibleContentRect except it does not differentiate
</span><del>-    // between exposed rect and unobscuredRects. The two attributes should eventually be merged.
</del><ins>+    // between exposed and unobscured areas. The two attributes should eventually be merged.
</ins><span class="cx"> #if PLATFORM(IOS)
</span><span class="cx">     IntRect m_exposedContentRect;
</span><del>-    IntRect m_unobscuredContentRect;
</del><ins>+    IntSize m_unobscuredContentSize;
</ins><span class="cx"> #else
</span><span class="cx">     IntRect m_fixedVisibleContentRect;
</span><span class="cx"> #endif
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformiosScrollViewIOSmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/ios/ScrollViewIOS.mm (169323 => 169324)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/ios/ScrollViewIOS.mm        2014-05-25 19:54:54 UTC (rev 169323)
+++ trunk/Source/WebCore/platform/ios/ScrollViewIOS.mm        2014-05-25 22:17:43 UTC (rev 169324)
</span><span class="lines">@@ -107,16 +107,16 @@
</span><span class="cx">         return enclosingIntRect(r);
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    if (!m_unobscuredContentRect.isEmpty())
-        return m_unobscuredContentRect;
</del><ins>+    if (!m_unobscuredContentSize.isEmpty())
+        return IntRect(IntPoint(m_scrollOffset), m_unobscuredContentSize);
</ins><span class="cx"> 
</span><span class="cx">     return unobscuredContentRectInternal();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void ScrollView::setUnobscuredContentRect(const IntRect&amp; rect)
</del><ins>+void ScrollView::setUnobscuredContentSize(const IntSize&amp; size)
</ins><span class="cx"> {
</span><span class="cx">     ASSERT(!platformWidget());
</span><del>-    m_unobscuredContentRect = rect;
</del><ins>+    m_unobscuredContentSize = size;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> IntRect ScrollView::exposedContentRect() const
</span></span></pre></div>
<a id="trunkSourceWebKit2ChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/ChangeLog (169323 => 169324)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/ChangeLog        2014-05-25 19:54:54 UTC (rev 169323)
+++ trunk/Source/WebKit2/ChangeLog        2014-05-25 22:17:43 UTC (rev 169324)
</span><span class="lines">@@ -1,3 +1,15 @@
</span><ins>+2014-05-25  Benjamin Poulain  &lt;bpoulain@apple.com&gt;
+
+        [iOS][WK2] Use ScrollView's scrollOffset as the unobscuredContentRect
+        https://bugs.webkit.org/show_bug.cgi?id=133262
+
+        Reviewed by Simon Fraser.
+
+        * WebProcess/WebPage/ios/WebPageIOS.mm:
+        (WebKit::WebPage::dynamicViewportSizeUpdate):
+        (WebKit::WebPage::viewportConfigurationChanged):
+        (WebKit::WebPage::updateVisibleContentRects):
+
</ins><span class="cx"> 2014-05-25  Sam Weinig  &lt;sam@webkit.org&gt;
</span><span class="cx"> 
</span><span class="cx">         Build fix 2.
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebPageiosWebPageIOSmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm (169323 => 169324)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm        2014-05-25 19:54:54 UTC (rev 169323)
+++ trunk/Source/WebKit2/WebProcess/WebPage/ios/WebPageIOS.mm        2014-05-25 22:17:43 UTC (rev 169324)
</span><span class="lines">@@ -2129,7 +2129,7 @@
</span><span class="cx">     frameView.setScrollVelocity(0, 0, 0, monotonicallyIncreasingTime());
</span><span class="cx"> 
</span><span class="cx">     IntRect roundedUnobscuredContentRect = roundedIntRect(newUnobscuredContentRect);
</span><del>-    frameView.setUnobscuredContentRect(roundedUnobscuredContentRect);
</del><ins>+    frameView.setUnobscuredContentSize(roundedUnobscuredContentRect.size());
</ins><span class="cx">     m_drawingArea-&gt;setExposedContentRect(newExposedContentRect);
</span><span class="cx"> 
</span><span class="cx">     scalePage(scale, roundedUnobscuredContentRect.location());
</span><span class="lines">@@ -2184,13 +2184,12 @@
</span><span class="cx">         FloatSize minimumLayoutSizeInScrollViewCoordinates = m_viewportConfiguration.activeMinimumLayoutSizeInScrollViewCoordinates();
</span><span class="cx">         minimumLayoutSizeInScrollViewCoordinates.scale(1 / scale);
</span><span class="cx">         IntSize minimumLayoutSizeInDocumentCoordinates = roundedIntSize(minimumLayoutSizeInScrollViewCoordinates);
</span><del>-        IntRect unobscuredContentRect(scrollPosition, minimumLayoutSizeInDocumentCoordinates);
-        frameView.setUnobscuredContentRect(unobscuredContentRect);
</del><ins>+        frameView.setUnobscuredContentSize(minimumLayoutSizeInDocumentCoordinates);
</ins><span class="cx">         frameView.setScrollVelocity(0, 0, 0, monotonicallyIncreasingTime());
</span><span class="cx"> 
</span><span class="cx">         // FIXME: We could send down the obscured margins to find a better exposed rect and unobscured rect.
</span><span class="cx">         // It is not a big deal at the moment because the tile coverage will always extend past the obscured bottom inset.
</span><del>-        m_drawingArea-&gt;setExposedContentRect(unobscuredContentRect);
</del><ins>+        m_drawingArea-&gt;setExposedContentRect(IntRect(scrollPosition, minimumLayoutSizeInDocumentCoordinates));
</ins><span class="cx">     }
</span><span class="cx">     scalePage(scale, scrollPosition);
</span><span class="cx">     
</span><span class="lines">@@ -2297,10 +2296,10 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     FrameView&amp; frameView = *m_page-&gt;mainFrame().view();
</span><del>-    if (scrollPosition != IntPoint(frameView.scrollOffset()))
</del><ins>+    if (scrollPosition != frameView.scrollPosition())
</ins><span class="cx">         m_dynamicSizeUpdateHistory.clear();
</span><span class="cx"> 
</span><del>-    frameView.setUnobscuredContentRect(roundedUnobscuredRect);
</del><ins>+    frameView.setUnobscuredContentSize(roundedUnobscuredRect.size());
</ins><span class="cx"> 
</span><span class="cx">     double horizontalVelocity = visibleContentRectUpdateInfo.horizontalVelocity();
</span><span class="cx">     double verticalVelocity = visibleContentRectUpdateInfo.verticalVelocity();
</span></span></pre>
</div>
</div>

</body>
</html>