TiledBacking scrolling coverage can be unfairly limited for clients who do scrolling...
authortimothy_horton@apple.com <timothy_horton@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 11 Mar 2013 19:57:23 +0000 (19:57 +0000)
committertimothy_horton@apple.com <timothy_horton@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 11 Mar 2013 19:57:23 +0000 (19:57 +0000)
https://bugs.webkit.org/show_bug.cgi?id=111958
<rdar://problem/13356896>

Reviewed by Darin Adler.

Don't limit TiledBacking coverage if the client has opted into using
its exposed rect to allow scrolling above the web view.

* platform/graphics/TiledBacking.h:
* platform/graphics/ca/mac/TileController.h:
* rendering/RenderLayerBacking.cpp:
(WebCore::RenderLayerBacking::adjustTiledBackingCoverage):

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@145389 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WebCore/ChangeLog
Source/WebCore/platform/graphics/TiledBacking.h
Source/WebCore/platform/graphics/ca/mac/TileController.h
Source/WebCore/rendering/RenderLayerBacking.cpp

index a7b93f6..e5dc4eb 100644 (file)
@@ -1,3 +1,19 @@
+2013-03-11  Tim Horton  <timothy_horton@apple.com>
+
+        TiledBacking scrolling coverage can be unfairly limited for clients who do scrolling outside the web view
+        https://bugs.webkit.org/show_bug.cgi?id=111958
+        <rdar://problem/13356896>
+
+        Reviewed by Darin Adler.
+
+        Don't limit TiledBacking coverage if the client has opted into using
+        its exposed rect to allow scrolling above the web view.
+
+        * platform/graphics/TiledBacking.h:
+        * platform/graphics/ca/mac/TileController.h:
+        * rendering/RenderLayerBacking.cpp:
+        (WebCore::RenderLayerBacking::adjustTiledBackingCoverage):
+
 2013-03-11  Rajeev Sarvaria  <rsarvaria@blackberry.com>
 
         GetnUniform*vEXT (Robustness extension) passed incorrect parameter in WebGLRenderingContext
index d34ff39..5c5ca6b 100644 (file)
@@ -49,6 +49,7 @@ public:
 
     virtual void setExposedRect(const FloatRect&) = 0;
     virtual void setClipsToExposedRect(bool) = 0;
+    virtual bool clipsToExposedRect() = 0;
 
     virtual void prepopulateRect(const FloatRect&) = 0;
 
index 08bdd83..3c83dcf 100644 (file)
@@ -108,6 +108,7 @@ private:
     // TiledBacking member functions.
     virtual void setVisibleRect(const FloatRect&) OVERRIDE;
     virtual void setExposedRect(const FloatRect&) OVERRIDE;
+    virtual bool clipsToExposedRect() OVERRIDE { return m_clipsToExposedRect; }
     virtual void setClipsToExposedRect(bool) OVERRIDE;
     virtual void prepopulateRect(const FloatRect&) OVERRIDE;
     virtual void setIsInWindow(bool) OVERRIDE;
index 0c1259d..39dcdd8 100644 (file)
@@ -205,10 +205,11 @@ void RenderLayerBacking::adjustTiledBackingCoverage()
     Frame* frame = renderer()->frame();
     if (frame) {
         FrameView* frameView = frame->view();
-        if (frameView->horizontalScrollbarMode() != ScrollbarAlwaysOff)
+        bool clipsToExposedRect = tiledBacking()->clipsToExposedRect();
+        if (frameView->horizontalScrollbarMode() != ScrollbarAlwaysOff || clipsToExposedRect)
             tileCoverage |= TiledBacking::CoverageForHorizontalScrolling;
 
-        if (frameView->verticalScrollbarMode() != ScrollbarAlwaysOff)
+        if (frameView->verticalScrollbarMode() != ScrollbarAlwaysOff || clipsToExposedRect)
             tileCoverage |= TiledBacking::CoverageForVerticalScrolling;
 
         if (ScrollingCoordinator* scrollingCoordinator = scrollingCoordinatorFromLayer(m_owningLayer)) {