Chromium Code Reviews| 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 |