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

Side by Side 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright 2011 The Chromium Authors. All rights reserved. 1 // Copyright 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "cc/layer_tree_host_impl.h" 5 #include "cc/layer_tree_host_impl.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/basictypes.h" 9 #include "base/basictypes.h"
10 #include "base/debug/trace_event.h" 10 #include "base/debug/trace_event.h"
11 #include "base/json/json_writer.h" 11 #include "base/json/json_writer.h"
12 #include "cc/append_quads_data.h" 12 #include "cc/append_quads_data.h"
13 #include "cc/damage_tracker.h" 13 #include "cc/damage_tracker.h"
14 #include "cc/debug_rect_history.h" 14 #include "cc/debug_rect_history.h"
15 #include "cc/delay_based_time_source.h" 15 #include "cc/delay_based_time_source.h"
16 #include "cc/delegating_renderer.h" 16 #include "cc/delegating_renderer.h"
17 #include "cc/frame_rate_counter.h" 17 #include "cc/frame_rate_counter.h"
18 #include "cc/gl_renderer.h" 18 #include "cc/gl_renderer.h"
19 #include "cc/heads_up_display_layer_impl.h" 19 #include "cc/heads_up_display_layer_impl.h"
20 #include "cc/layer_iterator.h" 20 #include "cc/layer_iterator.h"
21 #include "cc/layer_tree_host.h" 21 #include "cc/layer_tree_host.h"
22 #include "cc/layer_tree_host_common.h" 22 #include "cc/layer_tree_host_common.h"
23 #include "cc/layer_tree_impl.h" 23 #include "cc/layer_tree_impl.h"
24 #include "cc/math_util.h" 24 #include "cc/math_util.h"
25 #include "cc/overdraw_metrics.h" 25 #include "cc/overdraw_metrics.h"
26 #include "cc/page_scale_animation.h" 26 #include "cc/page_scale_animation.h"
27 #include "cc/pinch_zoom_scrollbars_manager.h"
27 #include "cc/prioritized_resource_manager.h" 28 #include "cc/prioritized_resource_manager.h"
28 #include "cc/quad_culler.h" 29 #include "cc/quad_culler.h"
29 #include "cc/render_pass_draw_quad.h" 30 #include "cc/render_pass_draw_quad.h"
30 #include "cc/rendering_stats.h" 31 #include "cc/rendering_stats.h"
31 #include "cc/scrollbar_animation_controller.h" 32 #include "cc/scrollbar_animation_controller.h"
32 #include "cc/scrollbar_layer_impl.h" 33 #include "cc/scrollbar_layer_impl.h"
33 #include "cc/shared_quad_state.h" 34 #include "cc/shared_quad_state.h"
34 #include "cc/single_thread_proxy.h" 35 #include "cc/single_thread_proxy.h"
35 #include "cc/software_renderer.h" 36 #include "cc/software_renderer.h"
36 #include "cc/solid_color_draw_quad.h" 37 #include "cc/solid_color_draw_quad.h"
(...skipping 336 matching lines...) Expand 10 before | Expand all | Expand 10 after
373 // damage rect. The root damage rect is then used to scissor each surface. 374 // damage rect. The root damage rect is then used to scissor each surface.
374 375
375 for (int surfaceIndex = renderSurfaceLayerList.size() - 1; surfaceIndex >= 0 ; --surfaceIndex) { 376 for (int surfaceIndex = renderSurfaceLayerList.size() - 1; surfaceIndex >= 0 ; --surfaceIndex) {
376 LayerImpl* renderSurfaceLayer = renderSurfaceLayerList[surfaceIndex]; 377 LayerImpl* renderSurfaceLayer = renderSurfaceLayerList[surfaceIndex];
377 RenderSurfaceImpl* renderSurface = renderSurfaceLayer->renderSurface(); 378 RenderSurfaceImpl* renderSurface = renderSurfaceLayer->renderSurface();
378 DCHECK(renderSurface); 379 DCHECK(renderSurface);
379 renderSurface->damageTracker()->updateDamageTrackingState(renderSurface- >layerList(), renderSurfaceLayer->id(), renderSurface->surfacePropertyChangedOnl yFromDescendant(), renderSurface->contentRect(), renderSurfaceLayer->maskLayer() , renderSurfaceLayer->filters(), renderSurfaceLayer->filter().get()); 380 renderSurface->damageTracker()->updateDamageTrackingState(renderSurface- >layerList(), renderSurfaceLayer->id(), renderSurface->surfacePropertyChangedOnl yFromDescendant(), renderSurface->contentRect(), renderSurfaceLayer->maskLayer() , renderSurfaceLayer->filters(), renderSurfaceLayer->filter().get());
380 } 381 }
381 } 382 }
382 383
383 void LayerTreeHostImpl::updateRootScrollLayerImplTransform() 384 void LayerTreeHostImpl::updateImplTransformOnRootChildren()
384 { 385 {
385 if (rootScrollLayer()) { 386 if (rootScrollLayer()) {
386 rootScrollLayer()->setImplTransform(implTransform()); 387 for (size_t i = 0; i < rootLayer()->children().size(); ++i) {
388 LayerImpl* layerImpl = rootLayer()->children()[i];
389 if (layerImpl != static_cast<LayerImpl*>(activeTree()->pinch_zoom_sc rollbar_vertical())
390 && layerImpl != static_cast<LayerImpl*>(activeTree()->pinch_zoom _scrollbar_horizontal()))
391 layerImpl->setImplTransform(implTransform());
392 }
393 }
394 // TODO(wjmaclean): make sure this is revised to work with multiple LayerTre eImpls.
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
395 PinchZoomScrollbarsManager* pinchZoomScrollbars = activeTree()->pinch_zoom_s crollbars_manager();
396 if (pinchZoomScrollbars) {
397 pinchZoomScrollbars->setPinchZoomViewportPosition(m_pinchZoomViewport.zo omedViewportOffset(), m_pinchZoomViewport.totalPageScaleFactor());
398 if (rootScrollLayer())
399 pinchZoomScrollbars->setRootScrollLayerOffset(
400 rootScrollLayer()->scrollOffset(), rootScrollLayer()->maxScrollO ffset());
401 else
402 pinchZoomScrollbars->setRootScrollLayerOffset(gfx::Vector2d(), gfx:: Vector2d());
387 } 403 }
388 } 404 }
389 405
390 void LayerTreeHostImpl::updateDrawProperties() 406 void LayerTreeHostImpl::updateDrawProperties()
391 { 407 {
392 if (!needsUpdateDrawProperties()) 408 if (!needsUpdateDrawProperties())
393 return; 409 return;
394 410
395 m_renderSurfaceLayerList.clear(); 411 m_renderSurfaceLayerList.clear();
396 m_needsUpdateDrawProperties = false; 412 m_needsUpdateDrawProperties = false;
397 413
398 if (!rootLayer()) 414 if (!rootLayer())
399 return; 415 return;
400 416
401 calculateRenderSurfaceLayerList(m_renderSurfaceLayerList); 417 calculateRenderSurfaceLayerList(m_renderSurfaceLayerList);
402 } 418 }
403 419
404 void LayerTreeHostImpl::calculateRenderSurfaceLayerList(LayerList& renderSurface LayerList) 420 void LayerTreeHostImpl::calculateRenderSurfaceLayerList(LayerList& renderSurface LayerList)
405 { 421 {
406 DCHECK(renderSurfaceLayerList.empty()); 422 DCHECK(renderSurfaceLayerList.empty());
407 DCHECK(rootLayer()); 423 DCHECK(rootLayer());
408 DCHECK(m_renderer); // For maxTextureSize. 424 DCHECK(m_renderer); // For maxTextureSize.
409 { 425 {
410 updateRootScrollLayerImplTransform(); 426 updateImplTransformOnRootChildren();
411 427
412 TRACE_EVENT0("cc", "LayerTreeHostImpl::calcDrawEtc"); 428 TRACE_EVENT0("cc", "LayerTreeHostImpl::calcDrawEtc");
413 float pageScaleFactor = m_pinchZoomViewport.pageScaleFactor(); 429 float pageScaleFactor = m_pinchZoomViewport.pageScaleFactor();
414 LayerTreeHostCommon::calculateDrawProperties(rootLayer(), deviceViewport Size(), m_deviceScaleFactor, pageScaleFactor, rendererCapabilities().maxTextureS ize, renderSurfaceLayerList); 430 LayerTreeHostCommon::calculateDrawProperties(rootLayer(), deviceViewport Size(), m_deviceScaleFactor, pageScaleFactor, rendererCapabilities().maxTextureS ize, renderSurfaceLayerList);
415 } 431 }
416 } 432 }
417 433
418 void LayerTreeHostImpl::FrameData::appendRenderPass(scoped_ptr<RenderPass> rende rPass) 434 void LayerTreeHostImpl::FrameData::appendRenderPass(scoped_ptr<RenderPass> rende rPass)
419 { 435 {
420 RenderPass* pass = renderPass.get(); 436 RenderPass* pass = renderPass.get();
(...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after
548 564
549 AppendQuadsData appendQuadsData(targetRenderPass->id); 565 AppendQuadsData appendQuadsData(targetRenderPass->id);
550 566
551 if (it.representsContributingRenderSurface()) { 567 if (it.representsContributingRenderSurface()) {
552 RenderPass::Id contributingRenderPassId = it->renderSurface()->rende rPassId(); 568 RenderPass::Id contributingRenderPassId = it->renderSurface()->rende rPassId();
553 RenderPass* contributingRenderPass = frame.renderPassesById.get(cont ributingRenderPassId); 569 RenderPass* contributingRenderPass = frame.renderPassesById.get(cont ributingRenderPassId);
554 appendQuadsForRenderSurfaceLayer(targetRenderPass, *it, contributing RenderPass, occlusionTracker, appendQuadsData); 570 appendQuadsForRenderSurfaceLayer(targetRenderPass, *it, contributing RenderPass, occlusionTracker, appendQuadsData);
555 } else if (it.representsItself() && !it->visibleContentRect().IsEmpty()) { 571 } else if (it.representsItself() && !it->visibleContentRect().IsEmpty()) {
556 bool hasOcclusionFromOutsideTargetSurface; 572 bool hasOcclusionFromOutsideTargetSurface;
557 bool implDrawTransformIsUnknown = false; 573 bool implDrawTransformIsUnknown = false;
574
558 if (occlusionTracker.occluded(it->renderTarget(), it->visibleContent Rect(), it->drawTransform(), implDrawTransformIsUnknown, it->drawableContentRect (), &hasOcclusionFromOutsideTargetSurface)) 575 if (occlusionTracker.occluded(it->renderTarget(), it->visibleContent Rect(), it->drawTransform(), implDrawTransformIsUnknown, it->drawableContentRect (), &hasOcclusionFromOutsideTargetSurface))
559 appendQuadsData.hadOcclusionFromOutsideTargetSurface |= hasOcclu sionFromOutsideTargetSurface; 576 appendQuadsData.hadOcclusionFromOutsideTargetSurface |= hasOcclu sionFromOutsideTargetSurface;
560 else { 577 else {
561 DCHECK_EQ(this->activeTree(), it->layerTreeImpl()); 578 DCHECK_EQ(this->activeTree(), it->layerTreeImpl());
562 it->willDraw(m_resourceProvider.get()); 579 it->willDraw(m_resourceProvider.get());
563 frame.willDrawLayers.push_back(*it); 580 frame.willDrawLayers.push_back(*it);
564 581
565 if (it->hasContributingDelegatedRenderPasses()) { 582 if (it->hasContributingDelegatedRenderPasses()) {
566 RenderPass::Id contributingRenderPassId = it->firstContribut ingRenderPassId(); 583 RenderPass::Id contributingRenderPassId = it->firstContribut ingRenderPassId();
567 while (frame.renderPassesById.contains(contributingRenderPas sId)) { 584 while (frame.renderPassesById.contains(contributingRenderPas sId)) {
(...skipping 309 matching lines...) Expand 10 before | Expand all | Expand 10 after
877 m_fpsCounter->markBeginningOfFrame(base::TimeTicks::Now()); 894 m_fpsCounter->markBeginningOfFrame(base::TimeTicks::Now());
878 895
879 if (m_debugState.showHudRects()) 896 if (m_debugState.showHudRects())
880 m_debugRectHistory->saveDebugRectsForCurrentFrame(rootLayer(), *frame.re nderSurfaceLayerList, frame.occludingScreenSpaceRects, frame.nonOccludingScreenS paceRects, m_debugState); 897 m_debugRectHistory->saveDebugRectsForCurrentFrame(rootLayer(), *frame.re nderSurfaceLayerList, frame.occludingScreenSpaceRects, frame.nonOccludingScreenS paceRects, m_debugState);
881 898
882 // Because the contents of the HUD depend on everything else in the frame, t he contents 899 // Because the contents of the HUD depend on everything else in the frame, t he contents
883 // of its texture are updated as the last thing before the frame is drawn. 900 // of its texture are updated as the last thing before the frame is drawn.
884 if (m_activeTree->hud_layer()) 901 if (m_activeTree->hud_layer())
885 m_activeTree->hud_layer()->updateHudTexture(m_resourceProvider.get()); 902 m_activeTree->hud_layer()->updateHudTexture(m_resourceProvider.get());
886 903
904 PinchZoomScrollbarsManager* pinchZoomScrollbars = activeTree()->pinch_zoom_s crollbars_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
905 if (pinchZoomScrollbars && m_pinchZoomViewport.pageScaleFactor() != 1)
906 pinchZoomScrollbars->updateThumbTextures(m_resourceProvider.get());
907
887 m_renderer->drawFrame(frame.renderPasses, frame.renderPassesById); 908 m_renderer->drawFrame(frame.renderPasses, frame.renderPassesById);
888 909
889 // The render passes should be consumed by the renderer. 910 // The render passes should be consumed by the renderer.
890 DCHECK(frame.renderPasses.empty()); 911 DCHECK(frame.renderPasses.empty());
891 DCHECK(frame.renderPassesById.empty()); 912 DCHECK(frame.renderPassesById.empty());
892 913
893 // The next frame should start by assuming nothing has changed, and changes are noted as they occur. 914 // The next frame should start by assuming nothing has changed, and changes are noted as they occur.
894 for (unsigned int i = 0; i < frame.renderSurfaceLayerList->size(); i++) 915 for (unsigned int i = 0; i < frame.renderSurfaceLayerList->size(); i++)
895 (*frame.renderSurfaceLayerList)[i]->renderSurface()->damageTracker()->di dDrawDamagedArea(); 916 (*frame.renderSurfaceLayerList)[i]->renderSurface()->damageTracker()->di dDrawDamagedArea();
896 rootLayer()->resetAllChangeTrackingForSubtree(); 917 rootLayer()->resetAllChangeTrackingForSubtree();
(...skipping 181 matching lines...) Expand 10 before | Expand all | Expand 10 after
1078 } 1099 }
1079 1100
1080 void LayerTreeHostImpl::setViewportSize(const gfx::Size& layoutViewportSize, con st gfx::Size& deviceViewportSize) 1101 void LayerTreeHostImpl::setViewportSize(const gfx::Size& layoutViewportSize, con st gfx::Size& deviceViewportSize)
1081 { 1102 {
1082 if (layoutViewportSize == m_layoutViewportSize && deviceViewportSize == m_de viceViewportSize) 1103 if (layoutViewportSize == m_layoutViewportSize && deviceViewportSize == m_de viceViewportSize)
1083 return; 1104 return;
1084 1105
1085 m_layoutViewportSize = layoutViewportSize; 1106 m_layoutViewportSize = layoutViewportSize;
1086 m_deviceViewportSize = deviceViewportSize; 1107 m_deviceViewportSize = deviceViewportSize;
1087 1108
1088 m_pinchZoomViewport.setLayoutViewportSize(layoutViewportSize); 1109 m_pinchZoomViewport.setLayoutViewportSize(m_layoutViewportSize);
1110 // TODO(wjmaclean): make sure this is revised to work with multiple LayerTre eImpls.
1111 PinchZoomScrollbarsManager* pinchZoomScrollbars = activeTree()->pinch_zoom_s crollbars_manager();
1112 if (pinchZoomScrollbars)
1113 pinchZoomScrollbars->setPinchZoomViewportBounds(layoutViewportSize);
1089 1114
1090 updateMaxScrollOffset(); 1115 updateMaxScrollOffset();
1091 1116
1092 if (m_renderer) 1117 if (m_renderer)
1093 m_renderer->viewportChanged(); 1118 m_renderer->viewportChanged();
1094 1119
1095 m_client->onCanDrawStateChanged(canDraw()); 1120 m_client->onCanDrawStateChanged(canDraw());
1096 } 1121 }
1097 1122
1098 static void adjustScrollsForPageScaleChange(LayerImpl* layerImpl, float pageScal eChange) 1123 static void adjustScrollsForPageScaleChange(LayerImpl* layerImpl, float pageScal eChange)
(...skipping 11 matching lines...) Expand all
1110 for (size_t i = 0; i < layerImpl->children().size(); ++i) 1135 for (size_t i = 0; i < layerImpl->children().size(); ++i)
1111 adjustScrollsForPageScaleChange(layerImpl->children()[i], pageScaleChang e); 1136 adjustScrollsForPageScaleChange(layerImpl->children()[i], pageScaleChang e);
1112 } 1137 }
1113 1138
1114 void LayerTreeHostImpl::setDeviceScaleFactor(float deviceScaleFactor) 1139 void LayerTreeHostImpl::setDeviceScaleFactor(float deviceScaleFactor)
1115 { 1140 {
1116 if (deviceScaleFactor == m_deviceScaleFactor) 1141 if (deviceScaleFactor == m_deviceScaleFactor)
1117 return; 1142 return;
1118 m_deviceScaleFactor = deviceScaleFactor; 1143 m_deviceScaleFactor = deviceScaleFactor;
1119 m_pinchZoomViewport.setDeviceScaleFactor(m_deviceScaleFactor); 1144 m_pinchZoomViewport.setDeviceScaleFactor(m_deviceScaleFactor);
1145 // TODO(wjmaclean): make sure this is revised to work with multiple LayerTre eImpls.
1146 PinchZoomScrollbarsManager* pinchZoomScrollbars = activeTree()->pinch_zoom_s crollbars_manager();
1147 if (pinchZoomScrollbars)
1148 pinchZoomScrollbars->setDeviceScaleFactor(m_deviceScaleFactor);
1120 1149
1121 updateMaxScrollOffset(); 1150 updateMaxScrollOffset();
1122 } 1151 }
1123 1152
1124 float LayerTreeHostImpl::pageScaleFactor() const 1153 float LayerTreeHostImpl::pageScaleFactor() const
1125 { 1154 {
1126 return m_pinchZoomViewport.pageScaleFactor(); 1155 return m_pinchZoomViewport.pageScaleFactor();
1127 } 1156 }
1128 1157
1129 void LayerTreeHostImpl::setPageScaleFactorAndLimits(float pageScaleFactor, float minPageScaleFactor, float maxPageScaleFactor) 1158 void LayerTreeHostImpl::setPageScaleFactorAndLimits(float pageScaleFactor, float minPageScaleFactor, float maxPageScaleFactor)
(...skipping 26 matching lines...) Expand all
1156 1185
1157 gfx::SizeF viewBounds = m_deviceViewportSize; 1186 gfx::SizeF viewBounds = m_deviceViewportSize;
1158 if (LayerImpl* clipLayer = rootScrollLayer()->parent()) { 1187 if (LayerImpl* clipLayer = rootScrollLayer()->parent()) {
1159 // Compensate for non-overlay scrollbars. 1188 // Compensate for non-overlay scrollbars.
1160 if (clipLayer->masksToBounds()) 1189 if (clipLayer->masksToBounds())
1161 viewBounds = gfx::ScaleSize(clipLayer->bounds(), m_deviceScaleFactor ); 1190 viewBounds = gfx::ScaleSize(clipLayer->bounds(), m_deviceScaleFactor );
1162 } 1191 }
1163 1192
1164 gfx::Size contentBounds = contentSize(); 1193 gfx::Size contentBounds = contentSize();
1165 if (m_settings.pageScalePinchZoomEnabled) { 1194 if (m_settings.pageScalePinchZoomEnabled) {
1195 // TODO(wjmaclean): make sure this is revised to work with multiple Laye rTreeImpls.
1196 PinchZoomScrollbarsManager* pinchZoomScrollbars = activeTree()->pinch_zo om_scrollbars_manager();
1197 if (pinchZoomScrollbars) {
1198 if (!rootScrollLayer() || rootScrollLayer()->children().isEmpty())
1199 pinchZoomScrollbars->setContentBounds(m_layoutViewportSize);
1200 else
1201 pinchZoomScrollbars->setContentBounds(contentSize());
1202 }
1166 // Pinch with pageScale scrolls entirely in layout space. contentSize 1203 // Pinch with pageScale scrolls entirely in layout space. contentSize
1167 // returns the bounds including the page scale factor, so calculate the 1204 // returns the bounds including the page scale factor, so calculate the
1168 // pre page-scale layout size here. 1205 // pre page-scale layout size here.
1169 float pageScaleFactor = m_pinchZoomViewport.pageScaleFactor(); 1206 float pageScaleFactor = m_pinchZoomViewport.pageScaleFactor();
1170 contentBounds.set_width(contentBounds.width() / pageScaleFactor); 1207 contentBounds.set_width(contentBounds.width() / pageScaleFactor);
1171 contentBounds.set_height(contentBounds.height() / pageScaleFactor); 1208 contentBounds.set_height(contentBounds.height() / pageScaleFactor);
1172 } else { 1209 } else {
1173 viewBounds.Scale(1 / m_pinchZoomViewport.pageScaleDelta()); 1210 viewBounds.Scale(1 / m_pinchZoomViewport.pageScaleDelta());
1174 } 1211 }
1175 1212
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
1254 } 1291 }
1255 1292
1256 if (potentiallyScrollingLayerImpl) { 1293 if (potentiallyScrollingLayerImpl) {
1257 m_activeTree->set_currently_scrolling_layer(potentiallyScrollingLayerImp l); 1294 m_activeTree->set_currently_scrolling_layer(potentiallyScrollingLayerImp l);
1258 // Gesture events need to be transformed from viewport coordinates to lo cal layer coordinates 1295 // Gesture events need to be transformed from viewport coordinates to lo cal layer coordinates
1259 // so that the scrolling contents exactly follow the user's finger. In c ontrast, wheel 1296 // so that the scrolling contents exactly follow the user's finger. In c ontrast, wheel
1260 // events are already in local layer coordinates so we can just apply th em directly. 1297 // events are already in local layer coordinates so we can just apply th em directly.
1261 m_scrollDeltaIsInViewportSpace = (type == Gesture); 1298 m_scrollDeltaIsInViewportSpace = (type == Gesture);
1262 m_numImplThreadScrolls++; 1299 m_numImplThreadScrolls++;
1263 setNeedsUpdateDrawProperties(); 1300 setNeedsUpdateDrawProperties();
1301
1302 PinchZoomScrollbarsManager* pinchZoomScrollbars = activeTree()->pinch_zo om_scrollbars_manager();
1303 if (type == Gesture && pinchZoomScrollbars)
1304 pinchZoomScrollbars->setEnabled(m_pinchZoomViewport.totalPageScaleFa ctor() != 1);
1305
1264 return ScrollStarted; 1306 return ScrollStarted;
1265 } 1307 }
1266 return ScrollIgnored; 1308 return ScrollIgnored;
1267 } 1309 }
1268 1310
1269 static gfx::Vector2dF scrollLayerWithViewportSpaceDelta(PinchZoomViewport* viewp ort, LayerImpl& layerImpl, float scaleFromViewportToScreenSpace, gfx::PointF vie wportPoint, gfx::Vector2dF viewportDelta) 1311 static gfx::Vector2dF scrollLayerWithViewportSpaceDelta(PinchZoomViewport* viewp ort, LayerImpl& layerImpl, float scaleFromViewportToScreenSpace, gfx::PointF vie wportPoint, gfx::Vector2dF viewportDelta)
1270 { 1312 {
1271 // Layers with non-invertible screen space transforms should not have passed the scroll hit 1313 // Layers with non-invertible screen space transforms should not have passed the scroll hit
1272 // test in the first place. 1314 // test in the first place.
1273 DCHECK(layerImpl.screenSpaceTransform().IsInvertible()); 1315 DCHECK(layerImpl.screenSpaceTransform().IsInvertible());
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
1380 return didScroll; 1422 return didScroll;
1381 } 1423 }
1382 1424
1383 void LayerTreeHostImpl::clearCurrentlyScrollingLayer() 1425 void LayerTreeHostImpl::clearCurrentlyScrollingLayer()
1384 { 1426 {
1385 m_activeTree->ClearCurrentlyScrollingLayer(); 1427 m_activeTree->ClearCurrentlyScrollingLayer();
1386 } 1428 }
1387 1429
1388 void LayerTreeHostImpl::scrollEnd() 1430 void LayerTreeHostImpl::scrollEnd()
1389 { 1431 {
1432 PinchZoomScrollbarsManager* pinchZoomScrollbars = activeTree()->pinch_zoom_s crollbars_manager();
1433 if (pinchZoomScrollbars) {
1434 pinchZoomScrollbars->setEnabled(false);
1435 m_client->setNeedsRedrawOnImplThread();
1436 }
1390 clearCurrentlyScrollingLayer(); 1437 clearCurrentlyScrollingLayer();
1391 } 1438 }
1392 1439
1393 void LayerTreeHostImpl::pinchGestureBegin() 1440 void LayerTreeHostImpl::pinchGestureBegin()
1394 { 1441 {
1395 m_pinchGestureActive = true; 1442 m_pinchGestureActive = true;
1396 m_previousPinchAnchor = gfx::Point(); 1443 m_previousPinchAnchor = gfx::Point();
1397 1444
1398 if (rootScrollLayer() && rootScrollLayer()->scrollbarAnimationController()) 1445 if (rootScrollLayer() && rootScrollLayer()->scrollbarAnimationController())
1399 rootScrollLayer()->scrollbarAnimationController()->didPinchGestureBegin( ); 1446 rootScrollLayer()->scrollbarAnimationController()->didPinchGestureBegin( );
(...skipping 21 matching lines...) Expand all
1421 // Compute the application of the delta with respect to the current page zoom of the page. 1468 // Compute the application of the delta with respect to the current page zoom of the page.
1422 move.Scale(1 / m_pinchZoomViewport.pageScaleFactor()); 1469 move.Scale(1 / m_pinchZoomViewport.pageScaleFactor());
1423 } 1470 }
1424 1471
1425 gfx::Vector2dF scrollOverflow = m_settings.pageScalePinchZoomEnabled ? m_pin chZoomViewport.applyScroll(move) : move; 1472 gfx::Vector2dF scrollOverflow = m_settings.pageScalePinchZoomEnabled ? m_pin chZoomViewport.applyScroll(move) : move;
1426 rootScrollLayer()->scrollBy(scrollOverflow); 1473 rootScrollLayer()->scrollBy(scrollOverflow);
1427 1474
1428 if (rootScrollLayer()->scrollbarAnimationController()) 1475 if (rootScrollLayer()->scrollbarAnimationController())
1429 rootScrollLayer()->scrollbarAnimationController()->didPinchGestureUpdate (); 1476 rootScrollLayer()->scrollbarAnimationController()->didPinchGestureUpdate ();
1430 1477
1478 PinchZoomScrollbarsManager* pinchZoomScrollbars = activeTree()->pinch_zoom_s crollbars_manager();
1479 if (pinchZoomScrollbars)
1480 pinchZoomScrollbars->setEnabled(m_pinchZoomViewport.totalPageScaleFactor () != 1);
1481
1431 m_client->setNeedsCommitOnImplThread(); 1482 m_client->setNeedsCommitOnImplThread();
1432 m_client->setNeedsRedrawOnImplThread(); 1483 m_client->setNeedsRedrawOnImplThread();
1433 setNeedsUpdateDrawProperties(); 1484 setNeedsUpdateDrawProperties();
1434 } 1485 }
1435 1486
1436 void LayerTreeHostImpl::pinchGestureEnd() 1487 void LayerTreeHostImpl::pinchGestureEnd()
1437 { 1488 {
1438 m_pinchGestureActive = false; 1489 m_pinchGestureActive = false;
1439 1490
1440 if (rootScrollLayer() && rootScrollLayer()->scrollbarAnimationController()) 1491 if (rootScrollLayer() && rootScrollLayer()->scrollbarAnimationController())
1441 rootScrollLayer()->scrollbarAnimationController()->didPinchGestureEnd(); 1492 rootScrollLayer()->scrollbarAnimationController()->didPinchGestureEnd();
1442 1493
1494 PinchZoomScrollbarsManager* pinchZoomScrollbars = activeTree()->pinch_zoom_s crollbars_manager();
1495 if (pinchZoomScrollbars)
1496 pinchZoomScrollbars->setEnabled(false);
1497
1443 m_client->setNeedsCommitOnImplThread(); 1498 m_client->setNeedsCommitOnImplThread();
1444 } 1499 }
1445 1500
1446 void LayerTreeHostImpl::computeDoubleTapZoomDeltas(ScrollAndScaleSet* scrollInfo ) 1501 void LayerTreeHostImpl::computeDoubleTapZoomDeltas(ScrollAndScaleSet* scrollInfo )
1447 { 1502 {
1448 gfx::Vector2dF scaledScrollOffset = m_pageScaleAnimation->targetScrollOffset (); 1503 gfx::Vector2dF scaledScrollOffset = m_pageScaleAnimation->targetScrollOffset ();
1449 if (!m_settings.pageScalePinchZoomEnabled) 1504 if (!m_settings.pageScalePinchZoomEnabled)
1450 scaledScrollOffset.Scale(m_pinchZoomViewport.pageScaleFactor()); 1505 scaledScrollOffset.Scale(m_pinchZoomViewport.pageScaleFactor());
1451 makeScrollAndScaleSet(scrollInfo, ToFlooredVector2d(scaledScrollOffset), m_p ageScaleAnimation->targetPageScaleFactor()); 1506 makeScrollAndScaleSet(scrollInfo, ToFlooredVector2d(scaledScrollOffset), m_p ageScaleAnimation->targetPageScaleFactor());
1452 } 1507 }
(...skipping 267 matching lines...) Expand 10 before | Expand all | Expand 10 after
1720 ScrollbarAnimationController* scrollbarController = layer->scrollbarAnimatio nController(); 1775 ScrollbarAnimationController* scrollbarController = layer->scrollbarAnimatio nController();
1721 double monotonicTime = (time - base::TimeTicks()).InSecondsF(); 1776 double monotonicTime = (time - base::TimeTicks()).InSecondsF();
1722 if (scrollbarController && scrollbarController->animate(monotonicTime)) 1777 if (scrollbarController && scrollbarController->animate(monotonicTime))
1723 m_client->setNeedsRedrawOnImplThread(); 1778 m_client->setNeedsRedrawOnImplThread();
1724 1779
1725 for (size_t i = 0; i < layer->children().size(); ++i) 1780 for (size_t i = 0; i < layer->children().size(); ++i)
1726 animateScrollbarsRecursive(layer->children()[i], time); 1781 animateScrollbarsRecursive(layer->children()[i], time);
1727 } 1782 }
1728 1783
1729 } // namespace cc 1784 } // namespace cc
OLDNEW
« 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