Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2449)

Unified Diff: Source/web/PinchViewports.cpp

Issue 23464035: Create Pinch Virtual Viewport scrollbar layers in Blink. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Change when viewport layers are registered. Created 7 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
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)

Powered by Google App Engine
This is Rietveld 408576698