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

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: Rebase, fix include order. 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
« no previous file with comments | « Source/web/PinchViewports.h ('k') | Source/web/WebViewImpl.cpp » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/web/PinchViewports.cpp
diff --git a/Source/web/PinchViewports.cpp b/Source/web/PinchViewports.cpp
index e0ec3f47cdb8a2287c13c41aeae93de1320f3716..b139a32ed480b4c450f4b17d5eb14e72233e0d35 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"
@@ -68,7 +71,6 @@ PinchViewports::PinchViewports(WebViewImpl* owner)
m_innerViewportScrollLayer->platformLayer()->setScrollable(true);
-
m_innerViewportContainerLayer->addChild(m_pageScaleLayer.get());
m_pageScaleLayer->addChild(m_innerViewportScrollLayer.get());
m_innerViewportContainerLayer->addChild(m_overlayScrollbarHorizontal.get());
@@ -136,9 +138,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, false);
+
+ 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 +165,23 @@ 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();
+
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)
« no previous file with comments | « Source/web/PinchViewports.h ('k') | Source/web/WebViewImpl.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698