| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2010 Google Inc. All rights reserved. | 2 * Copyright (C) 2010 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 | 5 * modification, are permitted provided that the following conditions |
| 6 * are met: | 6 * are met: |
| 7 * | 7 * |
| 8 * 1. Redistributions of source code must retain the above copyright | 8 * 1. 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 * 2. Redistributions in binary form must reproduce the above copyright | 10 * 2. Redistributions in binary form must reproduce the above copyright |
| (...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 169 double curveIntegralAt(ScrollAnimatorNone::Curve, double t); | 169 double curveIntegralAt(ScrollAnimatorNone::Curve, double t); |
| 170 double attackArea(ScrollAnimatorNone::Curve, double startT, double endT); | 170 double attackArea(ScrollAnimatorNone::Curve, double startT, double endT); |
| 171 double releaseArea(ScrollAnimatorNone::Curve, double startT, double endT); | 171 double releaseArea(ScrollAnimatorNone::Curve, double startT, double endT); |
| 172 double attackCurve(ScrollAnimatorNone::Curve, double deltaT, double curveT,
double startPosition, double attackPosition); | 172 double attackCurve(ScrollAnimatorNone::Curve, double deltaT, double curveT,
double startPosition, double attackPosition); |
| 173 double releaseCurve(ScrollAnimatorNone::Curve, double deltaT, double curveT,
double releasePosition, double desiredPosition); | 173 double releaseCurve(ScrollAnimatorNone::Curve, double deltaT, double curveT,
double releasePosition, double desiredPosition); |
| 174 double curveDerivativeAt(ScrollAnimatorNone::Curve, double unitTime); | 174 double curveDerivativeAt(ScrollAnimatorNone::Curve, double unitTime); |
| 175 | 175 |
| 176 void curveTestInner(ScrollAnimatorNone::Curve, double step, double time); | 176 void curveTestInner(ScrollAnimatorNone::Curve, double step, double time); |
| 177 void curveTest(ScrollAnimatorNone::Curve); | 177 void curveTest(ScrollAnimatorNone::Curve); |
| 178 | 178 |
| 179 void checkDesiredPosition(float expectedPosition); |
| 180 void checkSoftLanding(float expectedPosition); |
| 181 |
| 179 static double kTickTime; | 182 static double kTickTime; |
| 180 static double kAnimationTime; | 183 static double kAnimationTime; |
| 181 static double kStartTime; | 184 static double kStartTime; |
| 182 static double kEndTime; | 185 static double kEndTime; |
| 183 float m_currentPosition; | 186 float m_currentPosition; |
| 184 MockScrollAnimatorNone m_mockScrollAnimatorNone; | 187 MockScrollAnimatorNone m_mockScrollAnimatorNone; |
| 188 bool m_scrollingDown; |
| 185 ScrollAnimatorNone::PerAxisData* m_data; | 189 ScrollAnimatorNone::PerAxisData* m_data; |
| 186 }; | 190 }; |
| 187 | 191 |
| 188 double ScrollAnimatorNoneTest::kTickTime = 1 / 60.0; | 192 double ScrollAnimatorNoneTest::kTickTime = 1 / 60.0; |
| 189 double ScrollAnimatorNoneTest::kAnimationTime = 0.01; | 193 double ScrollAnimatorNoneTest::kAnimationTime = 0.01; |
| 190 double ScrollAnimatorNoneTest::kStartTime = 10.0; | 194 double ScrollAnimatorNoneTest::kStartTime = 10.0; |
| 191 double ScrollAnimatorNoneTest::kEndTime = 20.0; | 195 double ScrollAnimatorNoneTest::kEndTime = 20.0; |
| 192 | 196 |
| 193 void ScrollAnimatorNoneTest::reset() | 197 void ScrollAnimatorNoneTest::reset() |
| 194 { | 198 { |
| 195 m_data->reset(); | 199 m_data->reset(); |
| 200 m_scrollingDown = true; |
| 196 } | 201 } |
| 197 | 202 |
| 198 bool ScrollAnimatorNoneTest::updateDataFromParameters(ScrollbarOrientation orien
tation, float step, float multiplier, float scrollableSize, double currentTime,
ScrollAnimatorNone::Parameters* parameters) | 203 bool ScrollAnimatorNoneTest::updateDataFromParameters(ScrollbarOrientation orien
tation, float step, float multiplier, float scrollableSize, double currentTime,
ScrollAnimatorNone::Parameters* parameters) |
| 199 { | 204 { |
| 205 m_scrollingDown = (step * multiplier > 0); |
| 206 |
| 200 double oldVelocity = m_data->m_currentVelocity; | 207 double oldVelocity = m_data->m_currentVelocity; |
| 201 double oldDesiredVelocity = m_data->m_desiredVelocity; | 208 double oldDesiredVelocity = m_data->m_desiredVelocity; |
| 202 double oldTimeLeft = m_data->m_animationTime - (m_data->m_lastAnimationTime
- m_data->m_startTime); | 209 double oldTimeLeft = m_data->m_animationTime - (m_data->m_lastAnimationTime
- m_data->m_startTime); |
| 203 bool result = m_data->updateDataFromParameters(orientation, step, multiplier
, scrollableSize, currentTime, parameters); | 210 bool result = m_data->updateDataFromParameters(orientation, step, multiplier
, scrollableSize, currentTime, parameters); |
| 204 EXPECT_LE(oldVelocity, m_data->m_currentVelocity); | 211 if (m_scrollingDown) |
| 212 EXPECT_LE(oldVelocity, m_data->m_currentVelocity); |
| 213 else |
| 214 EXPECT_GE(oldVelocity, m_data->m_currentVelocity); |
| 205 | 215 |
| 206 double deltaTime = m_data->m_lastAnimationTime - m_data->m_startTime; | 216 double deltaTime = m_data->m_lastAnimationTime - m_data->m_startTime; |
| 207 double timeLeft = m_data->m_animationTime - deltaTime; | 217 double timeLeft = m_data->m_animationTime - deltaTime; |
| 208 double releaseTimeLeft = std::min(timeLeft, m_data->m_releaseTime); | 218 double releaseTimeLeft = std::min(timeLeft, m_data->m_releaseTime); |
| 209 double attackTimeLeft = std::max(0., m_data->m_attackTime - deltaTime); | 219 double attackTimeLeft = std::max(0., m_data->m_attackTime - deltaTime); |
| 210 double sustainTimeLeft = std::max(0., timeLeft - releaseTimeLeft - attackTim
eLeft); | 220 double sustainTimeLeft = std::max(0., timeLeft - releaseTimeLeft - attackTim
eLeft); |
| 211 | 221 |
| 212 // If we're getting near the finish, the desired velocity can decrease since
the time left gets increased. | 222 // If we're getting near the finish, the desired velocity can decrease since
the time left gets increased. |
| 213 double allowedVelocityDecreaseFactor = 0.99 * oldTimeLeft / timeLeft; | 223 double allowedVelocityDecreaseFactor = 0.99 * oldTimeLeft / timeLeft; |
| 214 allowedVelocityDecreaseFactor *= allowedVelocityDecreaseFactor; | 224 allowedVelocityDecreaseFactor *= allowedVelocityDecreaseFactor; |
| 215 EXPECT_LE(oldDesiredVelocity * allowedVelocityDecreaseFactor, m_data->m_desi
redVelocity); | 225 if (m_scrollingDown) |
| 226 EXPECT_LE(oldDesiredVelocity * allowedVelocityDecreaseFactor, m_data->m_
desiredVelocity); |
| 227 else |
| 228 EXPECT_GE(oldDesiredVelocity * allowedVelocityDecreaseFactor, m_data->m_
desiredVelocity); |
| 216 | 229 |
| 217 double expectedReleasePosition = std::max<double>(m_currentPosition, m_data-
>m_attackPosition) + sustainTimeLeft * m_data->m_desiredVelocity; | 230 double startPosition = m_scrollingDown ? std::max<double>(m_currentPosition,
m_data->m_attackPosition) : std::min<double>(m_currentPosition, m_data->m_attac
kPosition); |
| 218 EXPECT_DOUBLE_EQ(expectedReleasePosition, m_data->m_releasePosition); | 231 double expectedReleasePosition = startPosition + sustainTimeLeft * m_data->m
_desiredVelocity; |
| 232 if (result) |
| 233 EXPECT_DOUBLE_EQ(expectedReleasePosition, m_data->m_releasePosition); |
| 234 else |
| 235 EXPECT_NEAR(expectedReleasePosition, m_data->m_releasePosition, 1); |
| 219 | 236 |
| 220 return result; | 237 return result; |
| 221 } | 238 } |
| 222 | 239 |
| 223 bool ScrollAnimatorNoneTest::animateScroll(double currentTime) | 240 bool ScrollAnimatorNoneTest::animateScroll(double currentTime) |
| 224 { | 241 { |
| 225 double oldPosition = *m_data->m_currentPosition; | 242 double oldPosition = *m_data->m_currentPosition; |
| 226 bool testEstimatedMaxVelocity = m_data->m_startTime + m_data->m_animationTim
e - m_data->m_lastAnimationTime > m_data->m_releaseTime; | 243 bool testEstimatedMaxVelocity = m_data->m_startTime + m_data->m_animationTim
e - m_data->m_lastAnimationTime > m_data->m_releaseTime; |
| 227 | 244 |
| 228 bool result = m_data->animateScroll(currentTime); | 245 bool result = m_data->animateScroll(currentTime); |
| 229 | 246 |
| 230 double deltaTime = m_data->m_lastAnimationTime - m_data->m_startTime; | 247 double deltaTime = m_data->m_lastAnimationTime - m_data->m_startTime; |
| 231 double timeLeft = m_data->m_animationTime - deltaTime; | 248 double timeLeft = m_data->m_animationTime - deltaTime; |
| 232 double releaseTimeLeft = std::min(timeLeft, m_data->m_releaseTime); | 249 double releaseTimeLeft = std::min(timeLeft, m_data->m_releaseTime); |
| 233 double attackTimeLeft = std::max(0., m_data->m_attackTime - deltaTime); | 250 double attackTimeLeft = std::max(0., m_data->m_attackTime - deltaTime); |
| 234 double sustainTimeLeft = std::max(0., timeLeft - releaseTimeLeft - attackTim
eLeft); | 251 double sustainTimeLeft = std::max(0., timeLeft - releaseTimeLeft - attackTim
eLeft); |
| 235 double distanceLeft = m_data->m_desiredPosition - *m_data->m_currentPosition
; | 252 double distanceLeft = m_data->m_desiredPosition - *m_data->m_currentPosition
; |
| 236 | 253 |
| 237 EXPECT_LE(0, m_data->m_currentVelocity); | 254 if (m_scrollingDown) { |
| 238 EXPECT_LE(oldPosition, *m_data->m_currentPosition); | 255 EXPECT_LE(0, m_data->m_currentVelocity); |
| 239 EXPECT_GE(m_data->m_desiredVelocity * 2, m_data->m_currentVelocity); | 256 EXPECT_LE(oldPosition, *m_data->m_currentPosition); |
| 257 } else { |
| 258 EXPECT_GE(0, m_data->m_currentVelocity); |
| 259 EXPECT_GE(oldPosition, *m_data->m_currentPosition); |
| 260 } |
| 261 EXPECT_GE(fabs(m_data->m_desiredVelocity) * 2, fabs(m_data->m_currentVelocit
y)); |
| 240 if (testEstimatedMaxVelocity) | 262 if (testEstimatedMaxVelocity) |
| 241 EXPECT_GE((distanceLeft / sustainTimeLeft) * 1.2, m_data->m_currentVeloc
ity); | 263 EXPECT_GE(fabs(distanceLeft / sustainTimeLeft) * 1.2, fabs(m_data->m_cur
rentVelocity)); |
| 242 | 264 |
| 243 return result; | 265 return result; |
| 244 } | 266 } |
| 245 | 267 |
| 246 double ScrollAnimatorNoneTest::curveIntegralAt(ScrollAnimatorNone::Curve curve,
double t) | 268 double ScrollAnimatorNoneTest::curveIntegralAt(ScrollAnimatorNone::Curve curve,
double t) |
| 247 { | 269 { |
| 248 switch (curve) { | 270 switch (curve) { |
| 249 case ScrollAnimatorNone::Linear: | 271 case ScrollAnimatorNone::Linear: |
| 250 return t * t * t / 3; | 272 return t * t * t / 3; |
| 251 case ScrollAnimatorNone::Quadratic: | 273 case ScrollAnimatorNone::Quadratic: |
| (...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 356 | 378 |
| 357 void ScrollAnimatorNoneTest::curveTest(ScrollAnimatorNone::Curve curve) | 379 void ScrollAnimatorNoneTest::curveTest(ScrollAnimatorNone::Curve curve) |
| 358 { | 380 { |
| 359 curveTestInner(curve, 0.01, 0.25); | 381 curveTestInner(curve, 0.01, 0.25); |
| 360 curveTestInner(curve, 0.2, 10); | 382 curveTestInner(curve, 0.2, 10); |
| 361 curveTestInner(curve, 0.025, 10); | 383 curveTestInner(curve, 0.025, 10); |
| 362 curveTestInner(curve, 0.01, 1); | 384 curveTestInner(curve, 0.01, 1); |
| 363 curveTestInner(curve, 0.25, 40); | 385 curveTestInner(curve, 0.25, 40); |
| 364 } | 386 } |
| 365 | 387 |
| 388 void ScrollAnimatorNoneTest::checkDesiredPosition(float expectedPosition) |
| 389 { |
| 390 EXPECT_EQ(expectedPosition, m_data->m_desiredPosition); |
| 391 } |
| 392 |
| 393 void ScrollAnimatorNoneTest::checkSoftLanding(float expectedPosition) |
| 394 { |
| 395 EXPECT_EQ(expectedPosition, m_currentPosition); |
| 396 EXPECT_LE(m_data->m_desiredVelocity / 2, m_data->m_currentVelocity); |
| 397 } |
| 398 |
| 366 TEST_F(ScrollAnimatorNoneTest, CurveMathLinear) | 399 TEST_F(ScrollAnimatorNoneTest, CurveMathLinear) |
| 367 { | 400 { |
| 368 curveTest(ScrollAnimatorNone::Linear); | 401 curveTest(ScrollAnimatorNone::Linear); |
| 369 } | 402 } |
| 370 | 403 |
| 371 TEST_F(ScrollAnimatorNoneTest, CurveMathQuadratic) | 404 TEST_F(ScrollAnimatorNoneTest, CurveMathQuadratic) |
| 372 { | 405 { |
| 373 curveTest(ScrollAnimatorNone::Quadratic); | 406 curveTest(ScrollAnimatorNone::Quadratic); |
| 374 } | 407 } |
| 375 | 408 |
| 376 TEST_F(ScrollAnimatorNoneTest, CurveMathCubic) | 409 TEST_F(ScrollAnimatorNoneTest, CurveMathCubic) |
| 377 { | 410 { |
| 378 curveTest(ScrollAnimatorNone::Cubic); | 411 curveTest(ScrollAnimatorNone::Cubic); |
| 379 } | 412 } |
| 380 | 413 |
| 381 TEST_F(ScrollAnimatorNoneTest, CurveMathBounce) | 414 TEST_F(ScrollAnimatorNoneTest, CurveMathBounce) |
| 382 { | 415 { |
| 383 curveTest(ScrollAnimatorNone::Bounce); | 416 curveTest(ScrollAnimatorNone::Bounce); |
| 384 } | 417 } |
| 385 | 418 |
| 386 TEST_F(ScrollAnimatorNoneTest, ScrollOnceLinear) | 419 TEST_F(ScrollAnimatorNoneTest, ScrollOnceLinear) |
| 387 { | 420 { |
| 388 ScrollAnimatorNone::Parameters parameters(true, 7 * kTickTime, ScrollAnimato
rNone::Linear, 3 * kTickTime, ScrollAnimatorNone::Linear, 3 * kTickTime); | 421 ScrollAnimatorNone::Parameters parameters(true, 7 * kTickTime, 0, ScrollAnim
atorNone::Linear, 3 * kTickTime, ScrollAnimatorNone::Linear, 3 * kTickTime); |
| 389 | 422 |
| 390 updateDataFromParameters(VerticalScrollbar, 1, 40, 1000, kStartTime, ¶me
ters); | 423 updateDataFromParameters(VerticalScrollbar, 1, 40, 1000, kStartTime, ¶me
ters); |
| 391 bool result = true; | 424 bool result = true; |
| 392 for (double t = kStartTime; result && t < kEndTime; t += kAnimationTime) | 425 for (double t = kStartTime; result && t < kEndTime; t += kAnimationTime) |
| 393 result = animateScroll(t); | 426 result = animateScroll(t); |
| 394 } | 427 } |
| 395 | 428 |
| 396 TEST_F(ScrollAnimatorNoneTest, ScrollOnceQuadratic) | 429 TEST_F(ScrollAnimatorNoneTest, ScrollOnceQuadratic) |
| 397 { | 430 { |
| 398 ScrollAnimatorNone::Parameters parameters(true, 7 * kTickTime, ScrollAnimato
rNone::Quadratic, 3 * kTickTime, ScrollAnimatorNone::Quadratic, 3 * kTickTime); | 431 ScrollAnimatorNone::Parameters parameters(true, 7 * kTickTime, 0, ScrollAnim
atorNone::Quadratic, 3 * kTickTime, ScrollAnimatorNone::Quadratic, 3 * kTickTime
); |
| 399 | 432 |
| 400 updateDataFromParameters(VerticalScrollbar, 1, 40, 1000, kStartTime, ¶me
ters); | 433 updateDataFromParameters(VerticalScrollbar, 1, 40, 1000, kStartTime, ¶me
ters); |
| 401 bool result = true; | 434 bool result = true; |
| 402 for (double t = kStartTime; result && t < kEndTime; t += kAnimationTime) | 435 for (double t = kStartTime; result && t < kEndTime; t += kAnimationTime) |
| 403 result = animateScroll(t); | 436 result = animateScroll(t); |
| 404 } | 437 } |
| 405 | 438 |
| 406 TEST_F(ScrollAnimatorNoneTest, ScrollLongQuadratic) | 439 TEST_F(ScrollAnimatorNoneTest, ScrollLongQuadratic) |
| 407 { | 440 { |
| 408 ScrollAnimatorNone::Parameters parameters(true, 20 * kTickTime, ScrollAnimat
orNone::Quadratic, 3 * kTickTime, ScrollAnimatorNone::Quadratic, 3 * kTickTime); | 441 ScrollAnimatorNone::Parameters parameters(true, 20 * kTickTime, 0, ScrollAni
matorNone::Quadratic, 3 * kTickTime, ScrollAnimatorNone::Quadratic, 3 * kTickTim
e); |
| 409 | 442 |
| 410 updateDataFromParameters(VerticalScrollbar, 1, 40, 1000, kStartTime, ¶me
ters); | 443 updateDataFromParameters(VerticalScrollbar, 1, 40, 1000, kStartTime, ¶me
ters); |
| 411 bool result = true; | 444 bool result = true; |
| 412 for (double t = kStartTime; result && t < kEndTime; t += kAnimationTime) | 445 for (double t = kStartTime; result && t < kEndTime; t += kAnimationTime) |
| 413 result = animateScroll(t); | 446 result = animateScroll(t); |
| 414 } | 447 } |
| 415 | 448 |
| 416 TEST_F(ScrollAnimatorNoneTest, ScrollQuadraticNoSustain) | 449 TEST_F(ScrollAnimatorNoneTest, ScrollQuadraticNoSustain) |
| 417 { | 450 { |
| 418 ScrollAnimatorNone::Parameters parameters(true, 8 * kTickTime, ScrollAnimato
rNone::Quadratic, 4 * kTickTime, ScrollAnimatorNone::Quadratic, 4 * kTickTime); | 451 ScrollAnimatorNone::Parameters parameters(true, 8 * kTickTime, 0, ScrollAnim
atorNone::Quadratic, 4 * kTickTime, ScrollAnimatorNone::Quadratic, 4 * kTickTime
); |
| 419 | 452 |
| 420 updateDataFromParameters(VerticalScrollbar, 1, 40, 1000, kStartTime, ¶me
ters); | 453 updateDataFromParameters(VerticalScrollbar, 1, 40, 1000, kStartTime, ¶me
ters); |
| 421 bool result = true; | 454 bool result = true; |
| 422 for (double t = kStartTime; result && t < kEndTime; t += kAnimationTime) | 455 for (double t = kStartTime; result && t < kEndTime; t += kAnimationTime) |
| 423 result = animateScroll(t); | 456 result = animateScroll(t); |
| 424 } | 457 } |
| 425 | 458 |
| 459 TEST_F(ScrollAnimatorNoneTest, ScrollQuadraticSmoothed) |
| 460 { |
| 461 ScrollAnimatorNone::Parameters parameters(true, 8 * kTickTime, 8 * kTickTime
, ScrollAnimatorNone::Quadratic, 4 * kTickTime, ScrollAnimatorNone::Quadratic, 4
* kTickTime); |
| 462 |
| 463 updateDataFromParameters(VerticalScrollbar, 1, 40, 1000, kStartTime, ¶me
ters); |
| 464 bool result = true; |
| 465 for (double t = kStartTime; result && t < kEndTime; t += kAnimationTime) |
| 466 result = animateScroll(t); |
| 467 } |
| 468 |
| 426 TEST_F(ScrollAnimatorNoneTest, ScrollOnceCubic) | 469 TEST_F(ScrollAnimatorNoneTest, ScrollOnceCubic) |
| 427 { | 470 { |
| 428 ScrollAnimatorNone::Parameters parameters(true, 7 * kTickTime, ScrollAnimato
rNone::Cubic, 3 * kTickTime, ScrollAnimatorNone::Cubic, 3 * kTickTime); | 471 ScrollAnimatorNone::Parameters parameters(true, 7 * kTickTime, 0, ScrollAnim
atorNone::Cubic, 3 * kTickTime, ScrollAnimatorNone::Cubic, 3 * kTickTime); |
| 429 | 472 |
| 430 updateDataFromParameters(VerticalScrollbar, 1, 40, 1000, kStartTime, ¶me
ters); | 473 updateDataFromParameters(VerticalScrollbar, 1, 40, 1000, kStartTime, ¶me
ters); |
| 431 bool result = true; | 474 bool result = true; |
| 432 for (double t = kStartTime; result && t < kEndTime; t += kAnimationTime) | 475 for (double t = kStartTime; result && t < kEndTime; t += kAnimationTime) |
| 433 result = animateScroll(t); | 476 result = animateScroll(t); |
| 434 } | 477 } |
| 435 | 478 |
| 436 TEST_F(ScrollAnimatorNoneTest, ScrollOnceShort) | 479 TEST_F(ScrollAnimatorNoneTest, ScrollOnceShort) |
| 437 { | 480 { |
| 438 ScrollAnimatorNone::Parameters parameters(true, 7 * kTickTime, ScrollAnimato
rNone::Cubic, 3 * kTickTime, ScrollAnimatorNone::Cubic, 3 * kTickTime); | 481 ScrollAnimatorNone::Parameters parameters(true, 7 * kTickTime, 0, ScrollAnim
atorNone::Cubic, 3 * kTickTime, ScrollAnimatorNone::Cubic, 3 * kTickTime); |
| 439 | 482 |
| 440 updateDataFromParameters(VerticalScrollbar, 1, 40, 1000, kStartTime, ¶me
ters); | 483 updateDataFromParameters(VerticalScrollbar, 1, 40, 1000, kStartTime, ¶me
ters); |
| 441 bool result = true; | 484 bool result = true; |
| 442 for (double t = kStartTime; result && t < kEndTime; t += kTickTime) | 485 for (double t = kStartTime; result && t < kEndTime; t += kTickTime) |
| 443 result = animateScroll(t); | 486 result = animateScroll(t); |
| 444 } | 487 } |
| 445 | 488 |
| 446 TEST_F(ScrollAnimatorNoneTest, ScrollTwiceQuadratic) | 489 TEST_F(ScrollAnimatorNoneTest, ScrollTwiceQuadratic) |
| 447 { | 490 { |
| 448 ScrollAnimatorNone::Parameters parameters(true, 7 * kTickTime, ScrollAnimato
rNone::Quadratic, 3 * kTickTime, ScrollAnimatorNone::Quadratic, 3 * kTickTime); | 491 ScrollAnimatorNone::Parameters parameters(true, 7 * kTickTime, 0, ScrollAnim
atorNone::Quadratic, 3 * kTickTime, ScrollAnimatorNone::Quadratic, 3 * kTickTime
); |
| 449 | 492 |
| 450 updateDataFromParameters(VerticalScrollbar, 1, 40, 1000, kStartTime, ¶me
ters); | 493 updateDataFromParameters(VerticalScrollbar, 1, 40, 1000, kStartTime, ¶me
ters); |
| 451 bool result = true; | 494 bool result = true; |
| 452 double t; | 495 double t; |
| 453 for (t = kStartTime; result && t < kStartTime + 1.5 * kTickTime; t += kAnima
tionTime) | 496 for (t = kStartTime; result && t < kStartTime + 1.5 * kTickTime; t += kAnima
tionTime) |
| 454 result = animateScroll(t); | 497 result = animateScroll(t); |
| 455 | 498 |
| 456 result = result && animateScroll(t); | 499 result = result && animateScroll(t); |
| 457 double before = m_currentPosition; | 500 double before = m_currentPosition; |
| 458 result = result && updateDataFromParameters(VerticalScrollbar, 1, 40, 1000,
t, ¶meters); | 501 result = result && updateDataFromParameters(VerticalScrollbar, 1, 40, 1000,
t, ¶meters); |
| (...skipping 10 matching lines...) Expand all Loading... |
| 469 after = m_currentPosition; | 512 after = m_currentPosition; |
| 470 EXPECT_NEAR(before, after, 10); | 513 EXPECT_NEAR(before, after, 10); |
| 471 | 514 |
| 472 t += kAnimationTime; | 515 t += kAnimationTime; |
| 473 for (; result && t < kEndTime; t += kAnimationTime) | 516 for (; result && t < kEndTime; t += kAnimationTime) |
| 474 result = animateScroll(t); | 517 result = animateScroll(t); |
| 475 } | 518 } |
| 476 | 519 |
| 477 TEST_F(ScrollAnimatorNoneTest, ScrollLotsQuadratic) | 520 TEST_F(ScrollAnimatorNoneTest, ScrollLotsQuadratic) |
| 478 { | 521 { |
| 479 ScrollAnimatorNone::Parameters parameters(true, 7 * kTickTime, ScrollAnimato
rNone::Quadratic, 3 * kTickTime, ScrollAnimatorNone::Quadratic, 3 * kTickTime); | 522 ScrollAnimatorNone::Parameters parameters(true, 7 * kTickTime, 0, ScrollAnim
atorNone::Quadratic, 3 * kTickTime, ScrollAnimatorNone::Quadratic, 3 * kTickTime
); |
| 480 | 523 |
| 481 updateDataFromParameters(VerticalScrollbar, 1, 40, 1000, kStartTime, ¶me
ters); | 524 updateDataFromParameters(VerticalScrollbar, 1, 40, 1000, kStartTime, ¶me
ters); |
| 482 bool result = true; | 525 bool result = true; |
| 483 double t; | 526 double t; |
| 484 for (t = kStartTime; result && t < kStartTime + 1.5 * kTickTime; t += kAnima
tionTime) | 527 for (t = kStartTime; result && t < kStartTime + 1.5 * kTickTime; t += kAnima
tionTime) |
| 485 result = animateScroll(t); | 528 result = animateScroll(t); |
| 486 | 529 |
| 487 for (int i = 0; i < 20; ++i) { | 530 for (int i = 0; i < 20; ++i) { |
| 488 t += kAnimationTime; | 531 t += kAnimationTime; |
| 489 result = result && animateScroll(t); | 532 result = result && animateScroll(t); |
| 490 result = result && updateDataFromParameters(VerticalScrollbar, 3, 40, 10
000, t, ¶meters); | 533 result = result && updateDataFromParameters(VerticalScrollbar, 3, 40, 10
000, t, ¶meters); |
| 491 } | 534 } |
| 492 | 535 |
| 493 t += kAnimationTime; | 536 t += kAnimationTime; |
| 494 for (; result && t < kEndTime; t += kAnimationTime) | 537 for (; result && t < kEndTime; t += kAnimationTime) |
| 495 result = result && animateScroll(t); | 538 result = result && animateScroll(t); |
| 496 } | 539 } |
| 497 | 540 |
| 541 TEST_F(ScrollAnimatorNoneTest, ScrollLotsQuadraticSmoothed) |
| 542 { |
| 543 ScrollAnimatorNone::Parameters parameters(true, 10 * kTickTime, 6 * kTickTim
e, ScrollAnimatorNone::Quadratic, 3 * kTickTime, ScrollAnimatorNone::Quadratic,
3 * kTickTime); |
| 544 |
| 545 updateDataFromParameters(VerticalScrollbar, 1, 40, 1000, kStartTime, ¶me
ters); |
| 546 bool result = true; |
| 547 double t; |
| 548 for (t = kStartTime; result && t < kStartTime + 1.5 * kTickTime; t += kAnima
tionTime) |
| 549 result = animateScroll(t); |
| 550 |
| 551 for (int i = 0; i < 20; ++i) { |
| 552 t += kAnimationTime; |
| 553 result = result && animateScroll(t); |
| 554 result = result && updateDataFromParameters(VerticalScrollbar, 3, 40, 10
000, t, ¶meters); |
| 555 } |
| 556 |
| 557 t += kAnimationTime; |
| 558 for (; result && t < kEndTime; t += kAnimationTime) |
| 559 result = result && animateScroll(t); |
| 560 } |
| 561 |
| 498 TEST_F(ScrollAnimatorNoneTest, ScrollWheelTrace) | 562 TEST_F(ScrollAnimatorNoneTest, ScrollWheelTrace) |
| 499 { | 563 { |
| 500 ScrollAnimatorNone::Parameters parameters(true, 11 * kTickTime, ScrollAnimat
orNone::Quadratic, 3 * kTickTime, ScrollAnimatorNone::Quadratic, 3 * kTickTime); | 564 ScrollAnimatorNone::Parameters parameters(true, 11 * kTickTime, 0, ScrollAni
matorNone::Quadratic, 3 * kTickTime, ScrollAnimatorNone::Quadratic, 3 * kTickTim
e); |
| 501 | 565 |
| 502 // Constructed from an actual scroll wheel trace that exhibited a glitch. | 566 // Constructed from an actual scroll wheel trace that exhibited a glitch. |
| 503 bool result = updateDataFromParameters(VerticalScrollbar, 1, 53.33, 1000, 10
0.5781, ¶meters); | 567 bool result = updateDataFromParameters(VerticalScrollbar, 1, 53.33, 1000, 10
0.5781, ¶meters); |
| 504 result = animateScroll(100.5933); | 568 result = animateScroll(100.5933); |
| 505 result = result && animateScroll(100.6085); | 569 result = result && animateScroll(100.6085); |
| 506 result = result && updateDataFromParameters(VerticalScrollbar, 1, 53.33, 100
0, 100.6485, ¶meters); | 570 result = result && updateDataFromParameters(VerticalScrollbar, 1, 53.33, 100
0, 100.6485, ¶meters); |
| 507 result = result && animateScroll(100.6515); | 571 result = result && animateScroll(100.6515); |
| 508 result = result && animateScroll(100.6853); | 572 result = result && animateScroll(100.6853); |
| 509 result = result && updateDataFromParameters(VerticalScrollbar, 1, 53.33, 100
0, 100.6863, ¶meters); | 573 result = result && updateDataFromParameters(VerticalScrollbar, 1, 53.33, 100
0, 100.6863, ¶meters); |
| 510 result = result && animateScroll(100.7005); | 574 result = result && animateScroll(100.7005); |
| 511 result = result && animateScroll(100.7157); | 575 result = result && animateScroll(100.7157); |
| 512 result = result && animateScroll(100.7312); | 576 result = result && animateScroll(100.7312); |
| 513 result = result && updateDataFromParameters(VerticalScrollbar, 1, 53.33, 100
0, 100.7379, ¶meters); | 577 result = result && updateDataFromParameters(VerticalScrollbar, 1, 53.33, 100
0, 100.7379, ¶meters); |
| 514 result = result && animateScroll(100.7464); | 578 result = result && animateScroll(100.7464); |
| 515 result = result && animateScroll(100.7617); | 579 result = result && animateScroll(100.7617); |
| 516 result = result && animateScroll(100.7775); | 580 result = result && animateScroll(100.7775); |
| 517 result = result && updateDataFromParameters(VerticalScrollbar, 1, 53.33, 100
0, 100.7779, ¶meters); | 581 result = result && updateDataFromParameters(VerticalScrollbar, 1, 53.33, 100
0, 100.7779, ¶meters); |
| 518 for (double t = 100.7928; result && t < 200; t += 0.015) | 582 for (double t = 100.7928; result && t < 200; t += 0.015) |
| 519 result = result && animateScroll(t); | 583 result = result && animateScroll(t); |
| 520 } | 584 } |
| 521 | 585 |
| 586 TEST_F(ScrollAnimatorNoneTest, ScrollWheelTraceSmoothed) |
| 587 { |
| 588 ScrollAnimatorNone::Parameters parameters(true, 11 * kTickTime, 7 * kTickTim
e, ScrollAnimatorNone::Quadratic, 3 * kTickTime, ScrollAnimatorNone::Quadratic,
3 * kTickTime); |
| 589 |
| 590 // Constructed from an actual scroll wheel trace that exhibited a glitch. |
| 591 bool result = updateDataFromParameters(VerticalScrollbar, 1, 53.33, 1000, 10
0.5781, ¶meters); |
| 592 result = animateScroll(100.5933); |
| 593 result = result && animateScroll(100.6085); |
| 594 result = result && updateDataFromParameters(VerticalScrollbar, 1, 53.33, 100
0, 100.6485, ¶meters); |
| 595 result = result && animateScroll(100.6515); |
| 596 result = result && animateScroll(100.6853); |
| 597 result = result && updateDataFromParameters(VerticalScrollbar, 1, 53.33, 100
0, 100.6863, ¶meters); |
| 598 result = result && animateScroll(100.7005); |
| 599 result = result && animateScroll(100.7157); |
| 600 result = result && animateScroll(100.7312); |
| 601 result = result && updateDataFromParameters(VerticalScrollbar, 1, 53.33, 100
0, 100.7379, ¶meters); |
| 602 result = result && animateScroll(100.7464); |
| 603 result = result && animateScroll(100.7617); |
| 604 result = result && animateScroll(100.7775); |
| 605 result = result && updateDataFromParameters(VerticalScrollbar, 1, 53.33, 100
0, 100.7779, ¶meters); |
| 606 for (double t = 100.7928; result && t < 200; t += 0.015) |
| 607 result = result && animateScroll(t); |
| 608 } |
| 609 |
| 522 TEST_F(ScrollAnimatorNoneTest, LinuxTrackPadTrace) | 610 TEST_F(ScrollAnimatorNoneTest, LinuxTrackPadTrace) |
| 523 { | 611 { |
| 524 ScrollAnimatorNone::Parameters parameters(true, 11 * kTickTime, ScrollAnimat
orNone::Quadratic, 3 * kTickTime, ScrollAnimatorNone::Quadratic, 3 * kTickTime); | 612 ScrollAnimatorNone::Parameters parameters(true, 11 * kTickTime, 0, ScrollAni
matorNone::Quadratic, 3 * kTickTime, ScrollAnimatorNone::Quadratic, 3 * kTickTim
e); |
| 525 | 613 |
| 526 bool result = updateDataFromParameters(VerticalScrollbar, 1.00, 60.00, 1000,
100.6863, ¶meters); | 614 bool result = updateDataFromParameters(VerticalScrollbar, 1.00, 60.00, 1000,
100.6863, ¶meters); |
| 527 result = result && updateDataFromParameters(VerticalScrollbar, 1.00, 20.00,
1000, 100.6897, ¶meters); | 615 result = result && updateDataFromParameters(VerticalScrollbar, 1.00, 20.00,
1000, 100.6897, ¶meters); |
| 528 result = result && updateDataFromParameters(VerticalScrollbar, 1.00, 20.00,
1000, 100.7001, ¶meters); | 616 result = result && updateDataFromParameters(VerticalScrollbar, 1.00, 20.00,
1000, 100.7001, ¶meters); |
| 529 result = result && animateScroll(100.7015); | 617 result = result && animateScroll(100.7015); |
| 530 result = result && animateScroll(100.7169); | 618 result = result && animateScroll(100.7169); |
| 531 result = result && updateDataFromParameters(VerticalScrollbar, 1.00, 40.00,
1000, 100.7179, ¶meters); | 619 result = result && updateDataFromParameters(VerticalScrollbar, 1.00, 40.00,
1000, 100.7179, ¶meters); |
| 532 result = result && animateScroll(100.7322); | 620 result = result && animateScroll(100.7322); |
| 533 result = result && updateDataFromParameters(VerticalScrollbar, 1.00, 20.00,
1000, 100.7332, ¶meters); | 621 result = result && updateDataFromParameters(VerticalScrollbar, 1.00, 20.00,
1000, 100.7332, ¶meters); |
| 534 result = result && animateScroll(100.7491); | 622 result = result && animateScroll(100.7491); |
| 535 result = result && updateDataFromParameters(VerticalScrollbar, 1.00, 20.00,
1000, 100.7519, ¶meters); | 623 result = result && updateDataFromParameters(VerticalScrollbar, 1.00, 20.00,
1000, 100.7519, ¶meters); |
| 536 result = result && animateScroll(100.7676); | 624 result = result && animateScroll(100.7676); |
| 537 result = result && updateDataFromParameters(VerticalScrollbar, 1.00, 20.00,
1000, 100.7698, ¶meters); | 625 result = result && updateDataFromParameters(VerticalScrollbar, 1.00, 20.00,
1000, 100.7698, ¶meters); |
| 538 result = result && updateDataFromParameters(VerticalScrollbar, 1.00, 20.00,
1000, 100.7830, ¶meters); | 626 result = result && updateDataFromParameters(VerticalScrollbar, 1.00, 20.00,
1000, 100.7830, ¶meters); |
| 539 result = result && animateScroll(100.7834); | 627 result = result && animateScroll(100.7834); |
| 540 result = result && animateScroll(100.7997); | 628 result = result && animateScroll(100.7997); |
| 541 result = result && updateDataFromParameters(VerticalScrollbar, 1.00, 20.00,
1000, 100.8019, ¶meters); | 629 result = result && updateDataFromParameters(VerticalScrollbar, 1.00, 20.00,
1000, 100.8019, ¶meters); |
| 542 result = result && animateScroll(100.8154); | 630 result = result && animateScroll(100.8154); |
| 543 result = result && updateDataFromParameters(VerticalScrollbar, 1.00, 20.00,
1000, 100.8241, ¶meters); | 631 result = result && updateDataFromParameters(VerticalScrollbar, 1.00, 20.00,
1000, 100.8241, ¶meters); |
| 544 result = result && animateScroll(100.8335); | 632 result = result && animateScroll(100.8335); |
| 545 result = result && updateDataFromParameters(VerticalScrollbar, 1.00, 20.00,
1000, 100.8465, ¶meters); | 633 result = result && updateDataFromParameters(VerticalScrollbar, 1.00, 20.00,
1000, 100.8465, ¶meters); |
| 546 result = result && animateScroll(100.8513); | 634 result = result && animateScroll(100.8513); |
| 547 result = result && updateDataFromParameters(VerticalScrollbar, 1.00, 20.00,
1000, 100.8623, ¶meters); | 635 result = result && updateDataFromParameters(VerticalScrollbar, 1.00, 20.00,
1000, 100.8623, ¶meters); |
| 548 for (double t = 100.8674; result && t < 200; t += 0.015) | 636 for (double t = 100.8674; result && t < 200; t += 0.015) |
| 549 result = result && animateScroll(t); | 637 result = result && animateScroll(t); |
| 550 } | 638 } |
| 551 | 639 |
| 640 TEST_F(ScrollAnimatorNoneTest, LinuxTrackPadTraceSmoothed) |
| 641 { |
| 642 ScrollAnimatorNone::Parameters parameters(true, 11 * kTickTime, 7 * kTickTim
e, ScrollAnimatorNone::Quadratic, 3 * kTickTime, ScrollAnimatorNone::Quadratic,
3 * kTickTime); |
| 643 |
| 644 bool result = updateDataFromParameters(VerticalScrollbar, 1.00, 60.00, 1000,
100.6863, ¶meters); |
| 645 result = result && updateDataFromParameters(VerticalScrollbar, 1.00, 20.00,
1000, 100.6897, ¶meters); |
| 646 result = result && updateDataFromParameters(VerticalScrollbar, 1.00, 20.00,
1000, 100.7001, ¶meters); |
| 647 result = result && animateScroll(100.7015); |
| 648 result = result && animateScroll(100.7169); |
| 649 result = result && updateDataFromParameters(VerticalScrollbar, 1.00, 40.00,
1000, 100.7179, ¶meters); |
| 650 result = result && animateScroll(100.7322); |
| 651 result = result && updateDataFromParameters(VerticalScrollbar, 1.00, 20.00,
1000, 100.7332, ¶meters); |
| 652 result = result && animateScroll(100.7491); |
| 653 result = result && updateDataFromParameters(VerticalScrollbar, 1.00, 20.00,
1000, 100.7519, ¶meters); |
| 654 result = result && animateScroll(100.7676); |
| 655 result = result && updateDataFromParameters(VerticalScrollbar, 1.00, 20.00,
1000, 100.7698, ¶meters); |
| 656 result = result && updateDataFromParameters(VerticalScrollbar, 1.00, 20.00,
1000, 100.7830, ¶meters); |
| 657 result = result && animateScroll(100.7834); |
| 658 result = result && animateScroll(100.7997); |
| 659 result = result && updateDataFromParameters(VerticalScrollbar, 1.00, 20.00,
1000, 100.8019, ¶meters); |
| 660 result = result && animateScroll(100.8154); |
| 661 result = result && updateDataFromParameters(VerticalScrollbar, 1.00, 20.00,
1000, 100.8241, ¶meters); |
| 662 result = result && animateScroll(100.8335); |
| 663 result = result && updateDataFromParameters(VerticalScrollbar, 1.00, 20.00,
1000, 100.8465, ¶meters); |
| 664 result = result && animateScroll(100.8513); |
| 665 result = result && updateDataFromParameters(VerticalScrollbar, 1.00, 20.00,
1000, 100.8623, ¶meters); |
| 666 for (double t = 100.8674; result && t < 200; t += 0.015) |
| 667 result = result && animateScroll(t); |
| 668 } |
| 669 |
| 670 TEST_F(ScrollAnimatorNoneTest, ScrollDownToBumper) |
| 671 { |
| 672 ScrollAnimatorNone::Parameters parameters(true, 10 * kTickTime, 7 * kTickTim
e, ScrollAnimatorNone::Quadratic, 3 * kTickTime, ScrollAnimatorNone::Quadratic,
3 * kTickTime); |
| 673 |
| 674 updateDataFromParameters(VerticalScrollbar, 1, 20, 200, kStartTime, ¶met
ers); |
| 675 bool result = true; |
| 676 double t = kStartTime; |
| 677 for (int i = 0; i < 10; ++i) { |
| 678 t += kAnimationTime; |
| 679 result = result && animateScroll(t); |
| 680 updateDataFromParameters(VerticalScrollbar, 1, 20, 200, t, ¶meters); |
| 681 } |
| 682 checkDesiredPosition(200); |
| 683 |
| 684 t += kAnimationTime; |
| 685 for (; result && t < kEndTime; t += kAnimationTime) |
| 686 result = result && animateScroll(t); |
| 687 checkSoftLanding(200); |
| 688 } |
| 689 |
| 690 |
| 691 TEST_F(ScrollAnimatorNoneTest, ScrollUpToBumper) |
| 692 { |
| 693 ScrollAnimatorNone::Parameters parameters(true, 10 * kTickTime, 7 * kTickTim
e, ScrollAnimatorNone::Quadratic, 3 * kTickTime, ScrollAnimatorNone::Quadratic,
3 * kTickTime); |
| 694 |
| 695 updateDataFromParameters(VerticalScrollbar, 1, -20, 200, kStartTime, ¶me
ters); |
| 696 bool result = true; |
| 697 double t = kStartTime; |
| 698 for (int i = 0; i < 10; ++i) { |
| 699 t += kAnimationTime; |
| 700 result = result && animateScroll(t); |
| 701 updateDataFromParameters(VerticalScrollbar, 1, -20, 200, t, ¶meters)
; |
| 702 } |
| 703 checkDesiredPosition(0); |
| 704 |
| 705 t += kAnimationTime; |
| 706 for (; result && t < kEndTime; t += kAnimationTime) |
| 707 result = result && animateScroll(t); |
| 708 checkSoftLanding(0); |
| 709 } |
| 710 |
| 552 #endif // ENABLE(SMOOTH_SCROLLING) | 711 #endif // ENABLE(SMOOTH_SCROLLING) |
| OLD | NEW |