Index: Source/web/PinchViewports.cpp |
diff --git a/Source/web/PinchViewports.cpp b/Source/web/PinchViewports.cpp |
index e0ec3f47cdb8a2287c13c41aeae93de1320f3716..7513d973c261e667118ec4bd58ad98278df4c3c1 100644 |
--- a/Source/web/PinchViewports.cpp |
+++ b/Source/web/PinchViewports.cpp |
@@ -35,11 +35,14 @@ |
#include "WebViewImpl.h" |
#include "core/page/Frame.h" |
#include "core/page/FrameView.h" |
+#include "core/page/scrolling/ScrollingCoordinator.h" |
+#include "core/platform/Scrollbar.h" |
#include "core/platform/graphics/FloatSize.h" |
#include "core/platform/graphics/GraphicsLayer.h" |
#include "core/rendering/RenderLayerCompositor.h" |
#include "public/platform/Platform.h" |
#include "public/platform/WebCompositorSupport.h" |
+#include "public/platform/WebLayer.h" |
#include "public/platform/WebLayerTreeView.h" |
#include "public/platform/WebScrollbarLayer.h" |
@@ -67,7 +70,7 @@ PinchViewports::PinchViewports(WebViewImpl* owner) |
m_innerViewportContainerLayer->setMasksToBounds(false); |
m_innerViewportScrollLayer->platformLayer()->setScrollable(true); |
- |
+ m_innerViewportScrollLayer->platformLayer()->setScrollClipLayer(m_innerViewportContainerLayer->platformLayer()); |
m_innerViewportContainerLayer->addChild(m_pageScaleLayer.get()); |
m_pageScaleLayer->addChild(m_innerViewportScrollLayer.get()); |
@@ -136,9 +139,22 @@ void PinchViewports::setupScrollbar(WebScrollbar::Orientation orientation) |
bool isHorizontal = orientation == WebScrollbar::Horizontal; |
GraphicsLayer* scrollbarGraphicsLayer = isHorizontal ? |
m_overlayScrollbarHorizontal.get() : m_overlayScrollbarVertical.get(); |
+ OwnPtr<WebScrollbarLayer>& webScrollbarLayer = isHorizontal ? |
+ m_webOverlayScrollbarHorizontal : m_webOverlayScrollbarVertical; |
const int overlayScrollbarThickness = m_owner->settingsImpl()->pinchOverlayScrollbarThickness(); |
+ if (!webScrollbarLayer) { |
+ WebCore::ScrollingCoordinator* coordinator = m_owner->page()->scrollingCoordinator(); |
+ ASSERT(coordinator); |
+ WebCore::ScrollbarOrientation webcoreOrientation = isHorizontal ? WebCore::HorizontalScrollbar : WebCore::VerticalScrollbar; |
+ webScrollbarLayer = coordinator->createSolidColorScrollbarLayer(webcoreOrientation, overlayScrollbarThickness); |
+ |
+ webScrollbarLayer->setScrollLayer(m_innerViewportScrollLayer->platformLayer()); |
+ scrollbarGraphicsLayer->setContentsToPlatformLayer(webScrollbarLayer->layer()); |
+ scrollbarGraphicsLayer->setDrawsContent(false); |
+ } |
+ |
int xPosition = isHorizontal ? 0 : m_innerViewportContainerLayer->size().width() - overlayScrollbarThickness; |
int yPosition = isHorizontal ? m_innerViewportContainerLayer->size().height() - overlayScrollbarThickness : 0; |
int width = isHorizontal ? m_innerViewportContainerLayer->size().width() - overlayScrollbarThickness : overlayScrollbarThickness; |
@@ -150,26 +166,25 @@ void PinchViewports::setupScrollbar(WebScrollbar::Orientation orientation) |
void PinchViewports::registerViewportLayersWithTreeView(WebLayerTreeView* layerTreeView) const |
{ |
- if (!layerTreeView) |
- return; |
+ ASSERT(layerTreeView); |
WebCore::RenderLayerCompositor* compositor = m_owner->compositor(); |
+ GraphicsLayer* scrollLayer = compositor->scrollLayer(); |
+ GraphicsLayer* clipLayer = compositor->rootGraphicsLayer(); |
+ scrollLayer->platformLayer()->setScrollClipLayer(clipLayer->platformLayer()); |
+ |
ASSERT(compositor); |
- layerTreeView->registerPinchViewportLayers( |
- m_innerViewportContainerLayer->platformLayer(), |
+ layerTreeView->registerViewportLayers( |
m_pageScaleLayer->platformLayer(), |
m_innerViewportScrollLayer->platformLayer(), |
- compositor->scrollLayer()->platformLayer(), |
- m_overlayScrollbarHorizontal->platformLayer(), |
- m_overlayScrollbarVertical->platformLayer()); |
+ scrollLayer->platformLayer()); |
} |
void PinchViewports::clearViewportLayersForTreeView(WebLayerTreeView* layerTreeView) const |
{ |
- if (!layerTreeView) |
- return; |
+ ASSERT(layerTreeView); |
- layerTreeView->clearPinchViewportLayers(); |
+ layerTreeView->clearViewportLayers(); |
} |
void PinchViewports::notifyAnimationStarted(const GraphicsLayer*, double time) |