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 |