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(); |
} |