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" |
(...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
257 } | 257 } |
258 | 258 |
259 void LayerTreeHostImpl::startPageScaleAnimation(gfx::Vector2d targetOffset, bool anchorPoint, float pageScale, base::TimeTicks startTime, base::TimeDelta durati on) | 259 void LayerTreeHostImpl::startPageScaleAnimation(gfx::Vector2d targetOffset, bool anchorPoint, float pageScale, base::TimeTicks startTime, base::TimeDelta durati on) |
260 { | 260 { |
261 if (!rootScrollLayer()) | 261 if (!rootScrollLayer()) |
262 return; | 262 return; |
263 | 263 |
264 gfx::Vector2dF scrollTotal = rootScrollLayer()->scrollOffset() + rootScrollL ayer()->scrollDelta(); | 264 gfx::Vector2dF scrollTotal = rootScrollLayer()->scrollOffset() + rootScrollL ayer()->scrollDelta(); |
265 gfx::SizeF scaledScrollableSize = activeTree()->ScrollableSize(); | 265 gfx::SizeF scaledScrollableSize = activeTree()->ScrollableSize(); |
266 if (!m_settings.pageScalePinchZoomEnabled) { | 266 if (!m_settings.pageScalePinchZoomEnabled) { |
267 scrollTotal.Scale(1 / m_pinchZoomViewport.page_scale_factor()); | 267 scrollTotal.Scale(1 / activeTree()->page_scale_factor()); |
268 scaledScrollableSize.Scale(1 / m_pinchZoomViewport.page_scale_factor()); | 268 scaledScrollableSize.Scale(1 / activeTree()->page_scale_factor()); |
269 } | 269 } |
270 gfx::SizeF viewportSize = gfx::ScaleSize(m_deviceViewportSize, 1 / m_deviceS caleFactor); | 270 gfx::SizeF viewportSize = gfx::ScaleSize(m_deviceViewportSize, 1 / m_deviceS caleFactor); |
271 | 271 |
272 double startTimeSeconds = (startTime - base::TimeTicks()).InSecondsF(); | 272 double startTimeSeconds = (startTime - base::TimeTicks()).InSecondsF(); |
273 m_pageScaleAnimation = PageScaleAnimation::create(scrollTotal, m_pinchZoomVi ewport.total_page_scale_factor(), viewportSize, scaledScrollableSize, startTimeS econds); | 273 m_pageScaleAnimation = PageScaleAnimation::create(scrollTotal, activeTree()- >total_page_scale_factor(), viewportSize, scaledScrollableSize, startTimeSeconds ); |
274 | 274 |
275 if (anchorPoint) { | 275 if (anchorPoint) { |
276 gfx::Vector2dF anchor(targetOffset); | 276 gfx::Vector2dF anchor(targetOffset); |
277 if (!m_settings.pageScalePinchZoomEnabled) | 277 if (!m_settings.pageScalePinchZoomEnabled) |
278 anchor.Scale(1 / pageScale); | 278 anchor.Scale(1 / pageScale); |
279 m_pageScaleAnimation->zoomWithAnchor(anchor, pageScale, duration.InSecon dsF()); | 279 m_pageScaleAnimation->zoomWithAnchor(anchor, pageScale, duration.InSecon dsF()); |
280 } else { | 280 } else { |
281 gfx::Vector2dF scaledTargetOffset = targetOffset; | 281 gfx::Vector2dF scaledTargetOffset = targetOffset; |
282 if (!m_settings.pageScalePinchZoomEnabled) | 282 if (!m_settings.pageScalePinchZoomEnabled) |
283 scaledTargetOffset.Scale(1 / pageScale); | 283 scaledTargetOffset.Scale(1 / pageScale); |
(...skipping 462 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
746 } | 746 } |
747 | 747 |
748 void LayerTreeHostImpl::OnCanDrawStateChangedForTree(LayerTreeImpl*) | 748 void LayerTreeHostImpl::OnCanDrawStateChangedForTree(LayerTreeImpl*) |
749 { | 749 { |
750 m_client->onCanDrawStateChanged(canDraw()); | 750 m_client->onCanDrawStateChanged(canDraw()); |
751 } | 751 } |
752 | 752 |
753 CompositorFrameMetadata LayerTreeHostImpl::makeCompositorFrameMetadata() const | 753 CompositorFrameMetadata LayerTreeHostImpl::makeCompositorFrameMetadata() const |
754 { | 754 { |
755 CompositorFrameMetadata metadata; | 755 CompositorFrameMetadata metadata; |
756 metadata.page_scale_factor = m_pinchZoomViewport.total_page_scale_factor(); | 756 metadata.page_scale_factor = activeTree()->total_page_scale_factor(); |
757 metadata.viewport_size = activeTree()->ScrollableViewportSize(); | 757 metadata.viewport_size = activeTree()->ScrollableViewportSize(); |
758 metadata.root_layer_size = activeTree()->ScrollableSize(); | 758 metadata.root_layer_size = activeTree()->ScrollableSize(); |
759 metadata.min_page_scale_factor = m_pinchZoomViewport.min_page_scale_factor() ; | 759 metadata.min_page_scale_factor = activeTree()->min_page_scale_factor(); |
760 metadata.max_page_scale_factor = m_pinchZoomViewport.max_page_scale_factor() ; | 760 metadata.max_page_scale_factor = activeTree()->max_page_scale_factor(); |
761 if (m_topControlsManager) { | 761 if (m_topControlsManager) { |
762 metadata.location_bar_offset = gfx::Vector2dF(0.f, m_topControlsManager- >controls_top_offset()); | 762 metadata.location_bar_offset = gfx::Vector2dF(0.f, m_topControlsManager- >controls_top_offset()); |
763 metadata.location_bar_content_translation = gfx::Vector2dF(0.f, m_topCon trolsManager->content_top_offset()); | 763 metadata.location_bar_content_translation = gfx::Vector2dF(0.f, m_topCon trolsManager->content_top_offset()); |
764 } | 764 } |
765 | 765 |
766 if (!rootScrollLayer()) | 766 if (!rootScrollLayer()) |
767 return metadata; | 767 return metadata; |
768 | 768 |
769 metadata.root_scroll_offset = rootScrollLayer()->scrollOffset() + rootScroll Layer()->scrollDelta(); | 769 metadata.root_scroll_offset = rootScrollLayer()->scrollOffset() + rootScroll Layer()->scrollDelta(); |
770 if (!m_settings.pageScalePinchZoomEnabled) | 770 if (!m_settings.pageScalePinchZoomEnabled) |
771 metadata.root_scroll_offset.Scale(1 / m_pinchZoomViewport.page_scale_fac tor()); | 771 metadata.root_scroll_offset.Scale(1 / activeTree()->page_scale_factor()) ; |
772 | 772 |
773 return metadata; | 773 return metadata; |
774 } | 774 } |
775 | 775 |
776 void LayerTreeHostImpl::drawLayers(FrameData& frame) | 776 void LayerTreeHostImpl::drawLayers(FrameData& frame) |
777 { | 777 { |
778 TRACE_EVENT0("cc", "LayerTreeHostImpl::drawLayers"); | 778 TRACE_EVENT0("cc", "LayerTreeHostImpl::drawLayers"); |
779 DCHECK(canDraw()); | 779 DCHECK(canDraw()); |
780 DCHECK(!frame.renderPasses.empty()); | 780 DCHECK(!frame.renderPasses.empty()); |
781 | 781 |
(...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
947 | 947 |
948 void LayerTreeHostImpl::activatePendingTree() | 948 void LayerTreeHostImpl::activatePendingTree() |
949 { | 949 { |
950 CHECK(m_pendingTree); | 950 CHECK(m_pendingTree); |
951 | 951 |
952 m_activeTree->PushPersistedState(m_pendingTree.get()); | 952 m_activeTree->PushPersistedState(m_pendingTree.get()); |
953 m_activeTree->SetRootLayer(TreeSynchronizer::synchronizeTrees(m_pendingTree- >RootLayer(), m_activeTree->DetachLayerTree(), m_activeTree.get())); | 953 m_activeTree->SetRootLayer(TreeSynchronizer::synchronizeTrees(m_pendingTree- >RootLayer(), m_activeTree->DetachLayerTree(), m_activeTree.get())); |
954 TreeSynchronizer::pushProperties(m_pendingTree->RootLayer(), m_activeTree->R ootLayer()); | 954 TreeSynchronizer::pushProperties(m_pendingTree->RootLayer(), m_activeTree->R ootLayer()); |
955 DCHECK(!m_recycleTree); | 955 DCHECK(!m_recycleTree); |
956 | 956 |
957 m_activeTree->SetPageScaleFactorAndLimits(m_pendingTree->page_scale_factor() , m_pendingTree->min_page_scale_factor(), m_pendingTree->max_page_scale_factor() ); | |
enne (OOO)
2013/01/28 21:03:46
Can you make a LayerTreeImpl -> LayerTreeImpl push
aelias_OOO_until_Jul13
2013/01/29 06:05:14
Done.
| |
958 m_activeTree->SetPageScaleDelta(m_activeTree->page_scale_delta() / m_activeT ree->sent_page_scale_delta()); | |
959 m_activeTree->set_sent_page_scale_delta(1); | |
960 | |
961 #if 0 | |
962 layer->setScrollDelta(layer->scrollDelta() - layer->sentScrollDelta()); | |
963 layer->setSentScrollDelta(gfx::Vector2d()); | |
964 #endif | |
965 | |
957 // This should match the property synchronization in | 966 // This should match the property synchronization in |
958 // LayerTreeHost::finishCommitOnImplThread(). | 967 // LayerTreeHost::finishCommitOnImplThread(). |
959 m_activeTree->set_source_frame_number(m_pendingTree->source_frame_number()); | 968 m_activeTree->set_source_frame_number(m_pendingTree->source_frame_number()); |
960 m_activeTree->set_background_color(m_pendingTree->background_color()); | 969 m_activeTree->set_background_color(m_pendingTree->background_color()); |
961 m_activeTree->set_has_transparent_background(m_pendingTree->has_transparent_ background()); | 970 m_activeTree->set_has_transparent_background(m_pendingTree->has_transparent_ background()); |
962 if (m_pendingTree->ContentsTexturesPurged()) | 971 if (m_pendingTree->ContentsTexturesPurged()) |
963 m_activeTree->SetContentsTexturesPurged(); | 972 m_activeTree->SetContentsTexturesPurged(); |
964 else | 973 else |
965 m_activeTree->ResetContentsTexturesPurged(); | 974 m_activeTree->ResetContentsTexturesPurged(); |
966 if (m_pendingTree->hud_layer()) | 975 if (m_pendingTree->hud_layer()) |
(...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1057 } | 1066 } |
1058 | 1067 |
1059 void LayerTreeHostImpl::setViewportSize(const gfx::Size& layoutViewportSize, con st gfx::Size& deviceViewportSize) | 1068 void LayerTreeHostImpl::setViewportSize(const gfx::Size& layoutViewportSize, con st gfx::Size& deviceViewportSize) |
1060 { | 1069 { |
1061 if (layoutViewportSize == m_layoutViewportSize && deviceViewportSize == m_de viceViewportSize) | 1070 if (layoutViewportSize == m_layoutViewportSize && deviceViewportSize == m_de viceViewportSize) |
1062 return; | 1071 return; |
1063 | 1072 |
1064 m_layoutViewportSize = layoutViewportSize; | 1073 m_layoutViewportSize = layoutViewportSize; |
1065 m_deviceViewportSize = deviceViewportSize; | 1074 m_deviceViewportSize = deviceViewportSize; |
1066 | 1075 |
1067 m_pinchZoomViewport.set_layout_viewport_size(layoutViewportSize); | |
1068 m_pinchZoomViewport.set_device_viewport_size(deviceViewportSize); | |
1069 | |
1070 updateMaxScrollOffset(); | 1076 updateMaxScrollOffset(); |
1071 | 1077 |
1072 if (m_renderer) | 1078 if (m_renderer) |
1073 m_renderer->viewportChanged(); | 1079 m_renderer->viewportChanged(); |
1074 | 1080 |
1075 m_client->onCanDrawStateChanged(canDraw()); | 1081 m_client->onCanDrawStateChanged(canDraw()); |
1076 } | 1082 } |
1077 | 1083 |
1078 static void adjustScrollsForPageScaleChange(LayerImpl* layerImpl, float pageScal eChange) | 1084 static void adjustScrollsForPageScaleChange(LayerImpl* layerImpl, float pageScal eChange) |
1079 { | 1085 { |
1080 if (!layerImpl) | 1086 if (!layerImpl) |
1081 return; | 1087 return; |
1082 | 1088 |
1083 if (layerImpl->scrollable()) { | 1089 if (layerImpl->scrollable()) { |
1084 // We need to convert impl-side scroll deltas to pageScale space. | 1090 // We need to convert impl-side scroll deltas to pageScale space. |
1085 gfx::Vector2dF scrollDelta = layerImpl->scrollDelta(); | 1091 gfx::Vector2dF scrollDelta = layerImpl->scrollDelta(); |
1086 scrollDelta.Scale(pageScaleChange); | 1092 scrollDelta.Scale(pageScaleChange); |
1087 layerImpl->setScrollDelta(scrollDelta); | 1093 layerImpl->setScrollDelta(scrollDelta); |
1088 } | 1094 } |
1089 | 1095 |
1090 for (size_t i = 0; i < layerImpl->children().size(); ++i) | 1096 for (size_t i = 0; i < layerImpl->children().size(); ++i) |
1091 adjustScrollsForPageScaleChange(layerImpl->children()[i], pageScaleChang e); | 1097 adjustScrollsForPageScaleChange(layerImpl->children()[i], pageScaleChang e); |
1092 } | 1098 } |
1093 | 1099 |
1094 void LayerTreeHostImpl::setDeviceScaleFactor(float deviceScaleFactor) | 1100 void LayerTreeHostImpl::setDeviceScaleFactor(float deviceScaleFactor) |
1095 { | 1101 { |
1096 if (deviceScaleFactor == m_deviceScaleFactor) | 1102 if (deviceScaleFactor == m_deviceScaleFactor) |
1097 return; | 1103 return; |
1098 m_deviceScaleFactor = deviceScaleFactor; | 1104 m_deviceScaleFactor = deviceScaleFactor; |
1099 m_pinchZoomViewport.set_device_scale_factor(m_deviceScaleFactor); | |
1100 | 1105 |
1101 updateMaxScrollOffset(); | 1106 updateMaxScrollOffset(); |
1102 } | 1107 } |
1103 | 1108 |
1104 float LayerTreeHostImpl::pageScaleFactor() const | |
1105 { | |
1106 return m_pinchZoomViewport.page_scale_factor(); | |
1107 } | |
1108 | |
1109 void LayerTreeHostImpl::setPageScaleFactorAndLimits(float pageScaleFactor, float minPageScaleFactor, float maxPageScaleFactor) | |
1110 { | |
1111 if (!pageScaleFactor) | |
1112 return; | |
1113 | |
1114 float pageScaleChange = pageScaleFactor / m_pinchZoomViewport.page_scale_fac tor(); | |
1115 m_pinchZoomViewport.SetPageScaleFactorAndLimits(pageScaleFactor, minPageScal eFactor, maxPageScaleFactor); | |
1116 | |
1117 if (!m_settings.pageScalePinchZoomEnabled && pageScaleChange != 1) | |
1118 adjustScrollsForPageScaleChange(rootScrollLayer(), pageScaleChange); | |
1119 | |
1120 // Clamp delta to limits and refresh display matrix. | |
1121 setPageScaleDelta(m_pinchZoomViewport.page_scale_delta() / m_pinchZoomViewpo rt.sent_page_scale_delta()); | |
1122 m_pinchZoomViewport.set_sent_page_scale_delta(1); | |
1123 } | |
1124 | |
1125 void LayerTreeHostImpl::setPageScaleDelta(float delta) | |
1126 { | |
1127 if (m_pinchZoomViewport.page_scale_delta() == delta) | |
1128 return; | |
1129 | |
1130 m_pinchZoomViewport.set_page_scale_delta(delta); | |
1131 | |
1132 updateMaxScrollOffset(); | |
1133 activeTree()->set_needs_update_draw_properties(); | |
1134 if (pendingTree()) | |
1135 pendingTree()->set_needs_update_draw_properties(); | |
1136 } | |
1137 | |
1138 void LayerTreeHostImpl::updateMaxScrollOffset() | 1109 void LayerTreeHostImpl::updateMaxScrollOffset() |
1139 { | 1110 { |
1140 activeTree()->UpdateMaxScrollOffset(); | 1111 activeTree()->UpdateMaxScrollOffset(); |
1141 } | 1112 } |
1142 | 1113 |
1143 void LayerTreeHostImpl::setActiveTreeNeedsUpdateDrawProperties() | 1114 void LayerTreeHostImpl::setActiveTreeNeedsUpdateDrawProperties() |
1144 { | 1115 { |
1145 activeTree()->set_needs_update_draw_properties(); | 1116 activeTree()->set_needs_update_draw_properties(); |
1146 } | 1117 } |
1147 | 1118 |
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1348 | 1319 |
1349 void LayerTreeHostImpl::pinchGestureUpdate(float magnifyDelta, gfx::Point anchor ) | 1320 void LayerTreeHostImpl::pinchGestureUpdate(float magnifyDelta, gfx::Point anchor ) |
1350 { | 1321 { |
1351 TRACE_EVENT0("cc", "LayerTreeHostImpl::pinchGestureUpdate"); | 1322 TRACE_EVENT0("cc", "LayerTreeHostImpl::pinchGestureUpdate"); |
1352 | 1323 |
1353 if (!rootScrollLayer()) | 1324 if (!rootScrollLayer()) |
1354 return; | 1325 return; |
1355 | 1326 |
1356 // Keep the center-of-pinch anchor specified by (x, y) in a stable | 1327 // Keep the center-of-pinch anchor specified by (x, y) in a stable |
1357 // position over the course of the magnify. | 1328 // position over the course of the magnify. |
1358 float pageScaleDelta = m_pinchZoomViewport.page_scale_delta(); | 1329 float pageScaleDelta = activeTree()->page_scale_delta(); |
1359 gfx::PointF previousScaleAnchor = gfx::ScalePoint(anchor, 1 / pageScaleDelta ); | 1330 gfx::PointF previousScaleAnchor = gfx::ScalePoint(anchor, 1 / pageScaleDelta ); |
1360 setPageScaleDelta(pageScaleDelta * magnifyDelta); | 1331 activeTree()->SetPageScaleDelta(pageScaleDelta * magnifyDelta); |
1361 pageScaleDelta = m_pinchZoomViewport.page_scale_delta(); | 1332 pageScaleDelta = activeTree()->page_scale_delta(); |
1362 gfx::PointF newScaleAnchor = gfx::ScalePoint(anchor, 1 / pageScaleDelta); | 1333 gfx::PointF newScaleAnchor = gfx::ScalePoint(anchor, 1 / pageScaleDelta); |
1363 gfx::Vector2dF move = previousScaleAnchor - newScaleAnchor; | 1334 gfx::Vector2dF move = previousScaleAnchor - newScaleAnchor; |
1364 | 1335 |
1365 m_previousPinchAnchor = anchor; | 1336 m_previousPinchAnchor = anchor; |
1366 | 1337 |
1367 if (m_settings.pageScalePinchZoomEnabled) { | 1338 if (m_settings.pageScalePinchZoomEnabled) |
1368 // Compute the application of the delta with respect to the current page zoom of the page. | 1339 move.Scale(1 / activeTree()->page_scale_factor()); |
1369 move.Scale(1 / m_pinchZoomViewport.page_scale_factor()); | |
1370 } | |
1371 | 1340 |
1372 rootScrollLayer()->scrollBy(move); | 1341 rootScrollLayer()->scrollBy(move); |
1373 | 1342 |
1374 if (rootScrollLayer()->scrollbarAnimationController()) | 1343 if (rootScrollLayer()->scrollbarAnimationController()) |
1375 rootScrollLayer()->scrollbarAnimationController()->didPinchGestureUpdate (base::TimeTicks::Now()); | 1344 rootScrollLayer()->scrollbarAnimationController()->didPinchGestureUpdate (base::TimeTicks::Now()); |
1376 | 1345 |
1377 m_client->setNeedsCommitOnImplThread(); | 1346 m_client->setNeedsCommitOnImplThread(); |
1378 m_client->setNeedsRedrawOnImplThread(); | 1347 m_client->setNeedsRedrawOnImplThread(); |
1379 m_client->renewTreePriority(); | 1348 m_client->renewTreePriority(); |
1380 } | 1349 } |
1381 | 1350 |
1382 void LayerTreeHostImpl::pinchGestureEnd() | 1351 void LayerTreeHostImpl::pinchGestureEnd() |
1383 { | 1352 { |
1384 m_pinchGestureActive = false; | 1353 m_pinchGestureActive = false; |
1385 | 1354 |
1386 if (rootScrollLayer() && rootScrollLayer()->scrollbarAnimationController()) | 1355 if (rootScrollLayer() && rootScrollLayer()->scrollbarAnimationController()) |
1387 rootScrollLayer()->scrollbarAnimationController()->didPinchGestureEnd(ba se::TimeTicks::Now()); | 1356 rootScrollLayer()->scrollbarAnimationController()->didPinchGestureEnd(ba se::TimeTicks::Now()); |
1388 | 1357 |
1389 m_client->setNeedsCommitOnImplThread(); | 1358 m_client->setNeedsCommitOnImplThread(); |
1390 } | 1359 } |
1391 | 1360 |
1361 static void collectScrollDeltas(ScrollAndScaleSet* scrollInfo, LayerImpl* layerI mpl) | |
1362 { | |
1363 if (!layerImpl) | |
1364 return; | |
1365 | |
1366 gfx::Vector2d scrollDelta = gfx::ToFlooredVector2d(layerImpl->scrollDelta()) ; | |
1367 if (!scrollDelta.IsZero()) { | |
1368 LayerTreeHostCommon::ScrollUpdateInfo scroll; | |
1369 scroll.layerId = layerImpl->id(); | |
1370 scroll.scrollDelta = scrollDelta; | |
1371 scrollInfo->scrolls.push_back(scroll); | |
1372 layerImpl->setSentScrollDelta(scrollDelta); | |
1373 } | |
1374 | |
1375 for (size_t i = 0; i < layerImpl->children().size(); ++i) | |
1376 collectScrollDeltas(scrollInfo, layerImpl->children()[i]); | |
1377 } | |
1378 | |
1392 void LayerTreeHostImpl::computeDoubleTapZoomDeltas(ScrollAndScaleSet* scrollInfo ) | 1379 void LayerTreeHostImpl::computeDoubleTapZoomDeltas(ScrollAndScaleSet* scrollInfo ) |
1393 { | 1380 { |
1394 gfx::Vector2dF scaledScrollOffset = m_pageScaleAnimation->targetScrollOffset (); | 1381 gfx::Vector2dF scaledScrollOffset = m_pageScaleAnimation->targetScrollOffset (); |
1395 if (!m_settings.pageScalePinchZoomEnabled) | 1382 if (!m_settings.pageScalePinchZoomEnabled) |
1396 scaledScrollOffset.Scale(m_pinchZoomViewport.page_scale_factor()); | 1383 scaledScrollOffset.Scale(activeTree()->page_scale_factor()); |
1397 makeScrollAndScaleSet(scrollInfo, ToFlooredVector2d(scaledScrollOffset), m_p ageScaleAnimation->targetPageScaleFactor()); | 1384 makeScrollAndScaleSet(scrollInfo, ToFlooredVector2d(scaledScrollOffset), m_p ageScaleAnimation->targetPageScaleFactor()); |
1398 } | 1385 } |
1399 | 1386 |
1400 void LayerTreeHostImpl::computePinchZoomDeltas(ScrollAndScaleSet* scrollInfo) | 1387 void LayerTreeHostImpl::computePinchZoomDeltas(ScrollAndScaleSet* scrollInfo) |
1401 { | 1388 { |
1402 if (!rootScrollLayer()) | 1389 if (!rootScrollLayer()) |
1403 return; | 1390 return; |
1404 | 1391 |
1405 // Only send fake scroll/zoom deltas if we're pinch zooming out by a | 1392 // Only send fake scroll/zoom deltas if we're pinch zooming out by a |
1406 // significant amount. This also ensures only one fake delta set will be | 1393 // significant amount. This also ensures only one fake delta set will be |
1407 // sent. | 1394 // sent. |
1408 const float pinchZoomOutSensitivity = 0.95f; | 1395 const float pinchZoomOutSensitivity = 0.95f; |
1409 if (m_pinchZoomViewport.page_scale_delta() > pinchZoomOutSensitivity) | 1396 if (activeTree()->page_scale_delta() > pinchZoomOutSensitivity) |
1410 return; | 1397 return; |
1411 | 1398 |
1412 // Compute where the scroll offset/page scale would be if fully pinch-zoomed | 1399 // Compute where the scroll offset/page scale would be if fully pinch-zoomed |
1413 // out from the anchor point. | 1400 // out from the anchor point. |
1414 gfx::Vector2dF scrollBegin = rootScrollLayer()->scrollOffset() + rootScrollL ayer()->scrollDelta(); | 1401 gfx::Vector2dF scrollBegin = rootScrollLayer()->scrollOffset() + rootScrollL ayer()->scrollDelta(); |
1415 scrollBegin.Scale(m_pinchZoomViewport.page_scale_delta()); | 1402 scrollBegin.Scale(activeTree()->page_scale_delta()); |
1416 float scaleBegin = m_pinchZoomViewport.total_page_scale_factor(); | 1403 float scaleBegin = activeTree()->total_page_scale_factor(); |
1417 float pageScaleDeltaToSend = m_pinchZoomViewport.min_page_scale_factor() / m _pinchZoomViewport.page_scale_factor(); | 1404 float pageScaleDeltaToSend = activeTree()->min_page_scale_factor() / activeT ree()->page_scale_factor(); |
1418 gfx::SizeF scaledScrollableSize = gfx::ScaleSize(activeTree()->ScrollableSiz e(), pageScaleDeltaToSend); | 1405 gfx::SizeF scaledScrollableSize = gfx::ScaleSize(activeTree()->ScrollableSiz e(), pageScaleDeltaToSend); |
1419 | 1406 |
1420 gfx::Vector2d anchorOffset = m_previousPinchAnchor.OffsetFromOrigin(); | 1407 gfx::Vector2d anchorOffset = m_previousPinchAnchor.OffsetFromOrigin(); |
1421 gfx::Vector2dF scrollEnd = scrollBegin + anchorOffset; | 1408 gfx::Vector2dF scrollEnd = scrollBegin + anchorOffset; |
1422 scrollEnd.Scale(m_pinchZoomViewport.min_page_scale_factor() / scaleBegin); | 1409 scrollEnd.Scale(activeTree()->min_page_scale_factor() / scaleBegin); |
1423 scrollEnd -= anchorOffset; | 1410 scrollEnd -= anchorOffset; |
1424 scrollEnd.ClampToMax(gfx::RectF(scaledScrollableSize).bottom_right() - gfx:: Rect(m_deviceViewportSize).bottom_right()); | 1411 scrollEnd.ClampToMax(gfx::RectF(scaledScrollableSize).bottom_right() - gfx:: Rect(m_deviceViewportSize).bottom_right()); |
1425 scrollEnd.ClampToMin(gfx::Vector2d()); | 1412 scrollEnd.ClampToMin(gfx::Vector2d()); |
1426 scrollEnd.Scale(1 / pageScaleDeltaToSend); | 1413 scrollEnd.Scale(1 / pageScaleDeltaToSend); |
1427 scrollEnd.Scale(m_deviceScaleFactor); | 1414 scrollEnd.Scale(m_deviceScaleFactor); |
1428 | 1415 |
1429 makeScrollAndScaleSet(scrollInfo, gfx::ToRoundedVector2d(scrollEnd), m_pinch ZoomViewport.min_page_scale_factor()); | 1416 makeScrollAndScaleSet(scrollInfo, gfx::ToRoundedVector2d(scrollEnd), activeT ree()->min_page_scale_factor()); |
1430 } | 1417 } |
1431 | 1418 |
1432 void LayerTreeHostImpl::makeScrollAndScaleSet(ScrollAndScaleSet* scrollInfo, gfx ::Vector2d scrollOffset, float pageScale) | 1419 void LayerTreeHostImpl::makeScrollAndScaleSet(ScrollAndScaleSet* scrollInfo, gfx ::Vector2d scrollOffset, float pageScale) |
1433 { | 1420 { |
1434 if (!rootScrollLayer()) | 1421 if (!rootScrollLayer()) |
1435 return; | 1422 return; |
1436 | 1423 |
1437 LayerTreeHostCommon::ScrollUpdateInfo scroll; | 1424 LayerTreeHostCommon::ScrollUpdateInfo scroll; |
1438 scroll.layerId = rootScrollLayer()->id(); | 1425 scroll.layerId = rootScrollLayer()->id(); |
1439 scroll.scrollDelta = scrollOffset - rootScrollLayer()->scrollOffset(); | 1426 scroll.scrollDelta = scrollOffset - rootScrollLayer()->scrollOffset(); |
1440 scrollInfo->scrolls.push_back(scroll); | 1427 scrollInfo->scrolls.push_back(scroll); |
1441 activeTree()->RootScrollLayer()->setSentScrollDelta(scroll.scrollDelta); | 1428 activeTree()->RootScrollLayer()->setSentScrollDelta(scroll.scrollDelta); |
1442 scrollInfo->pageScaleDelta = pageScale / m_pinchZoomViewport.page_scale_fact or(); | 1429 scrollInfo->pageScaleDelta = pageScale / activeTree()->page_scale_factor(); |
1443 m_pinchZoomViewport.set_sent_page_scale_delta(scrollInfo->pageScaleDelta); | 1430 activeTree()->set_sent_page_scale_delta(scrollInfo->pageScaleDelta); |
1444 } | |
1445 | |
1446 static void collectScrollDeltas(ScrollAndScaleSet* scrollInfo, LayerImpl* layerI mpl) | |
danakj
2013/01/28 20:29:03
didn't need to move this function did you?
aelias_OOO_until_Jul13
2013/01/29 06:05:14
Done.
| |
1447 { | |
1448 if (!layerImpl) | |
1449 return; | |
1450 | |
1451 gfx::Vector2d scrollDelta = gfx::ToFlooredVector2d(layerImpl->scrollDelta()) ; | |
1452 if (!scrollDelta.IsZero()) { | |
1453 LayerTreeHostCommon::ScrollUpdateInfo scroll; | |
1454 scroll.layerId = layerImpl->id(); | |
1455 scroll.scrollDelta = scrollDelta; | |
1456 scrollInfo->scrolls.push_back(scroll); | |
1457 layerImpl->setSentScrollDelta(scrollDelta); | |
1458 } | |
1459 | |
1460 for (size_t i = 0; i < layerImpl->children().size(); ++i) | |
1461 collectScrollDeltas(scrollInfo, layerImpl->children()[i]); | |
1462 } | 1431 } |
1463 | 1432 |
1464 scoped_ptr<ScrollAndScaleSet> LayerTreeHostImpl::processScrollDeltas() | 1433 scoped_ptr<ScrollAndScaleSet> LayerTreeHostImpl::processScrollDeltas() |
1465 { | 1434 { |
1466 scoped_ptr<ScrollAndScaleSet> scrollInfo(new ScrollAndScaleSet()); | 1435 scoped_ptr<ScrollAndScaleSet> scrollInfo(new ScrollAndScaleSet()); |
1467 | 1436 |
1468 if (!m_settings.pageScalePinchZoomEnabled && (m_pinchGestureActive || m_page ScaleAnimation)) { | 1437 if (!m_settings.pageScalePinchZoomEnabled && (m_pinchGestureActive || m_page ScaleAnimation)) { |
1469 scrollInfo->pageScaleDelta = 1; | 1438 scrollInfo->pageScaleDelta = 1; |
1470 m_pinchZoomViewport.set_sent_page_scale_delta(1); | 1439 activeTree()->set_sent_page_scale_delta(1); |
1471 if (m_pinchGestureActive) | 1440 if (m_pinchGestureActive) |
1472 computePinchZoomDeltas(scrollInfo.get()); | 1441 computePinchZoomDeltas(scrollInfo.get()); |
1473 else if (m_pageScaleAnimation.get()) | 1442 else if (m_pageScaleAnimation.get()) |
1474 computeDoubleTapZoomDeltas(scrollInfo.get()); | 1443 computeDoubleTapZoomDeltas(scrollInfo.get()); |
1475 return scrollInfo.Pass(); | 1444 return scrollInfo.Pass(); |
1476 } | 1445 } |
1477 | 1446 |
1478 collectScrollDeltas(scrollInfo.get(), rootLayer()); | 1447 collectScrollDeltas(scrollInfo.get(), rootLayer()); |
1479 scrollInfo->pageScaleDelta = m_pinchZoomViewport.page_scale_delta(); | 1448 scrollInfo->pageScaleDelta = activeTree()->page_scale_delta(); |
1480 m_pinchZoomViewport.set_sent_page_scale_delta(scrollInfo->pageScaleDelta); | 1449 activeTree()->set_sent_page_scale_delta(scrollInfo->pageScaleDelta); |
1481 | 1450 |
1482 return scrollInfo.Pass(); | 1451 return scrollInfo.Pass(); |
1483 } | 1452 } |
1484 | 1453 |
1485 gfx::Transform LayerTreeHostImpl::implTransform() const | |
1486 { | |
1487 return m_pinchZoomViewport.ImplTransform(m_settings.pageScalePinchZoomEnable d); | |
1488 } | |
1489 | |
1490 void LayerTreeHostImpl::setFullRootLayerDamage() | 1454 void LayerTreeHostImpl::setFullRootLayerDamage() |
1491 { | 1455 { |
1492 if (rootLayer()) { | 1456 if (rootLayer()) { |
1493 RenderSurfaceImpl* renderSurface = rootLayer()->renderSurface(); | 1457 RenderSurfaceImpl* renderSurface = rootLayer()->renderSurface(); |
1494 if (renderSurface) | 1458 if (renderSurface) |
1495 renderSurface->damageTracker()->forceFullDamageNextUpdate(); | 1459 renderSurface->damageTracker()->forceFullDamageNextUpdate(); |
1496 } | 1460 } |
1497 } | 1461 } |
1498 | 1462 |
1499 void LayerTreeHostImpl::animatePageScale(base::TimeTicks time) | 1463 void LayerTreeHostImpl::animatePageScale(base::TimeTicks time) |
1500 { | 1464 { |
1501 if (!m_pageScaleAnimation || !rootScrollLayer()) | 1465 if (!m_pageScaleAnimation || !rootScrollLayer()) |
1502 return; | 1466 return; |
1503 | 1467 |
1504 double monotonicTime = (time - base::TimeTicks()).InSecondsF(); | 1468 double monotonicTime = (time - base::TimeTicks()).InSecondsF(); |
1505 gfx::Vector2dF scrollTotal = rootScrollLayer()->scrollOffset() + rootScrollL ayer()->scrollDelta(); | 1469 gfx::Vector2dF scrollTotal = rootScrollLayer()->scrollOffset() + rootScrollL ayer()->scrollDelta(); |
1506 | 1470 |
1507 setPageScaleDelta(m_pageScaleAnimation->pageScaleFactorAtTime(monotonicTime) / m_pinchZoomViewport.page_scale_factor()); | 1471 activeTree()->SetPageScaleDelta(m_pageScaleAnimation->pageScaleFactorAtTime( monotonicTime) / activeTree()->page_scale_factor()); |
1508 gfx::Vector2dF nextScroll = m_pageScaleAnimation->scrollOffsetAtTime(monoton icTime); | 1472 gfx::Vector2dF nextScroll = m_pageScaleAnimation->scrollOffsetAtTime(monoton icTime); |
1509 | 1473 |
1510 if (!m_settings.pageScalePinchZoomEnabled) | 1474 if (!m_settings.pageScalePinchZoomEnabled) |
1511 nextScroll.Scale(m_pinchZoomViewport.page_scale_factor()); | 1475 nextScroll.Scale(activeTree()->page_scale_factor()); |
1512 rootScrollLayer()->scrollBy(nextScroll - scrollTotal); | 1476 rootScrollLayer()->scrollBy(nextScroll - scrollTotal); |
1513 m_client->setNeedsRedrawOnImplThread(); | 1477 m_client->setNeedsRedrawOnImplThread(); |
1514 | 1478 |
1515 if (m_pageScaleAnimation->isAnimationCompleteAtTime(monotonicTime)) { | 1479 if (m_pageScaleAnimation->isAnimationCompleteAtTime(monotonicTime)) { |
1516 m_pageScaleAnimation.reset(); | 1480 m_pageScaleAnimation.reset(); |
1517 m_client->setNeedsCommitOnImplThread(); | 1481 m_client->setNeedsCommitOnImplThread(); |
1518 } | 1482 } |
1519 } | 1483 } |
1520 | 1484 |
1521 void LayerTreeHostImpl::animateLayers(base::TimeTicks monotonicTime, base::Time wallClockTime) | 1485 void LayerTreeHostImpl::animateLayers(base::TimeTicks monotonicTime, base::Time wallClockTime) |
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1696 LayerImpl* layer = getNonCompositedContentLayerRecursive(tree->RootLayer()); | 1660 LayerImpl* layer = getNonCompositedContentLayerRecursive(tree->RootLayer()); |
1697 return layer ? layer->getPicture() : skia::RefPtr<SkPicture>(); | 1661 return layer ? layer->getPicture() : skia::RefPtr<SkPicture>(); |
1698 } | 1662 } |
1699 | 1663 |
1700 void LayerTreeHostImpl::savePaintTime(const base::TimeDelta& totalPaintTime) | 1664 void LayerTreeHostImpl::savePaintTime(const base::TimeDelta& totalPaintTime) |
1701 { | 1665 { |
1702 m_paintTimeCounter->SavePaintTime(totalPaintTime); | 1666 m_paintTimeCounter->SavePaintTime(totalPaintTime); |
1703 } | 1667 } |
1704 | 1668 |
1705 } // namespace cc | 1669 } // namespace cc |
OLD | NEW |