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

Unified Diff: cc/layer_tree_host_impl.cc

Issue 11550035: Implement pinch-zoom scaling for main-frame scrollbars and pinch-zoom overlay scrollbars. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Added missing files. Created 8 years 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: cc/layer_tree_host_impl.cc
diff --git a/cc/layer_tree_host_impl.cc b/cc/layer_tree_host_impl.cc
index 01c2d2847dfa3c86a2ee4e9006691343ebad4c81..60dc9d5cda4a2d6ea12a33dc57905c3662b11f56 100644
--- a/cc/layer_tree_host_impl.cc
+++ b/cc/layer_tree_host_impl.cc
@@ -24,6 +24,7 @@
#include "cc/math_util.h"
#include "cc/overdraw_metrics.h"
#include "cc/page_scale_animation.h"
+#include "cc/pinch_zoom_scrollbars_manager.h"
#include "cc/prioritized_resource_manager.h"
#include "cc/quad_culler.h"
#include "cc/render_pass_draw_quad.h"
@@ -380,10 +381,25 @@ void LayerTreeHostImpl::trackDamageForAllSurfaces(LayerImpl* rootDrawLayer, cons
}
}
-void LayerTreeHostImpl::updateRootScrollLayerImplTransform()
+void LayerTreeHostImpl::updateImplTransformOnRootChildren()
{
if (rootScrollLayer()) {
- rootScrollLayer()->setImplTransform(implTransform());
+ for (size_t i = 0; i < rootLayer()->children().size(); ++i) {
+ LayerImpl* layerImpl = rootLayer()->children()[i];
+ if (layerImpl != static_cast<LayerImpl*>(activeTree()->pinch_zoom_scrollbar_vertical())
+ && layerImpl != static_cast<LayerImpl*>(activeTree()->pinch_zoom_scrollbar_horizontal()))
+ layerImpl->setImplTransform(implTransform());
+ }
+ }
+ // TODO(wjmaclean): make sure this is revised to work with multiple LayerTreeImpls.
enne (OOO) 2012/12/13 17:43:38 Whoa, why is the PinchZoomScrollbarsManager on the
wjmaclean 2012/12/13 18:26:50 OK, I will re-do with the manager on LTHI. I consi
+ PinchZoomScrollbarsManager* pinchZoomScrollbars = activeTree()->pinch_zoom_scrollbars_manager();
+ if (pinchZoomScrollbars) {
+ pinchZoomScrollbars->setPinchZoomViewportPosition(m_pinchZoomViewport.zoomedViewportOffset(), m_pinchZoomViewport.totalPageScaleFactor());
+ if (rootScrollLayer())
+ pinchZoomScrollbars->setRootScrollLayerOffset(
+ rootScrollLayer()->scrollOffset(), rootScrollLayer()->maxScrollOffset());
+ else
+ pinchZoomScrollbars->setRootScrollLayerOffset(gfx::Vector2d(), gfx::Vector2d());
}
}
@@ -407,7 +423,7 @@ void LayerTreeHostImpl::calculateRenderSurfaceLayerList(LayerList& renderSurface
DCHECK(rootLayer());
DCHECK(m_renderer); // For maxTextureSize.
{
- updateRootScrollLayerImplTransform();
+ updateImplTransformOnRootChildren();
TRACE_EVENT0("cc", "LayerTreeHostImpl::calcDrawEtc");
float pageScaleFactor = m_pinchZoomViewport.pageScaleFactor();
@@ -555,6 +571,7 @@ bool LayerTreeHostImpl::calculateRenderPasses(FrameData& frame)
} else if (it.representsItself() && !it->visibleContentRect().IsEmpty()) {
bool hasOcclusionFromOutsideTargetSurface;
bool implDrawTransformIsUnknown = false;
+
if (occlusionTracker.occluded(it->renderTarget(), it->visibleContentRect(), it->drawTransform(), implDrawTransformIsUnknown, it->drawableContentRect(), &hasOcclusionFromOutsideTargetSurface))
appendQuadsData.hadOcclusionFromOutsideTargetSurface |= hasOcclusionFromOutsideTargetSurface;
else {
@@ -884,6 +901,10 @@ void LayerTreeHostImpl::drawLayers(FrameData& frame)
if (m_activeTree->hud_layer())
m_activeTree->hud_layer()->updateHudTexture(m_resourceProvider.get());
+ PinchZoomScrollbarsManager* pinchZoomScrollbars = activeTree()->pinch_zoom_scrollbars_manager();
enne (OOO) 2012/12/13 17:43:38 I would like nearly all the changes in this file t
wjmaclean 2012/12/13 18:26:50 OK, I'll look into doing this. I had hoped this wo
+ if (pinchZoomScrollbars && m_pinchZoomViewport.pageScaleFactor() != 1)
+ pinchZoomScrollbars->updateThumbTextures(m_resourceProvider.get());
+
m_renderer->drawFrame(frame.renderPasses, frame.renderPassesById);
// The render passes should be consumed by the renderer.
@@ -1085,7 +1106,11 @@ void LayerTreeHostImpl::setViewportSize(const gfx::Size& layoutViewportSize, con
m_layoutViewportSize = layoutViewportSize;
m_deviceViewportSize = deviceViewportSize;
- m_pinchZoomViewport.setLayoutViewportSize(layoutViewportSize);
+ m_pinchZoomViewport.setLayoutViewportSize(m_layoutViewportSize);
+ // TODO(wjmaclean): make sure this is revised to work with multiple LayerTreeImpls.
+ PinchZoomScrollbarsManager* pinchZoomScrollbars = activeTree()->pinch_zoom_scrollbars_manager();
+ if (pinchZoomScrollbars)
+ pinchZoomScrollbars->setPinchZoomViewportBounds(layoutViewportSize);
updateMaxScrollOffset();
@@ -1117,6 +1142,10 @@ void LayerTreeHostImpl::setDeviceScaleFactor(float deviceScaleFactor)
return;
m_deviceScaleFactor = deviceScaleFactor;
m_pinchZoomViewport.setDeviceScaleFactor(m_deviceScaleFactor);
+ // TODO(wjmaclean): make sure this is revised to work with multiple LayerTreeImpls.
+ PinchZoomScrollbarsManager* pinchZoomScrollbars = activeTree()->pinch_zoom_scrollbars_manager();
+ if (pinchZoomScrollbars)
+ pinchZoomScrollbars->setDeviceScaleFactor(m_deviceScaleFactor);
updateMaxScrollOffset();
}
@@ -1163,6 +1192,14 @@ void LayerTreeHostImpl::updateMaxScrollOffset()
gfx::Size contentBounds = contentSize();
if (m_settings.pageScalePinchZoomEnabled) {
+ // TODO(wjmaclean): make sure this is revised to work with multiple LayerTreeImpls.
+ PinchZoomScrollbarsManager* pinchZoomScrollbars = activeTree()->pinch_zoom_scrollbars_manager();
+ if (pinchZoomScrollbars) {
+ if (!rootScrollLayer() || rootScrollLayer()->children().isEmpty())
+ pinchZoomScrollbars->setContentBounds(m_layoutViewportSize);
+ else
+ pinchZoomScrollbars->setContentBounds(contentSize());
+ }
// Pinch with pageScale scrolls entirely in layout space. contentSize
// returns the bounds including the page scale factor, so calculate the
// pre page-scale layout size here.
@@ -1261,6 +1298,11 @@ InputHandlerClient::ScrollStatus LayerTreeHostImpl::scrollBegin(gfx::Point viewp
m_scrollDeltaIsInViewportSpace = (type == Gesture);
m_numImplThreadScrolls++;
setNeedsUpdateDrawProperties();
+
+ PinchZoomScrollbarsManager* pinchZoomScrollbars = activeTree()->pinch_zoom_scrollbars_manager();
+ if (type == Gesture && pinchZoomScrollbars)
+ pinchZoomScrollbars->setEnabled(m_pinchZoomViewport.totalPageScaleFactor() != 1);
+
return ScrollStarted;
}
return ScrollIgnored;
@@ -1387,6 +1429,11 @@ void LayerTreeHostImpl::clearCurrentlyScrollingLayer()
void LayerTreeHostImpl::scrollEnd()
{
+ PinchZoomScrollbarsManager* pinchZoomScrollbars = activeTree()->pinch_zoom_scrollbars_manager();
+ if (pinchZoomScrollbars) {
+ pinchZoomScrollbars->setEnabled(false);
+ m_client->setNeedsRedrawOnImplThread();
+ }
clearCurrentlyScrollingLayer();
}
@@ -1428,6 +1475,10 @@ void LayerTreeHostImpl::pinchGestureUpdate(float magnifyDelta, gfx::Point anchor
if (rootScrollLayer()->scrollbarAnimationController())
rootScrollLayer()->scrollbarAnimationController()->didPinchGestureUpdate();
+ PinchZoomScrollbarsManager* pinchZoomScrollbars = activeTree()->pinch_zoom_scrollbars_manager();
+ if (pinchZoomScrollbars)
+ pinchZoomScrollbars->setEnabled(m_pinchZoomViewport.totalPageScaleFactor() != 1);
+
m_client->setNeedsCommitOnImplThread();
m_client->setNeedsRedrawOnImplThread();
setNeedsUpdateDrawProperties();
@@ -1440,6 +1491,10 @@ void LayerTreeHostImpl::pinchGestureEnd()
if (rootScrollLayer() && rootScrollLayer()->scrollbarAnimationController())
rootScrollLayer()->scrollbarAnimationController()->didPinchGestureEnd();
+ PinchZoomScrollbarsManager* pinchZoomScrollbars = activeTree()->pinch_zoom_scrollbars_manager();
+ if (pinchZoomScrollbars)
+ pinchZoomScrollbars->setEnabled(false);
+
m_client->setNeedsCommitOnImplThread();
}
« no previous file with comments | « cc/layer_tree_host_impl.h ('k') | cc/layer_tree_impl.h » ('j') | cc/pinch_zoom_scrollbar_layer.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698