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 "config.h" | 5 #include "config.h" |
| 6 | 6 |
| 7 #include "cc/layer_tree_host_impl.h" | 7 #include "cc/layer_tree_host_impl.h" |
| 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 274 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 285 return m_context.get(); | 285 return m_context.get(); |
| 286 } | 286 } |
| 287 | 287 |
| 288 void LayerTreeHostImpl::animate(base::TimeTicks monotonicTime, base::Time wallCl ockTime) | 288 void LayerTreeHostImpl::animate(base::TimeTicks monotonicTime, base::Time wallCl ockTime) |
| 289 { | 289 { |
| 290 animatePageScale(monotonicTime); | 290 animatePageScale(monotonicTime); |
| 291 animateLayers(monotonicTime, wallClockTime); | 291 animateLayers(monotonicTime, wallClockTime); |
| 292 animateScrollbars(monotonicTime); | 292 animateScrollbars(monotonicTime); |
| 293 } | 293 } |
| 294 | 294 |
| 295 void LayerTreeHostImpl::startPageScaleAnimation(gfx::Vector2d targetOffset, bool anchorPoint, float pageScale, base::TimeTicks startTime, base::TimeDelta durati on) | 295 void LayerTreeHostImpl::startPageScaleAnimation(gfx::Vector2d targetPosition, bo ol anchorPoint, float pageScale, base::TimeTicks startTime, base::TimeDelta dura tion) |
|
danakj
2012/11/09 05:06:49
call it targetOffset, or change the type to a Poin
| |
| 296 { | 296 { |
| 297 if (!m_rootScrollLayerImpl) | 297 if (!m_rootScrollLayerImpl) |
| 298 return; | 298 return; |
| 299 | 299 |
| 300 gfx::Vector2dF scrollTotal = m_rootScrollLayerImpl->scrollOffset() + m_rootS crollLayerImpl->scrollDelta(); | 300 gfx::Vector2dF scrollTotal = m_rootScrollLayerImpl->scrollOffset() + m_rootS crollLayerImpl->scrollDelta(); |
| 301 scrollTotal.Scale(m_pinchZoomViewport.pageScaleDelta()); | 301 gfx::SizeF scaledContentSize = contentSize(); |
| 302 float scaleTotal = m_pinchZoomViewport.totalPageScaleFactor(); | 302 if (!Settings::pageScalePinchZoomEnabled()) { |
| 303 gfx::Size scaledContentSize = gfx::ToFlooredSize(contentSize().Scale(m_pinch ZoomViewport.pageScaleDelta())); | 303 scrollTotal.Scale(1 / m_pinchZoomViewport.pageScaleFactor()); |
| 304 scaledContentSize = scaledContentSize.Scale(1 / m_pinchZoomViewport.page ScaleFactor()); | |
| 305 } | |
| 306 gfx::SizeF viewportSize = m_deviceViewportSize; | |
| 307 viewportSize = viewportSize.Scale(1 / m_deviceScaleFactor); | |
|
danakj
2012/11/09 05:06:49
Just use m_layoutViewportSize ?
| |
| 304 | 308 |
| 305 double startTimeSeconds = (startTime - base::TimeTicks()).InSecondsF(); | 309 double startTimeSeconds = (startTime - base::TimeTicks()).InSecondsF(); |
| 306 m_pageScaleAnimation = PageScaleAnimation::create(gfx::ToFlooredVector2d(scr ollTotal), scaleTotal, m_deviceViewportSize, scaledContentSize, startTimeSeconds ); | 310 m_pageScaleAnimation = PageScaleAnimation::create(scrollTotal, m_pinchZoomVi ewport.totalPageScaleFactor(), viewportSize, scaledContentSize, startTimeSeconds ); |
| 307 | 311 |
| 308 if (anchorPoint) { | 312 if (anchorPoint) { |
| 309 gfx::Vector2dF windowAnchor = targetOffset; | 313 gfx::Vector2dF anchor(targetPosition); |
| 310 windowAnchor.Scale(scaleTotal / pageScale); | 314 if (!Settings::pageScalePinchZoomEnabled()) |
| 311 windowAnchor -= scrollTotal; | 315 anchor.Scale(1 / pageScale); |
| 312 m_pageScaleAnimation->zoomWithAnchor(gfx::ToFlooredVector2d(windowAnchor ), pageScale, duration.InSecondsF()); | 316 m_pageScaleAnimation->zoomWithAnchor(anchor, pageScale, duration.InSecon dsF()); |
| 313 } else | 317 } else { |
| 314 m_pageScaleAnimation->zoomTo(targetOffset, pageScale, duration.InSeconds F()); | 318 gfx::Vector2dF scaledTargetPosition = targetPosition; |
|
danakj
2012/11/09 05:06:49
scaledTargetOffset
| |
| 319 if (!Settings::pageScalePinchZoomEnabled()) | |
| 320 scaledTargetPosition.Scale(1 / pageScale); | |
| 321 m_pageScaleAnimation->zoomTo(scaledTargetPosition, pageScale, duration.I nSecondsF()); | |
| 322 } | |
| 315 | 323 |
| 316 m_client->setNeedsRedrawOnImplThread(); | 324 m_client->setNeedsRedrawOnImplThread(); |
| 317 m_client->setNeedsCommitOnImplThread(); | 325 m_client->setNeedsCommitOnImplThread(); |
| 318 } | 326 } |
| 319 | 327 |
| 320 void LayerTreeHostImpl::scheduleAnimation() | 328 void LayerTreeHostImpl::scheduleAnimation() |
| 321 { | 329 { |
| 322 m_client->setNeedsRedrawOnImplThread(); | 330 m_client->setNeedsRedrawOnImplThread(); |
| 323 } | 331 } |
| 324 | 332 |
| (...skipping 914 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1239 m_pinchGestureActive = false; | 1247 m_pinchGestureActive = false; |
| 1240 | 1248 |
| 1241 if (m_rootScrollLayerImpl && m_rootScrollLayerImpl->scrollbarAnimationContro ller()) | 1249 if (m_rootScrollLayerImpl && m_rootScrollLayerImpl->scrollbarAnimationContro ller()) |
| 1242 m_rootScrollLayerImpl->scrollbarAnimationController()->didPinchGestureEn d(); | 1250 m_rootScrollLayerImpl->scrollbarAnimationController()->didPinchGestureEn d(); |
| 1243 | 1251 |
| 1244 m_client->setNeedsCommitOnImplThread(); | 1252 m_client->setNeedsCommitOnImplThread(); |
| 1245 } | 1253 } |
| 1246 | 1254 |
| 1247 void LayerTreeHostImpl::computeDoubleTapZoomDeltas(ScrollAndScaleSet* scrollInfo ) | 1255 void LayerTreeHostImpl::computeDoubleTapZoomDeltas(ScrollAndScaleSet* scrollInfo ) |
| 1248 { | 1256 { |
| 1249 float pageScale = m_pageScaleAnimation->finalPageScale(); | 1257 gfx::Vector2dF scaledScrollOffset = m_pageScaleAnimation->targetScrollOffset (); |
| 1250 gfx::Vector2dF scrollOffset = m_pageScaleAnimation->finalScrollOffset(); | 1258 if (!Settings::pageScalePinchZoomEnabled()) |
| 1251 scrollOffset.Scale(m_pinchZoomViewport.pageScaleFactor() / pageScale); | 1259 scaledScrollOffset.Scale(m_pinchZoomViewport.pageScaleFactor()); |
| 1252 makeScrollAndScaleSet(scrollInfo, gfx::ToRoundedVector2d(scrollOffset), page Scale); | 1260 makeScrollAndScaleSet(scrollInfo, ToFlooredVector2d(scaledScrollOffset), m_p ageScaleAnimation->targetPageScaleFactor()); |
| 1253 } | 1261 } |
| 1254 | 1262 |
| 1255 void LayerTreeHostImpl::computePinchZoomDeltas(ScrollAndScaleSet* scrollInfo) | 1263 void LayerTreeHostImpl::computePinchZoomDeltas(ScrollAndScaleSet* scrollInfo) |
| 1256 { | 1264 { |
| 1257 if (!m_rootScrollLayerImpl) | 1265 if (!m_rootScrollLayerImpl) |
| 1258 return; | 1266 return; |
| 1259 | 1267 |
| 1260 // Only send fake scroll/zoom deltas if we're pinch zooming out by a | 1268 // Only send fake scroll/zoom deltas if we're pinch zooming out by a |
| 1261 // significant amount. This also ensures only one fake delta set will be | 1269 // significant amount. This also ensures only one fake delta set will be |
| 1262 // sent. | 1270 // sent. |
| (...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1316 collectScrollDeltas(scrollInfo, layerImpl->children()[i]); | 1324 collectScrollDeltas(scrollInfo, layerImpl->children()[i]); |
| 1317 } | 1325 } |
| 1318 | 1326 |
| 1319 scoped_ptr<ScrollAndScaleSet> LayerTreeHostImpl::processScrollDeltas() | 1327 scoped_ptr<ScrollAndScaleSet> LayerTreeHostImpl::processScrollDeltas() |
| 1320 { | 1328 { |
| 1321 scoped_ptr<ScrollAndScaleSet> scrollInfo(new ScrollAndScaleSet()); | 1329 scoped_ptr<ScrollAndScaleSet> scrollInfo(new ScrollAndScaleSet()); |
| 1322 | 1330 |
| 1323 if (m_pinchGestureActive || m_pageScaleAnimation) { | 1331 if (m_pinchGestureActive || m_pageScaleAnimation) { |
| 1324 scrollInfo->pageScaleDelta = 1; | 1332 scrollInfo->pageScaleDelta = 1; |
| 1325 m_pinchZoomViewport.setSentPageScaleDelta(1); | 1333 m_pinchZoomViewport.setSentPageScaleDelta(1); |
| 1326 // FIXME(aelias): Make these painting optimizations compatible with | 1334 // FIXME(aelias): Make pinch-zoom painting optimization compatible with |
| 1327 // compositor-side scaling. | 1335 // compositor-side scaling. |
| 1328 if (!Settings::pageScalePinchZoomEnabled()) { | 1336 if (!Settings::pageScalePinchZoomEnabled() && m_pinchGestureActive) |
| 1329 if (m_pinchGestureActive) | 1337 computePinchZoomDeltas(scrollInfo.get()); |
| 1330 computePinchZoomDeltas(scrollInfo.get()); | 1338 else if (m_pageScaleAnimation.get()) |
| 1331 else if (m_pageScaleAnimation.get()) | 1339 computeDoubleTapZoomDeltas(scrollInfo.get()); |
| 1332 computeDoubleTapZoomDeltas(scrollInfo.get()); | |
| 1333 } | |
| 1334 return scrollInfo.Pass(); | 1340 return scrollInfo.Pass(); |
| 1335 } | 1341 } |
| 1336 | 1342 |
| 1337 collectScrollDeltas(scrollInfo.get(), m_rootLayerImpl.get()); | 1343 collectScrollDeltas(scrollInfo.get(), m_rootLayerImpl.get()); |
| 1338 scrollInfo->pageScaleDelta = m_pinchZoomViewport.pageScaleDelta(); | 1344 scrollInfo->pageScaleDelta = m_pinchZoomViewport.pageScaleDelta(); |
| 1339 m_pinchZoomViewport.setSentPageScaleDelta(scrollInfo->pageScaleDelta); | 1345 m_pinchZoomViewport.setSentPageScaleDelta(scrollInfo->pageScaleDelta); |
| 1340 | 1346 |
| 1341 return scrollInfo.Pass(); | 1347 return scrollInfo.Pass(); |
| 1342 } | 1348 } |
| 1343 | 1349 |
| (...skipping 12 matching lines...) Expand all Loading... | |
| 1356 } | 1362 } |
| 1357 | 1363 |
| 1358 void LayerTreeHostImpl::animatePageScale(base::TimeTicks time) | 1364 void LayerTreeHostImpl::animatePageScale(base::TimeTicks time) |
| 1359 { | 1365 { |
| 1360 if (!m_pageScaleAnimation || !m_rootScrollLayerImpl) | 1366 if (!m_pageScaleAnimation || !m_rootScrollLayerImpl) |
| 1361 return; | 1367 return; |
| 1362 | 1368 |
| 1363 double monotonicTime = (time - base::TimeTicks()).InSecondsF(); | 1369 double monotonicTime = (time - base::TimeTicks()).InSecondsF(); |
| 1364 gfx::Vector2dF scrollTotal = m_rootScrollLayerImpl->scrollOffset() + m_rootS crollLayerImpl->scrollDelta(); | 1370 gfx::Vector2dF scrollTotal = m_rootScrollLayerImpl->scrollOffset() + m_rootS crollLayerImpl->scrollDelta(); |
| 1365 | 1371 |
| 1366 setPageScaleDelta(m_pageScaleAnimation->pageScaleAtTime(monotonicTime) / m_p inchZoomViewport.pageScaleFactor()); | 1372 setPageScaleDelta(m_pageScaleAnimation->pageScaleFactorAtTime(monotonicTime) / m_pinchZoomViewport.pageScaleFactor()); |
| 1367 gfx::Vector2dF nextScroll = m_pageScaleAnimation->scrollOffsetAtTime(monoton icTime); | 1373 gfx::Vector2dF nextScroll = m_pageScaleAnimation->scrollOffsetAtTime(monoton icTime); |
| 1368 nextScroll.Scale(1 / m_pinchZoomViewport.pageScaleDelta()); | 1374 |
| 1375 if (!Settings::pageScalePinchZoomEnabled()) | |
| 1376 nextScroll.Scale(m_pinchZoomViewport.pageScaleFactor()); | |
| 1369 m_rootScrollLayerImpl->scrollBy(nextScroll - scrollTotal); | 1377 m_rootScrollLayerImpl->scrollBy(nextScroll - scrollTotal); |
| 1370 m_client->setNeedsRedrawOnImplThread(); | 1378 m_client->setNeedsRedrawOnImplThread(); |
| 1371 | 1379 |
| 1372 if (m_pageScaleAnimation->isAnimationCompleteAtTime(monotonicTime)) { | 1380 if (m_pageScaleAnimation->isAnimationCompleteAtTime(monotonicTime)) { |
| 1373 m_pageScaleAnimation.reset(); | 1381 m_pageScaleAnimation.reset(); |
| 1374 m_client->setNeedsCommitOnImplThread(); | 1382 m_client->setNeedsCommitOnImplThread(); |
| 1375 } | 1383 } |
| 1376 } | 1384 } |
| 1377 | 1385 |
| 1378 void LayerTreeHostImpl::animateLayers(base::TimeTicks monotonicTime, base::Time wallClockTime) | 1386 void LayerTreeHostImpl::animateLayers(base::TimeTicks monotonicTime, base::Time wallClockTime) |
| (...skipping 94 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 1473 ScrollbarAnimationController* scrollbarController = layer->scrollbarAnimatio nController(); | 1481 ScrollbarAnimationController* scrollbarController = layer->scrollbarAnimatio nController(); |
| 1474 double monotonicTime = (time - base::TimeTicks()).InSecondsF(); | 1482 double monotonicTime = (time - base::TimeTicks()).InSecondsF(); |
| 1475 if (scrollbarController && scrollbarController->animate(monotonicTime)) | 1483 if (scrollbarController && scrollbarController->animate(monotonicTime)) |
| 1476 m_client->setNeedsRedrawOnImplThread(); | 1484 m_client->setNeedsRedrawOnImplThread(); |
| 1477 | 1485 |
| 1478 for (size_t i = 0; i < layer->children().size(); ++i) | 1486 for (size_t i = 0; i < layer->children().size(); ++i) |
| 1479 animateScrollbarsRecursive(layer->children()[i], time); | 1487 animateScrollbarsRecursive(layer->children()[i], time); |
| 1480 } | 1488 } |
| 1481 | 1489 |
| 1482 } // namespace cc | 1490 } // namespace cc |
| OLD | NEW |