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

Side by Side Diff: cc/layer_tree_host_impl.cc

Issue 11090062: cc: Rewrite PageScaleAnimation for new coordinate system. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Address gfx::Size::Scale() currently not being mutating Created 8 years, 1 month 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 "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
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
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
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
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
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
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698