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 |