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

Side by Side Diff: cc/layer_tree_host_impl.cc

Issue 12093015: Move page scale ownership to LayerTreeImpl. (Closed) Base URL: http://git.chromium.org/chromium/src.git@coordchange3
Patch Set: Created 7 years, 10 months 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
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"
(...skipping 246 matching lines...) Expand 10 before | Expand all | Expand 10 after
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
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698