summaryrefslogtreecommitdiff
path: root/Source/WebKit/chromium/src/NonCompositedContentHost.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'Source/WebKit/chromium/src/NonCompositedContentHost.cpp')
-rw-r--r--Source/WebKit/chromium/src/NonCompositedContentHost.cpp20
1 files changed, 20 insertions, 0 deletions
diff --git a/Source/WebKit/chromium/src/NonCompositedContentHost.cpp b/Source/WebKit/chromium/src/NonCompositedContentHost.cpp
index ae99ba889..9729d05ec 100644
--- a/Source/WebKit/chromium/src/NonCompositedContentHost.cpp
+++ b/Source/WebKit/chromium/src/NonCompositedContentHost.cpp
@@ -88,6 +88,20 @@ void NonCompositedContentHost::setScrollLayer(WebCore::GraphicsLayer* layer)
ASSERT(haveScrollLayer());
}
+static void setScrollbarBoundsContainPageScale(WebCore::GraphicsLayer* layer, WebCore::GraphicsLayer* clipLayer)
+{
+ // Scrollbars are attached outside the root clip rect, so skip the
+ // clipLayer subtree.
+ if (layer == clipLayer)
+ return;
+
+ for (size_t i = 0; i < layer->children().size(); ++i)
+ setScrollbarBoundsContainPageScale(layer->children()[i], clipLayer);
+
+ if (layer->children().isEmpty())
+ layer->setAppliesPageScale(true);
+}
+
void NonCompositedContentHost::setViewport(const WebCore::IntSize& viewportSize, const WebCore::IntSize& contentsSize, const WebCore::IntPoint& scrollPosition, const WebCore::IntPoint& scrollOrigin)
{
if (!haveScrollLayer())
@@ -119,6 +133,12 @@ void NonCompositedContentHost::setViewport(const WebCore::IntSize& viewportSize,
m_graphicsLayer->setNeedsDisplay();
} else if (visibleRectChanged)
m_graphicsLayer->setNeedsDisplay();
+
+ WebCore::GraphicsLayer* clipLayer = m_graphicsLayer->parent()->parent();
+ WebCore::GraphicsLayer* rootLayer = clipLayer;
+ while (rootLayer->parent())
+ rootLayer = rootLayer->parent();
+ setScrollbarBoundsContainPageScale(rootLayer, clipLayer);
}
bool NonCompositedContentHost::haveScrollLayer()