OLD | NEW |
---|---|
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 Loading... | |
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 |
OLD | NEW |