diff options
Diffstat (limited to 'Source/WebKit/chromium/src/NonCompositedContentHost.cpp')
| -rw-r--r-- | Source/WebKit/chromium/src/NonCompositedContentHost.cpp | 20 |
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() |
