Title: [168811] branches/safari-538.34-branch/Source/WebCore

Diff

Modified: branches/safari-538.34-branch/Source/WebCore/ChangeLog (168810 => 168811)


--- branches/safari-538.34-branch/Source/WebCore/ChangeLog	2014-05-14 08:08:18 UTC (rev 168810)
+++ branches/safari-538.34-branch/Source/WebCore/ChangeLog	2014-05-14 08:11:06 UTC (rev 168811)
@@ -1,5 +1,37 @@
 2014-05-14  Lucas Forschler  <[email protected]>
 
+        Merge r168670
+
+    2014-05-12  Simon Fraser  <[email protected]>
+
+            [iOS] Fixed items are sometimes clipped after rubber-banding
+            https://bugs.webkit.org/show_bug.cgi?id=132851
+            <rdar://problem/16870790>
+
+            Reviewed by Benjamin Poulain.
+
+            On iOS fixed-position layers would get clipped to the document rect,
+            but with rubber-banding, we can now have a custom fixed postion rect
+            that extends outside the document rect.
+
+            Another issue was that we would un-composite fixed elements sometimes
+            when scrolling fast, again because they could fall outside of the document rect.
+
+            A final issue was that pinching could reveal parts of fixed elements that should
+            lie outside the viewport, rather than clipping the layers.
+
+            Fix by converting both call points to use viewportConstrainedVisibleContentRect()
+            rather than viewportConstrainedExtentRect(). On non-iOS platforms these are
+            the same, but on iOS viewportConstrainedVisibleContentRect() uses the
+            custom fixed position rect, which is the correct rect to intersect with.
+
+            * rendering/RenderLayerBacking.cpp:
+            (WebCore::RenderLayerBacking::updateCompositedBounds):
+            * rendering/RenderLayerCompositor.cpp:
+            (WebCore::RenderLayerCompositor::requiresCompositingForPosition):
+
+2014-05-14  Lucas Forschler  <[email protected]>
+
         Merge r168661
 
     2014-05-12  Simon Fraser  <[email protected]>

Modified: branches/safari-538.34-branch/Source/WebCore/rendering/RenderLayerBacking.cpp (168810 => 168811)


--- branches/safari-538.34-branch/Source/WebCore/rendering/RenderLayerBacking.cpp	2014-05-14 08:08:18 UTC (rev 168810)
+++ branches/safari-538.34-branch/Source/WebCore/rendering/RenderLayerBacking.cpp	2014-05-14 08:11:06 UTC (rev 168811)
@@ -455,7 +455,7 @@
 
         LayoutRect clippingBounds;
         if (renderer().style().position() == FixedPosition && renderer().container() == &view)
-            clippingBounds = view.frameView().viewportConstrainedExtentRect();
+            clippingBounds = view.frameView().viewportConstrainedVisibleContentRect();
         else
             clippingBounds = view.unscaledDocumentRect();
 

Modified: branches/safari-538.34-branch/Source/WebCore/rendering/RenderLayerCompositor.cpp (168810 => 168811)


--- branches/safari-538.34-branch/Source/WebCore/rendering/RenderLayerCompositor.cpp	2014-05-14 08:08:18 UTC (rev 168810)
+++ branches/safari-538.34-branch/Source/WebCore/rendering/RenderLayerCompositor.cpp	2014-05-14 08:11:06 UTC (rev 168811)
@@ -2629,7 +2629,7 @@
     }
 
     // Fixed position elements that are invisible in the current view don't get their own layer.
-    LayoutRect viewBounds = m_renderView.frameView().viewportConstrainedExtentRect();
+    LayoutRect viewBounds = m_renderView.frameView().viewportConstrainedVisibleContentRect();
     LayoutRect layerBounds = layer.calculateLayerBounds(&layer, 0, RenderLayer::UseLocalClipRectIfPossible | RenderLayer::IncludeLayerFilterOutsets | RenderLayer::UseFragmentBoxes
         | RenderLayer::ExcludeHiddenDescendants | RenderLayer::DontConstrainForMask | RenderLayer::IncludeCompositedDescendants);
     // Map to m_renderView to ignore page scale.
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to