| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (c) 2011, Google Inc. All rights reserved. | 2 * Copyright (c) 2011, Google Inc. All rights reserved. |
| 3 * | 3 * |
| 4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
| 5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
| 6 * met: | 6 * met: |
| 7 * | 7 * |
| 8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
| 9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
| 10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
| (...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 179 m_runState = RunState::RunningOnCompositorButNeedsUpdate; | 179 m_runState = RunState::RunningOnCompositorButNeedsUpdate; |
| 180 return true; | 180 return true; |
| 181 } | 181 } |
| 182 | 182 |
| 183 if ((targetPos - currentPosition()).isZero()) | 183 if ((targetPos - currentPosition()).isZero()) |
| 184 return false; | 184 return false; |
| 185 | 185 |
| 186 m_targetOffset = targetPos; | 186 m_targetOffset = targetPos; |
| 187 m_startTime = m_timeFunction(); | 187 m_startTime = m_timeFunction(); |
| 188 | 188 |
| 189 if (registerAndScheduleAnimation()) | 189 if (registerAndScheduleAnimation()) { |
| 190 m_runState = RunState::WaitingToSendToCompositor; | 190 if (m_scrollableArea->shouldScrollOnMainThread()) { |
| 191 createAnimationCurve(); |
| 192 m_runState = RunState::RunningOnMainThread; |
| 193 } else { |
| 194 m_runState = RunState::WaitingToSendToCompositor; |
| 195 } |
| 196 } |
| 191 | 197 |
| 192 return true; | 198 return true; |
| 193 } | 199 } |
| 194 | 200 |
| 195 void ScrollAnimator::adjustAnimationAndSetScrollPosition( | 201 void ScrollAnimator::adjustAnimationAndSetScrollPosition( |
| 196 IntSize adjustment, ScrollType scrollType) | 202 IntSize adjustment, ScrollType scrollType) |
| 197 { | 203 { |
| 198 DoublePoint adjustedPos = m_scrollableArea->clampScrollPosition( | 204 DoublePoint adjustedPos = m_scrollableArea->clampScrollPosition( |
| 199 m_scrollableArea->scrollPositionDouble() + adjustment); | 205 m_scrollableArea->scrollPositionDouble() + adjustment); |
| 200 IntSize actualAdjustment = roundedIntPoint(adjustedPos) - | 206 IntSize actualAdjustment = roundedIntPoint(adjustedPos) - |
| (...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 280 bool sentToCompositor = addAnimation(std::move(animation)); | 286 bool sentToCompositor = addAnimation(std::move(animation)); |
| 281 if (sentToCompositor) { | 287 if (sentToCompositor) { |
| 282 m_runState = RunState::RunningOnCompositor; | 288 m_runState = RunState::RunningOnCompositor; |
| 283 m_compositorAnimationId = animationId; | 289 m_compositorAnimationId = animationId; |
| 284 m_compositorAnimationGroupId = animationGroupId; | 290 m_compositorAnimationGroupId = animationGroupId; |
| 285 } | 291 } |
| 286 | 292 |
| 287 return sentToCompositor; | 293 return sentToCompositor; |
| 288 } | 294 } |
| 289 | 295 |
| 296 void ScrollAnimator::createAnimationCurve() |
| 297 { |
| 298 DCHECK(!m_animationCurve); |
| 299 m_animationCurve = adoptPtr(CompositorFactory::current().createScrollOffsetA
nimationCurve( |
| 300 compositorOffsetFromBlinkOffset(m_targetOffset), |
| 301 m_lastGranularity == ScrollByPixel ? |
| 302 CompositorScrollOffsetAnimationCurve::ScrollDurationInverseDelta : |
| 303 CompositorScrollOffsetAnimationCurve::ScrollDurationConstant)); |
| 304 m_animationCurve->setInitialValue(compositorOffsetFromBlinkOffset(currentPos
ition())); |
| 305 } |
| 306 |
| 290 void ScrollAnimator::updateCompositorAnimations() | 307 void ScrollAnimator::updateCompositorAnimations() |
| 291 { | 308 { |
| 292 ScrollAnimatorCompositorCoordinator::updateCompositorAnimations(); | 309 ScrollAnimatorCompositorCoordinator::updateCompositorAnimations(); |
| 310 if (m_runState == RunState::RunningOnMainThread) { |
| 311 // We add a temporary main thread scrolling reason so that subsequent |
| 312 // scrolls get handled on the main thread. This is removed when the |
| 313 // animation is finished in ::tickAnimation. |
| 314 addMainThreadScrollingReason(); |
| 315 return; |
| 316 } |
| 317 |
| 293 if (m_runState == RunState::PostAnimationCleanup) { | 318 if (m_runState == RunState::PostAnimationCleanup) { |
| 294 postAnimationCleanupAndReset(); | 319 postAnimationCleanupAndReset(); |
| 295 return; | 320 return; |
| 296 } | 321 } |
| 297 | 322 |
| 298 if (m_runState == RunState::WaitingToCancelOnCompositor) { | 323 if (m_runState == RunState::WaitingToCancelOnCompositor) { |
| 299 DCHECK(m_compositorAnimationId); | 324 DCHECK(m_compositorAnimationId); |
| 300 abortAnimation(); | 325 abortAnimation(); |
| 301 postAnimationCleanupAndReset(); | 326 postAnimationCleanupAndReset(); |
| 302 return; | 327 return; |
| (...skipping 28 matching lines...) Expand all Loading... |
| 331 if (m_runState == RunState::WaitingToCancelOnCompositorButNewScroll) | 356 if (m_runState == RunState::WaitingToCancelOnCompositorButNewScroll) |
| 332 m_animationCurve->setInitialValue(compositorOffsetFromBlinkOffset(cu
rrentPosition())); | 357 m_animationCurve->setInitialValue(compositorOffsetFromBlinkOffset(cu
rrentPosition())); |
| 333 | 358 |
| 334 m_runState = RunState::WaitingToSendToCompositor; | 359 m_runState = RunState::WaitingToSendToCompositor; |
| 335 } | 360 } |
| 336 | 361 |
| 337 if (m_runState == RunState::WaitingToSendToCompositor) { | 362 if (m_runState == RunState::WaitingToSendToCompositor) { |
| 338 if (!m_compositorAnimationAttachedToLayerId) | 363 if (!m_compositorAnimationAttachedToLayerId) |
| 339 reattachCompositorPlayerIfNeeded(getScrollableArea()->compositorAnim
ationTimeline()); | 364 reattachCompositorPlayerIfNeeded(getScrollableArea()->compositorAnim
ationTimeline()); |
| 340 | 365 |
| 341 if (!m_animationCurve) { | 366 if (!m_animationCurve) |
| 342 m_animationCurve = adoptPtr(CompositorFactory::current().createScrol
lOffsetAnimationCurve( | 367 createAnimationCurve(); |
| 343 compositorOffsetFromBlinkOffset(m_targetOffset), | |
| 344 m_lastGranularity == ScrollByPixel ? | |
| 345 CompositorScrollOffsetAnimationCurve::ScrollDurationInverseD
elta : | |
| 346 CompositorScrollOffsetAnimationCurve::ScrollDurationConstant
)); | |
| 347 m_animationCurve->setInitialValue(compositorOffsetFromBlinkOffset(cu
rrentPosition())); | |
| 348 } | |
| 349 | 368 |
| 350 bool runningOnMainThread = false; | 369 bool runningOnMainThread = false; |
| 351 bool sentToCompositor = sendAnimationToCompositor(); | 370 bool sentToCompositor = sendAnimationToCompositor(); |
| 352 if (!sentToCompositor) { | 371 if (!sentToCompositor) { |
| 353 runningOnMainThread = registerAndScheduleAnimation(); | 372 runningOnMainThread = registerAndScheduleAnimation(); |
| 354 if (runningOnMainThread) | 373 if (runningOnMainThread) |
| 355 m_runState = RunState::RunningOnMainThread; | 374 m_runState = RunState::RunningOnMainThread; |
| 356 } | 375 } |
| 357 | 376 |
| 358 // Main thread should deal with the scroll animations it started. | 377 // Main thread should deal with the scroll animations it started. |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 444 } | 463 } |
| 445 return true; | 464 return true; |
| 446 } | 465 } |
| 447 | 466 |
| 448 DEFINE_TRACE(ScrollAnimator) | 467 DEFINE_TRACE(ScrollAnimator) |
| 449 { | 468 { |
| 450 ScrollAnimatorBase::trace(visitor); | 469 ScrollAnimatorBase::trace(visitor); |
| 451 } | 470 } |
| 452 | 471 |
| 453 } // namespace blink | 472 } // namespace blink |
| OLD | NEW |