| 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 "cc/layers/layer_impl.h" | 5 #include "cc/layers/layer_impl.h" |
| 6 | 6 |
| 7 #include "cc/layers/painted_scrollbar_layer_impl.h" | 7 #include "cc/layers/painted_scrollbar_layer_impl.h" |
| 8 #include "cc/layers/solid_color_scrollbar_layer_impl.h" | 8 #include "cc/layers/solid_color_scrollbar_layer_impl.h" |
| 9 #include "cc/output/filter_operation.h" | 9 #include "cc/output/filter_operation.h" |
| 10 #include "cc/output/filter_operations.h" | 10 #include "cc/output/filter_operations.h" |
| (...skipping 498 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 509 | 509 |
| 510 layer()->ScrollBy(gfx::Vector2dF(100, -100)); | 510 layer()->ScrollBy(gfx::Vector2dF(100, -100)); |
| 511 EXPECT_VECTOR_EQ(gfx::Vector2dF(50, 0), layer()->CurrentScrollOffset()); | 511 EXPECT_VECTOR_EQ(gfx::Vector2dF(50, 0), layer()->CurrentScrollOffset()); |
| 512 | 512 |
| 513 EXPECT_VECTOR_EQ( | 513 EXPECT_VECTOR_EQ( |
| 514 gfx::ScrollOffsetWithDelta(scroll_offset, layer()->ScrollDelta()), | 514 gfx::ScrollOffsetWithDelta(scroll_offset, layer()->ScrollDelta()), |
| 515 layer()->CurrentScrollOffset()); | 515 layer()->CurrentScrollOffset()); |
| 516 EXPECT_VECTOR_EQ(scroll_offset, layer()->BaseScrollOffset()); | 516 EXPECT_VECTOR_EQ(scroll_offset, layer()->BaseScrollOffset()); |
| 517 } | 517 } |
| 518 | 518 |
| 519 class ScrollDelegateIgnore : public LayerImpl::ScrollOffsetDelegate { | 519 TEST_F(LayerImplScrollTest, ApplySentScrollsNoListener) { |
| 520 public: | |
| 521 void SetCurrentScrollOffset(const gfx::ScrollOffset& new_value) override { | |
| 522 last_attempted_set_offset_ = new_value; | |
| 523 } | |
| 524 gfx::ScrollOffset last_attempted_set_offset() const { | |
| 525 return last_attempted_set_offset_; | |
| 526 } | |
| 527 | |
| 528 gfx::ScrollOffset GetCurrentScrollOffset() override { | |
| 529 return gfx::ScrollOffset(fixed_offset_); | |
| 530 } | |
| 531 bool IsExternalFlingActive() const override { return false; } | |
| 532 void Update() const override { } | |
| 533 | |
| 534 void set_fixed_offset(const gfx::Vector2dF& fixed_offset) { | |
| 535 fixed_offset_ = fixed_offset; | |
| 536 } | |
| 537 | |
| 538 private: | |
| 539 gfx::ScrollOffset last_attempted_set_offset_; | |
| 540 gfx::Vector2dF fixed_offset_; | |
| 541 }; | |
| 542 | |
| 543 TEST_F(LayerImplScrollTest, ScrollByWithIgnoringDelegate) { | |
| 544 gfx::ScrollOffset scroll_offset(10, 5); | |
| 545 layer()->PushScrollOffsetFromMainThread(scroll_offset); | |
| 546 | |
| 547 EXPECT_VECTOR_EQ(scroll_offset, layer()->CurrentScrollOffset()); | |
| 548 EXPECT_VECTOR_EQ(scroll_offset, layer()->BaseScrollOffset()); | |
| 549 EXPECT_VECTOR_EQ(gfx::Vector2dF(), layer()->ScrollDelta()); | |
| 550 | |
| 551 ScrollDelegateIgnore delegate; | |
| 552 gfx::Vector2dF fixed_offset(32, 12); | |
| 553 delegate.set_fixed_offset(fixed_offset); | |
| 554 layer()->SetScrollOffsetDelegate(&delegate); | |
| 555 layer()->RefreshFromScrollDelegate(); | |
| 556 | |
| 557 EXPECT_VECTOR_EQ(fixed_offset, layer()->CurrentScrollOffset()); | |
| 558 EXPECT_VECTOR_EQ(scroll_offset, layer()->BaseScrollOffset()); | |
| 559 | |
| 560 layer()->ScrollBy(gfx::Vector2dF(-100, 100)); | |
| 561 | |
| 562 EXPECT_VECTOR_EQ(fixed_offset, layer()->CurrentScrollOffset()); | |
| 563 EXPECT_VECTOR_EQ(scroll_offset, layer()->BaseScrollOffset()); | |
| 564 | |
| 565 layer()->SetScrollOffsetDelegate(nullptr); | |
| 566 | |
| 567 EXPECT_VECTOR_EQ(fixed_offset, layer()->CurrentScrollOffset()); | |
| 568 EXPECT_VECTOR_EQ(scroll_offset, layer()->BaseScrollOffset()); | |
| 569 | |
| 570 gfx::Vector2dF scroll_delta(1, 1); | |
| 571 layer()->ScrollBy(scroll_delta); | |
| 572 | |
| 573 EXPECT_VECTOR_EQ(fixed_offset + scroll_delta, layer()->CurrentScrollOffset()); | |
| 574 EXPECT_VECTOR_EQ(scroll_offset, layer()->BaseScrollOffset()); | |
| 575 } | |
| 576 | |
| 577 class ScrollDelegateAccept : public LayerImpl::ScrollOffsetDelegate { | |
| 578 public: | |
| 579 void SetCurrentScrollOffset(const gfx::ScrollOffset& new_value) override { | |
| 580 current_offset_ = new_value; | |
| 581 } | |
| 582 gfx::ScrollOffset GetCurrentScrollOffset() override { | |
| 583 return current_offset_; | |
| 584 } | |
| 585 bool IsExternalFlingActive() const override { return false; } | |
| 586 void Update() const override { } | |
| 587 | |
| 588 private: | |
| 589 gfx::ScrollOffset current_offset_; | |
| 590 }; | |
| 591 | |
| 592 TEST_F(LayerImplScrollTest, ScrollByWithAcceptingDelegate) { | |
| 593 gfx::ScrollOffset scroll_offset(10, 5); | |
| 594 layer()->PushScrollOffsetFromMainThread(scroll_offset); | |
| 595 | |
| 596 EXPECT_VECTOR_EQ(scroll_offset, layer()->CurrentScrollOffset()); | |
| 597 EXPECT_VECTOR_EQ(scroll_offset, layer()->BaseScrollOffset()); | |
| 598 EXPECT_VECTOR_EQ(gfx::Vector2dF(), layer()->ScrollDelta()); | |
| 599 | |
| 600 ScrollDelegateAccept delegate; | |
| 601 layer()->SetScrollOffsetDelegate(&delegate); | |
| 602 | |
| 603 EXPECT_VECTOR_EQ(scroll_offset, layer()->CurrentScrollOffset()); | |
| 604 EXPECT_VECTOR_EQ(scroll_offset, layer()->BaseScrollOffset()); | |
| 605 EXPECT_VECTOR_EQ(gfx::Vector2dF(), layer()->ScrollDelta()); | |
| 606 | |
| 607 layer()->ScrollBy(gfx::Vector2dF(-100, 100)); | |
| 608 | |
| 609 EXPECT_VECTOR_EQ(gfx::Vector2dF(0, 80), layer()->CurrentScrollOffset()); | |
| 610 EXPECT_VECTOR_EQ(scroll_offset, layer()->BaseScrollOffset()); | |
| 611 | |
| 612 layer()->SetScrollOffsetDelegate(nullptr); | |
| 613 | |
| 614 EXPECT_VECTOR_EQ(gfx::Vector2dF(0, 80), layer()->CurrentScrollOffset()); | |
| 615 EXPECT_VECTOR_EQ(scroll_offset, layer()->BaseScrollOffset()); | |
| 616 | |
| 617 gfx::Vector2dF scroll_delta(1, 1); | |
| 618 layer()->ScrollBy(scroll_delta); | |
| 619 | |
| 620 EXPECT_VECTOR_EQ(gfx::Vector2dF(1, 80), layer()->CurrentScrollOffset()); | |
| 621 EXPECT_VECTOR_EQ(scroll_offset, layer()->BaseScrollOffset()); | |
| 622 } | |
| 623 | |
| 624 TEST_F(LayerImplScrollTest, ApplySentScrollsNoDelegate) { | |
| 625 gfx::ScrollOffset scroll_offset(10, 5); | 520 gfx::ScrollOffset scroll_offset(10, 5); |
| 626 gfx::Vector2dF scroll_delta(20.5f, 8.5f); | 521 gfx::Vector2dF scroll_delta(20.5f, 8.5f); |
| 627 gfx::Vector2d sent_scroll_delta(12, -3); | 522 gfx::Vector2d sent_scroll_delta(12, -3); |
| 628 | 523 |
| 629 layer()->PushScrollOffsetFromMainThread(scroll_offset); | 524 layer()->PushScrollOffsetFromMainThread(scroll_offset); |
| 630 layer()->ScrollBy(sent_scroll_delta); | 525 layer()->ScrollBy(sent_scroll_delta); |
| 631 layer()->PullDeltaForMainThread(); | 526 layer()->PullDeltaForMainThread(); |
| 632 layer()->SetCurrentScrollOffset(scroll_offset + | 527 layer()->SetCurrentScrollOffset(scroll_offset + |
| 633 gfx::ScrollOffset(scroll_delta)); | 528 gfx::ScrollOffset(scroll_delta)); |
| 634 | 529 |
| 635 EXPECT_VECTOR_EQ(gfx::ScrollOffsetWithDelta(scroll_offset, scroll_delta), | 530 EXPECT_VECTOR_EQ(gfx::ScrollOffsetWithDelta(scroll_offset, scroll_delta), |
| 636 layer()->CurrentScrollOffset()); | 531 layer()->CurrentScrollOffset()); |
| 637 EXPECT_VECTOR_EQ(scroll_delta, layer()->ScrollDelta()); | 532 EXPECT_VECTOR_EQ(scroll_delta, layer()->ScrollDelta()); |
| 638 EXPECT_VECTOR_EQ(scroll_offset, layer()->BaseScrollOffset()); | 533 EXPECT_VECTOR_EQ(scroll_offset, layer()->BaseScrollOffset()); |
| 639 | 534 |
| 640 layer()->ApplySentScrollDeltasFromAbortedCommit(); | 535 layer()->ApplySentScrollDeltasFromAbortedCommit(); |
| 641 | 536 |
| 642 EXPECT_VECTOR_EQ(gfx::ScrollOffsetWithDelta(scroll_offset, scroll_delta), | 537 EXPECT_VECTOR_EQ(gfx::ScrollOffsetWithDelta(scroll_offset, scroll_delta), |
| 643 layer()->CurrentScrollOffset()); | 538 layer()->CurrentScrollOffset()); |
| 644 EXPECT_VECTOR_EQ(scroll_delta - sent_scroll_delta, layer()->ScrollDelta()); | 539 EXPECT_VECTOR_EQ(scroll_delta - sent_scroll_delta, layer()->ScrollDelta()); |
| 645 EXPECT_VECTOR_EQ(gfx::ScrollOffsetWithDelta(scroll_offset, sent_scroll_delta), | 540 EXPECT_VECTOR_EQ(gfx::ScrollOffsetWithDelta(scroll_offset, sent_scroll_delta), |
| 646 layer()->BaseScrollOffset()); | 541 layer()->BaseScrollOffset()); |
| 647 } | 542 } |
| 648 | 543 |
| 649 TEST_F(LayerImplScrollTest, ApplySentScrollsWithIgnoringDelegate) { | |
| 650 gfx::ScrollOffset scroll_offset(10, 5); | |
| 651 gfx::Vector2d sent_scroll_delta(12, -3); | |
| 652 gfx::Vector2dF fixed_offset(32, 12); | |
| 653 | |
| 654 layer()->PushScrollOffsetFromMainThread(scroll_offset); | |
| 655 layer()->ScrollBy(sent_scroll_delta); | |
| 656 layer()->PullDeltaForMainThread(); | |
| 657 layer()->SetCurrentScrollOffset(scroll_offset); | |
| 658 ScrollDelegateIgnore delegate; | |
| 659 delegate.set_fixed_offset(fixed_offset); | |
| 660 layer()->SetScrollOffsetDelegate(&delegate); | |
| 661 layer()->RefreshFromScrollDelegate(); | |
| 662 | |
| 663 EXPECT_VECTOR_EQ(fixed_offset, layer()->CurrentScrollOffset()); | |
| 664 EXPECT_VECTOR_EQ(scroll_offset, layer()->BaseScrollOffset()); | |
| 665 | |
| 666 layer()->ApplySentScrollDeltasFromAbortedCommit(); | |
| 667 | |
| 668 EXPECT_VECTOR_EQ(fixed_offset, delegate.last_attempted_set_offset()); | |
| 669 | |
| 670 EXPECT_VECTOR_EQ(fixed_offset, layer()->CurrentScrollOffset()); | |
| 671 EXPECT_VECTOR_EQ(gfx::ScrollOffsetWithDelta(scroll_offset, sent_scroll_delta), | |
| 672 layer()->BaseScrollOffset()); | |
| 673 } | |
| 674 | |
| 675 TEST_F(LayerImplScrollTest, ApplySentScrollsWithAcceptingDelegate) { | |
| 676 gfx::ScrollOffset scroll_offset(10, 5); | |
| 677 gfx::Vector2d sent_scroll_delta(12, -3); | |
| 678 gfx::Vector2dF scroll_delta(20.5f, 8.5f); | |
| 679 | |
| 680 layer()->PushScrollOffsetFromMainThread(scroll_offset); | |
| 681 layer()->ScrollBy(sent_scroll_delta); | |
| 682 layer()->PullDeltaForMainThread(); | |
| 683 ScrollDelegateAccept delegate; | |
| 684 layer()->SetScrollOffsetDelegate(&delegate); | |
| 685 layer()->SetCurrentScrollOffset(scroll_offset + | |
| 686 gfx::ScrollOffset(scroll_delta)); | |
| 687 | |
| 688 EXPECT_VECTOR_EQ(gfx::ScrollOffsetWithDelta(scroll_offset, scroll_delta), | |
| 689 layer()->CurrentScrollOffset()); | |
| 690 EXPECT_VECTOR_EQ(scroll_offset, layer()->BaseScrollOffset()); | |
| 691 | |
| 692 layer()->ApplySentScrollDeltasFromAbortedCommit(); | |
| 693 | |
| 694 EXPECT_VECTOR_EQ(gfx::ScrollOffsetWithDelta(scroll_offset, scroll_delta), | |
| 695 layer()->CurrentScrollOffset()); | |
| 696 EXPECT_VECTOR_EQ(gfx::ScrollOffsetWithDelta(scroll_offset, sent_scroll_delta), | |
| 697 layer()->BaseScrollOffset()); | |
| 698 } | |
| 699 | |
| 700 TEST_F(LayerImplScrollTest, ScrollUserUnscrollableLayer) { | 544 TEST_F(LayerImplScrollTest, ScrollUserUnscrollableLayer) { |
| 701 gfx::ScrollOffset scroll_offset(10, 5); | 545 gfx::ScrollOffset scroll_offset(10, 5); |
| 702 gfx::Vector2dF scroll_delta(20.5f, 8.5f); | 546 gfx::Vector2dF scroll_delta(20.5f, 8.5f); |
| 703 | 547 |
| 704 layer()->set_user_scrollable_vertical(false); | 548 layer()->set_user_scrollable_vertical(false); |
| 705 layer()->PushScrollOffsetFromMainThread(scroll_offset); | 549 layer()->PushScrollOffsetFromMainThread(scroll_offset); |
| 706 gfx::Vector2dF unscrolled = layer()->ScrollBy(scroll_delta); | 550 gfx::Vector2dF unscrolled = layer()->ScrollBy(scroll_delta); |
| 707 | 551 |
| 708 EXPECT_VECTOR_EQ(gfx::Vector2dF(0, 8.5f), unscrolled); | 552 EXPECT_VECTOR_EQ(gfx::Vector2dF(0, 8.5f), unscrolled); |
| 709 EXPECT_VECTOR_EQ(gfx::Vector2dF(30.5f, 5), layer()->CurrentScrollOffset()); | 553 EXPECT_VECTOR_EQ(gfx::Vector2dF(30.5f, 5), layer()->CurrentScrollOffset()); |
| (...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 884 | 728 |
| 885 ASSERT_TRUE(layer(IV_SCROLL, ACTIVE)->scrollable()); | 729 ASSERT_TRUE(layer(IV_SCROLL, ACTIVE)->scrollable()); |
| 886 | 730 |
| 887 ASSERT_TRUE(LayerHasScrollbar(OV_SCROLL, ACTIVE)); | 731 ASSERT_TRUE(LayerHasScrollbar(OV_SCROLL, ACTIVE)); |
| 888 ASSERT_TRUE(LayerHasScrollbar(IV_CLIP, ACTIVE)); | 732 ASSERT_TRUE(LayerHasScrollbar(IV_CLIP, ACTIVE)); |
| 889 ASSERT_TRUE(LayerHasScrollbar(IV_SCROLL, ACTIVE)); | 733 ASSERT_TRUE(LayerHasScrollbar(IV_SCROLL, ACTIVE)); |
| 890 } | 734 } |
| 891 | 735 |
| 892 } // namespace | 736 } // namespace |
| 893 } // namespace cc | 737 } // namespace cc |
| OLD | NEW |