OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 <map> | 5 #include <map> |
6 | 6 |
7 #include "base/memory/scoped_ptr.h" | 7 #include "base/memory/scoped_ptr.h" |
8 #include "base/rand_util.h" | 8 #include "base/rand_util.h" |
9 #include "base/string_util.h" | 9 #include "base/string_util.h" |
10 #include "base/utf_string_conversions.h" | 10 #include "base/utf_string_conversions.h" |
(...skipping 629 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
640 v1->last_gesture_event_type_ = ui::ET_UNKNOWN; | 640 v1->last_gesture_event_type_ = ui::ET_UNKNOWN; |
641 v3->last_gesture_event_type_ = ui::ET_UNKNOWN; | 641 v3->last_gesture_event_type_ = ui::ET_UNKNOWN; |
642 root->OnGestureEvent(g1); | 642 root->OnGestureEvent(g1); |
643 EXPECT_EQ(ui::ET_GESTURE_TAP, v1->last_gesture_event_type_); | 643 EXPECT_EQ(ui::ET_GESTURE_TAP, v1->last_gesture_event_type_); |
644 EXPECT_EQ(ui::ET_UNKNOWN, v3->last_gesture_event_type_); | 644 EXPECT_EQ(ui::ET_UNKNOWN, v3->last_gesture_event_type_); |
645 EXPECT_EQ("110,110", v1->location_.ToString()); | 645 EXPECT_EQ("110,110", v1->location_.ToString()); |
646 | 646 |
647 widget->CloseNow(); | 647 widget->CloseNow(); |
648 } | 648 } |
649 | 649 |
| 650 |
| 651 TEST_F(ViewTest, GestureEventWithFuzzing) { |
| 652 scoped_ptr<Widget> widget(new Widget()); |
| 653 Widget::InitParams params(Widget::InitParams::TYPE_POPUP); |
| 654 params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; |
| 655 params.bounds = gfx::Rect(0, 0, 500, 500); |
| 656 widget->Init(params); |
| 657 View* root_view = widget->GetRootView(); |
| 658 |
| 659 // Have this hierarchy of views (the coords here are all in root coord): |
| 660 // v1 (0, 0, 100, 100) |
| 661 // v2 (150, 0, 250, 100) |
| 662 // v3 (0, 200, 150, 100) |
| 663 // v31 (10, 210, 80, 80) |
| 664 // v32 (110, 210, 30, 80) |
| 665 // v4 (300, 200, 100, 100) |
| 666 // v41 (310, 210, 80, 80) |
| 667 // v411 (370, 275, 10, 5) |
| 668 |
| 669 // The coordinates used for SetBounds are in parent coordinates |
| 670 |
| 671 TestView* v1 = new TestViewConsumeGesture(); |
| 672 v1->SetBounds(0, 0, 100, 100); |
| 673 root_view->AddChildView(v1); |
| 674 |
| 675 TestView* v2 = new TestViewConsumeGesture(); |
| 676 v2->SetBounds(150, 0, 250, 100); |
| 677 root_view->AddChildView(v2); |
| 678 |
| 679 TestView* v3 = new TestViewConsumeGesture(); |
| 680 v3->SetBounds(0, 200, 150, 100); |
| 681 root_view->AddChildView(v3); |
| 682 |
| 683 TestView* v4 = new TestViewConsumeGesture(); |
| 684 v4->SetBounds(300, 200, 100, 100); |
| 685 root_view->AddChildView(v4); |
| 686 |
| 687 TestView* v31 = new TestViewIgnoreGesture(); |
| 688 v31->SetBounds(10, 10, 80, 80); |
| 689 v3->AddChildView(v31); |
| 690 |
| 691 TestView* v32 = new TestViewConsumeGesture(); |
| 692 v32->SetBounds(110, 10, 30, 80); |
| 693 v3->AddChildView(v32); |
| 694 |
| 695 TestView* v41 = new TestViewConsumeGesture(); |
| 696 v41->SetBounds(10, 10, 80, 80); |
| 697 v4->AddChildView(v41); |
| 698 |
| 699 TestView* v411 = new TestViewIgnoreGesture(); |
| 700 v411->SetBounds(60, 65, 10, 5); |
| 701 v41->AddChildView(v411); |
| 702 |
| 703 v1->Reset(); |
| 704 v2->Reset(); |
| 705 v3->Reset(); |
| 706 v4->Reset(); |
| 707 v31->Reset(); |
| 708 v32->Reset(); |
| 709 v41->Reset(); |
| 710 v411->Reset(); |
| 711 |
| 712 // Covers v1 by enough |
| 713 ui::GestureEventDetails gesture_details(ui::ET_GESTURE_TAP, 0, 0); |
| 714 gesture_details.set_bounding_box(gfx::Rect(15, 15, 100, 100)); |
| 715 GestureEventForTest g1(ui::ET_GESTURE_TAP, 65, 65, 0); |
| 716 g1.set_details(gesture_details); |
| 717 root_view->OnGestureEvent(g1); |
| 718 EXPECT_EQ(ui::ET_GESTURE_TAP, v1->last_gesture_event_type_); |
| 719 GestureEventForTest g1_up(ui::ET_GESTURE_END, 65, 65, 0); |
| 720 root_view->OnGestureEvent(g1_up); |
| 721 v1->Reset(); |
| 722 |
| 723 // Intersects v1 but does not cover by enough, center point is in v1 |
| 724 gesture_details.set_bounding_box(gfx::Rect(80, 80, 20, 20)); |
| 725 GestureEventForTest g2(ui::ET_GESTURE_TAP, 90, 90, 0); |
| 726 g2.set_details(gesture_details); |
| 727 root_view->OnGestureEvent(g2); |
| 728 EXPECT_EQ(ui::ET_GESTURE_TAP, v1->last_gesture_event_type_); |
| 729 GestureEventForTest g2_up(ui::ET_GESTURE_END, 90, 90, 0); |
| 730 root_view->OnGestureEvent(g2_up); |
| 731 v1->Reset(); |
| 732 |
| 733 // Intersects nothing |
| 734 gesture_details.set_bounding_box(gfx::Rect(105, 105, 30, 45)); |
| 735 GestureEventForTest g3(ui::ET_GESTURE_TAP, 120, 127, 0); |
| 736 g3.set_details(gesture_details); |
| 737 root_view->OnGestureEvent(g3); |
| 738 EXPECT_EQ(ui::ET_UNKNOWN, v1->last_gesture_event_type_); |
| 739 EXPECT_EQ(ui::ET_UNKNOWN, v2->last_gesture_event_type_); |
| 740 EXPECT_EQ(ui::ET_UNKNOWN, v3->last_gesture_event_type_); |
| 741 EXPECT_EQ(ui::ET_UNKNOWN, v32->last_gesture_event_type_); |
| 742 EXPECT_EQ(ui::ET_UNKNOWN, v4->last_gesture_event_type_); |
| 743 EXPECT_EQ(ui::ET_UNKNOWN, v41->last_gesture_event_type_); |
| 744 GestureEventForTest g3_up(ui::ET_GESTURE_END, 120, 127, 0); |
| 745 root_view->OnGestureEvent(g3_up); |
| 746 |
| 747 // Intersects v2 and covers by enough, |
| 748 // Intersects v1 but does not cover by enough |
| 749 gesture_details.set_bounding_box(gfx::Rect(95, 10, 300, 120)); |
| 750 GestureEventForTest g4(ui::ET_GESTURE_TAP, 245, 70, 0); |
| 751 g4.set_details(gesture_details); |
| 752 root_view->OnGestureEvent(g4); |
| 753 EXPECT_EQ(ui::ET_UNKNOWN, v1->last_gesture_event_type_); |
| 754 EXPECT_EQ(ui::ET_GESTURE_TAP, v2->last_gesture_event_type_); |
| 755 GestureEventForTest g4_up(ui::ET_GESTURE_END, 245, 70, 0); |
| 756 root_view->OnGestureEvent(g4_up); |
| 757 v1->Reset(); |
| 758 v2->Reset(); |
| 759 |
| 760 // Intersects v1 and v2 and covers by enough, closer to v2 |
| 761 gesture_details.set_bounding_box(gfx::Rect(20, 20, 400, 100)); |
| 762 GestureEventForTest g5(ui::ET_GESTURE_TAP, 220, 70, 0); |
| 763 g5.set_details(gesture_details); |
| 764 root_view->OnGestureEvent(g5); |
| 765 EXPECT_EQ(ui::ET_UNKNOWN, v1->last_gesture_event_type_); |
| 766 EXPECT_EQ(ui::ET_GESTURE_TAP, v2->last_gesture_event_type_); |
| 767 GestureEventForTest g5_up(ui::ET_GESTURE_END, 220, 70, 0); |
| 768 root_view->OnGestureEvent(g5_up); |
| 769 v1->Reset(); |
| 770 v2->Reset(); |
| 771 |
| 772 // Covers all of v3 up to left side of v32 |
| 773 gesture_details.set_bounding_box(gfx::Rect(0, 200, 110, 100)); |
| 774 GestureEventForTest g6(ui::ET_GESTURE_TAP, 55, 250, 0); |
| 775 g6.set_details(gesture_details); |
| 776 root_view->OnGestureEvent(g6); |
| 777 EXPECT_EQ(ui::ET_UNKNOWN, v31->last_gesture_event_type_); |
| 778 EXPECT_EQ(ui::ET_UNKNOWN, v32->last_gesture_event_type_); |
| 779 EXPECT_EQ(ui::ET_GESTURE_TAP, v3->last_gesture_event_type_); |
| 780 GestureEventForTest g6_up(ui::ET_GESTURE_END, 55, 250, 0); |
| 781 root_view->OnGestureEvent(g6_up); |
| 782 v31->Reset(); |
| 783 v32->Reset(); |
| 784 v3->Reset(); |
| 785 |
| 786 // Covers all of v3 |
| 787 gesture_details.set_bounding_box(gfx::Rect(0, 200, 150, 100)); |
| 788 GestureEventForTest g7(ui::ET_GESTURE_TAP, 75, 250, 0); |
| 789 g7.set_details(gesture_details); |
| 790 root_view->OnGestureEvent(g7); |
| 791 EXPECT_EQ(ui::ET_UNKNOWN, v31->last_gesture_event_type_); |
| 792 EXPECT_EQ(ui::ET_UNKNOWN, v32->last_gesture_event_type_); |
| 793 EXPECT_EQ(ui::ET_GESTURE_TAP, v3->last_gesture_event_type_); |
| 794 GestureEventForTest g7_up(ui::ET_GESTURE_END, 75, 250, 0); |
| 795 root_view->OnGestureEvent(g7_up); |
| 796 v31->Reset(); |
| 797 v32->Reset(); |
| 798 v3->Reset(); |
| 799 |
| 800 // Covers right half of v3 |
| 801 gesture_details.set_bounding_box(gfx::Rect(75, 200, 75, 100)); |
| 802 GestureEventForTest g8(ui::ET_GESTURE_TAP, 112, 250, 0); |
| 803 g8.set_details(gesture_details); |
| 804 root_view->OnGestureEvent(g8); |
| 805 EXPECT_EQ(ui::ET_UNKNOWN, v31->last_gesture_event_type_); |
| 806 EXPECT_EQ(ui::ET_GESTURE_TAP, v32->last_gesture_event_type_); |
| 807 EXPECT_EQ(ui::ET_UNKNOWN, v3->last_gesture_event_type_); |
| 808 GestureEventForTest g8_up(ui::ET_GESTURE_END, 112, 250, 0); |
| 809 root_view->OnGestureEvent(g8_up); |
| 810 v31->Reset(); |
| 811 v32->Reset(); |
| 812 v3->Reset(); |
| 813 |
| 814 // Covers v31 and v32 by enough, but closer to v32 |
| 815 gesture_details.set_bounding_box(gfx::Rect(30, 225, 180, 115)); |
| 816 GestureEventForTest g9(ui::ET_GESTURE_TAP, 120, 282, 0); |
| 817 g9.set_details(gesture_details); |
| 818 root_view->OnGestureEvent(g9); |
| 819 EXPECT_EQ(ui::ET_UNKNOWN, v31->last_gesture_event_type_); |
| 820 EXPECT_EQ(ui::ET_GESTURE_TAP, v32->last_gesture_event_type_); |
| 821 EXPECT_EQ(ui::ET_UNKNOWN, v3->last_gesture_event_type_); |
| 822 GestureEventForTest g9_up(ui::ET_GESTURE_END, 120, 282, 0); |
| 823 root_view->OnGestureEvent(g9_up); |
| 824 v31->Reset(); |
| 825 v32->Reset(); |
| 826 v3->Reset(); |
| 827 |
| 828 // Covers all of v41 |
| 829 gesture_details.set_bounding_box(gfx::Rect(310, 210, 80, 80)); |
| 830 GestureEventForTest g10(ui::ET_GESTURE_TAP, 350, 250, 0); |
| 831 g10.set_details(gesture_details); |
| 832 root_view->OnGestureEvent(g10); |
| 833 EXPECT_EQ(ui::ET_UNKNOWN, v4->last_gesture_event_type_); |
| 834 EXPECT_EQ(ui::ET_GESTURE_TAP, v41->last_gesture_event_type_); |
| 835 EXPECT_EQ(ui::ET_UNKNOWN, v411->last_gesture_event_type_); |
| 836 GestureEventForTest g10_up(ui::ET_GESTURE_END, 350, 250, 0); |
| 837 root_view->OnGestureEvent(g10_up); |
| 838 v4->Reset(); |
| 839 v41->Reset(); |
| 840 v411->Reset(); |
| 841 |
| 842 // Covers all of v411 |
| 843 gesture_details.set_bounding_box(gfx::Rect(370, 275, 10, 5)); |
| 844 GestureEventForTest g11(ui::ET_GESTURE_TAP, 375, 277, 0); |
| 845 g11.set_details(gesture_details); |
| 846 root_view->OnGestureEvent(g11); |
| 847 EXPECT_EQ(ui::ET_UNKNOWN, v4->last_gesture_event_type_); |
| 848 EXPECT_EQ(ui::ET_GESTURE_TAP, v41->last_gesture_event_type_); |
| 849 EXPECT_EQ(ui::ET_UNKNOWN, v411->last_gesture_event_type_); |
| 850 GestureEventForTest g11_up(ui::ET_GESTURE_END, 375, 277, 0); |
| 851 root_view->OnGestureEvent(g11_up); |
| 852 v4->Reset(); |
| 853 v41->Reset(); |
| 854 v411->Reset(); |
| 855 |
| 856 // Intersects v41 and v411 but covers neither by enough |
| 857 gesture_details.set_bounding_box(gfx::Rect(368, 272, 5, 8)); |
| 858 GestureEventForTest g12(ui::ET_GESTURE_TAP, 370, 276, 0); |
| 859 g12.set_details(gesture_details); |
| 860 root_view->OnGestureEvent(g12); |
| 861 EXPECT_EQ(ui::ET_UNKNOWN, v4->last_gesture_event_type_); |
| 862 EXPECT_EQ(ui::ET_GESTURE_TAP, v41->last_gesture_event_type_); |
| 863 EXPECT_EQ(ui::ET_UNKNOWN, v411->last_gesture_event_type_); |
| 864 GestureEventForTest g12_up(ui::ET_GESTURE_END, 370, 276, 0); |
| 865 root_view->OnGestureEvent(g12_up); |
| 866 v4->Reset(); |
| 867 v41->Reset(); |
| 868 v411->Reset(); |
| 869 |
| 870 // Center point in v4, intersects v41 but not by enough |
| 871 gesture_details.set_bounding_box(gfx::Rect(285, 185, 40, 40)); |
| 872 GestureEventForTest g13(ui::ET_GESTURE_TAP, 305, 205, 0); |
| 873 g13.set_details(gesture_details); |
| 874 root_view->OnGestureEvent(g13); |
| 875 EXPECT_EQ(ui::ET_GESTURE_TAP, v4->last_gesture_event_type_); |
| 876 EXPECT_EQ(ui::ET_UNKNOWN, v41->last_gesture_event_type_); |
| 877 EXPECT_EQ(ui::ET_UNKNOWN, v411->last_gesture_event_type_); |
| 878 GestureEventForTest g13_up(ui::ET_GESTURE_END, 305, 205, 0); |
| 879 root_view->OnGestureEvent(g13_up); |
| 880 v4->Reset(); |
| 881 v41->Reset(); |
| 882 v411->Reset(); |
| 883 |
| 884 // Intersects v31, v32 (covers by enough), v411 (does not cover |
| 885 // by enough) and is closest to v32 |
| 886 gesture_details.set_bounding_box(gfx::Rect(20, 222, 352, 250)); |
| 887 GestureEventForTest g14(ui::ET_GESTURE_TAP, 196, 347, 0); |
| 888 g14.set_details(gesture_details); |
| 889 root_view->OnGestureEvent(g14); |
| 890 EXPECT_EQ(ui::ET_UNKNOWN, v1->last_gesture_event_type_); |
| 891 EXPECT_EQ(ui::ET_UNKNOWN, v2->last_gesture_event_type_); |
| 892 EXPECT_EQ(ui::ET_UNKNOWN, v3->last_gesture_event_type_); |
| 893 EXPECT_EQ(ui::ET_UNKNOWN, v4->last_gesture_event_type_); |
| 894 EXPECT_EQ(ui::ET_UNKNOWN, v31->last_gesture_event_type_); |
| 895 EXPECT_EQ(ui::ET_GESTURE_TAP, v32->last_gesture_event_type_); |
| 896 EXPECT_EQ(ui::ET_UNKNOWN, v41->last_gesture_event_type_); |
| 897 EXPECT_EQ(ui::ET_UNKNOWN, v411->last_gesture_event_type_); |
| 898 GestureEventForTest g14_up(ui::ET_GESTURE_END, 196, 347, 0); |
| 899 root_view->OnGestureEvent(g14_up); |
| 900 v1->Reset(); |
| 901 v2->Reset(); |
| 902 v3->Reset(); |
| 903 v4->Reset(); |
| 904 v31->Reset(); |
| 905 v32->Reset(); |
| 906 v41->Reset(); |
| 907 v411->Reset(); |
| 908 |
| 909 // Covers all views completely |
| 910 gesture_details.set_bounding_box(gfx::Rect(0, 0, 400, 300)); |
| 911 GestureEventForTest g15(ui::ET_GESTURE_TAP, 200, 150, 0); |
| 912 g15.set_details(gesture_details); |
| 913 root_view->OnGestureEvent(g15); |
| 914 EXPECT_EQ(ui::ET_UNKNOWN, v1->last_gesture_event_type_); |
| 915 EXPECT_EQ(ui::ET_GESTURE_TAP, v2->last_gesture_event_type_); |
| 916 EXPECT_EQ(ui::ET_UNKNOWN, v3->last_gesture_event_type_); |
| 917 EXPECT_EQ(ui::ET_UNKNOWN, v4->last_gesture_event_type_); |
| 918 EXPECT_EQ(ui::ET_UNKNOWN, v31->last_gesture_event_type_); |
| 919 EXPECT_EQ(ui::ET_UNKNOWN, v32->last_gesture_event_type_); |
| 920 EXPECT_EQ(ui::ET_UNKNOWN, v41->last_gesture_event_type_); |
| 921 EXPECT_EQ(ui::ET_UNKNOWN, v411->last_gesture_event_type_); |
| 922 GestureEventForTest g15_up(ui::ET_GESTURE_END, 200, 150, 0); |
| 923 root_view->OnGestureEvent(g15_up); |
| 924 v1->Reset(); |
| 925 v2->Reset(); |
| 926 v3->Reset(); |
| 927 v4->Reset(); |
| 928 v31->Reset(); |
| 929 v32->Reset(); |
| 930 v41->Reset(); |
| 931 v411->Reset(); |
| 932 |
| 933 // Covers enough of v32, v2, v411 (closest to v411) |
| 934 gesture_details.set_bounding_box(gfx::Rect(110, 15, 375, 450)); |
| 935 GestureEventForTest g16(ui::ET_GESTURE_TAP, 307, 240, 0); |
| 936 g16.set_details(gesture_details); |
| 937 root_view->OnGestureEvent(g16); |
| 938 EXPECT_EQ(ui::ET_UNKNOWN, v1->last_gesture_event_type_); |
| 939 EXPECT_EQ(ui::ET_UNKNOWN, v2->last_gesture_event_type_); |
| 940 EXPECT_EQ(ui::ET_UNKNOWN, v3->last_gesture_event_type_); |
| 941 EXPECT_EQ(ui::ET_UNKNOWN, v4->last_gesture_event_type_); |
| 942 EXPECT_EQ(ui::ET_UNKNOWN, v31->last_gesture_event_type_); |
| 943 EXPECT_EQ(ui::ET_UNKNOWN, v32->last_gesture_event_type_); |
| 944 EXPECT_EQ(ui::ET_GESTURE_TAP, v41->last_gesture_event_type_); |
| 945 EXPECT_EQ(ui::ET_UNKNOWN, v411->last_gesture_event_type_); |
| 946 GestureEventForTest g16_up(ui::ET_GESTURE_END, 307, 240, 0); |
| 947 root_view->OnGestureEvent(g16_up); |
| 948 v1->Reset(); |
| 949 v2->Reset(); |
| 950 v3->Reset(); |
| 951 v4->Reset(); |
| 952 v31->Reset(); |
| 953 v32->Reset(); |
| 954 v41->Reset(); |
| 955 v411->Reset(); |
| 956 |
| 957 widget->CloseNow(); |
| 958 } |
| 959 |
650 TEST_F(ViewTest, ScrollGestureEvent) { | 960 TEST_F(ViewTest, ScrollGestureEvent) { |
651 // Views hierarchy for non delivery of GestureEvent. | 961 // Views hierarchy for non delivery of GestureEvent. |
652 TestView* v1 = new TestViewConsumeGesture(); | 962 TestView* v1 = new TestViewConsumeGesture(); |
653 v1->SetBoundsRect(gfx::Rect(0, 0, 300, 300)); | 963 v1->SetBoundsRect(gfx::Rect(0, 0, 300, 300)); |
654 | 964 |
655 TestView* v2 = new TestViewIgnoreScrollGestures(); | 965 TestView* v2 = new TestViewIgnoreScrollGestures(); |
656 v2->SetBoundsRect(gfx::Rect(100, 100, 100, 100)); | 966 v2->SetBoundsRect(gfx::Rect(100, 100, 100, 100)); |
657 | 967 |
658 TestView* v3 = new TestViewIgnoreGesture(); | 968 TestView* v3 = new TestViewIgnoreGesture(); |
659 v3->SetBoundsRect(gfx::Rect(0, 0, 100, 100)); | 969 v3->SetBoundsRect(gfx::Rect(0, 0, 100, 100)); |
(...skipping 329 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
989 | 1299 |
990 // Test GetEventHandlerForPoint | 1300 // Test GetEventHandlerForPoint |
991 EXPECT_EQ(v1, root_view->GetEventHandlerForPoint(v1_centerpoint)); | 1301 EXPECT_EQ(v1, root_view->GetEventHandlerForPoint(v1_centerpoint)); |
992 EXPECT_EQ(v2, root_view->GetEventHandlerForPoint(v2_centerpoint)); | 1302 EXPECT_EQ(v2, root_view->GetEventHandlerForPoint(v2_centerpoint)); |
993 EXPECT_EQ(v1, root_view->GetEventHandlerForPoint(v1_origin)); | 1303 EXPECT_EQ(v1, root_view->GetEventHandlerForPoint(v1_origin)); |
994 EXPECT_EQ(root_view, root_view->GetEventHandlerForPoint(v2_origin)); | 1304 EXPECT_EQ(root_view, root_view->GetEventHandlerForPoint(v2_origin)); |
995 | 1305 |
996 widget->CloseNow(); | 1306 widget->CloseNow(); |
997 } | 1307 } |
998 | 1308 |
| 1309 TEST_F(ViewTest, GetEventHandlerForRect) { |
| 1310 Widget* widget = new Widget; |
| 1311 widget->Init(Widget::InitParams(Widget::InitParams::TYPE_POPUP)); |
| 1312 View* root_view = widget->GetRootView(); |
| 1313 root_view->SetBoundsRect(gfx::Rect(0, 0, 500, 500)); |
| 1314 |
| 1315 // Have this hierarchy of views (the coords here are all in root coord): |
| 1316 // v1 (0, 0, 100, 100) |
| 1317 // v2 (150, 0, 250, 100) |
| 1318 // v3 (0, 200, 150, 100) |
| 1319 // v31 (10, 210, 80, 80) |
| 1320 // v32 (110, 210, 30, 80) |
| 1321 // v4 (300, 200, 100, 100) |
| 1322 // v41 (310, 210, 80, 80) |
| 1323 // v411 (370, 275, 10, 5) |
| 1324 |
| 1325 // The coordinates used for SetBounds are in parent coordinates |
| 1326 |
| 1327 TestView* v1 = new TestView; |
| 1328 v1->SetBounds(0, 0, 100, 100); |
| 1329 root_view->AddChildView(v1); |
| 1330 |
| 1331 TestView* v2 = new TestView; |
| 1332 v2->SetBounds(150, 0, 250, 100); |
| 1333 root_view->AddChildView(v2); |
| 1334 |
| 1335 TestView* v3 = new TestView; |
| 1336 v3->SetBounds(0, 200, 150, 100); |
| 1337 root_view->AddChildView(v3); |
| 1338 |
| 1339 TestView* v4 = new TestView; |
| 1340 v4->SetBounds(300, 200, 100, 100); |
| 1341 root_view->AddChildView(v4); |
| 1342 |
| 1343 TestView* v31 = new TestView; |
| 1344 v31->SetBounds(10, 10, 80, 80); |
| 1345 v3->AddChildView(v31); |
| 1346 |
| 1347 TestView* v32 = new TestView; |
| 1348 v32->SetBounds(110, 10, 30, 80); |
| 1349 v3->AddChildView(v32); |
| 1350 |
| 1351 TestView* v41 = new TestView; |
| 1352 v41->SetBounds(10, 10, 80, 80); |
| 1353 v4->AddChildView(v41); |
| 1354 |
| 1355 TestView* v411 = new TestView; |
| 1356 v411->SetBounds(60, 65, 10, 5); |
| 1357 v41->AddChildView(v411); |
| 1358 |
| 1359 // Covers v1 by enough |
| 1360 gfx::Rect touch_rect(15, 15, 100, 100); |
| 1361 View* result_view = root_view->GetEventHandlerForRect(touch_rect); |
| 1362 EXPECT_EQ(result_view, v1); |
| 1363 |
| 1364 // Intersects v1 but does not cover by enough |
| 1365 touch_rect.SetRect(80, 90, 20, 20); |
| 1366 result_view = root_view->GetEventHandlerForRect(touch_rect); |
| 1367 EXPECT_FALSE(result_view); |
| 1368 |
| 1369 // Intersects nothing |
| 1370 touch_rect.SetRect(105, 105, 30, 45); |
| 1371 result_view = root_view->GetEventHandlerForRect(touch_rect); |
| 1372 EXPECT_FALSE(result_view); |
| 1373 |
| 1374 // Intersects v2 and covers by enough, |
| 1375 // Intersects v1 but does not cover by enough |
| 1376 touch_rect.SetRect(95, 10, 300, 120); |
| 1377 result_view = root_view->GetEventHandlerForRect(touch_rect); |
| 1378 EXPECT_EQ(result_view, v2); |
| 1379 |
| 1380 // Intersects v1 and v2 and covers by enough, closer to v2 |
| 1381 touch_rect.SetRect(20, 20, 400, 100); |
| 1382 result_view = root_view->GetEventHandlerForRect(touch_rect); |
| 1383 EXPECT_EQ(result_view, v2); |
| 1384 |
| 1385 // Covers all of v3 up to left side of v32 |
| 1386 touch_rect.SetRect(0, 200, 110, 100); |
| 1387 result_view = root_view->GetEventHandlerForRect(touch_rect); |
| 1388 EXPECT_EQ(result_view, v31); |
| 1389 |
| 1390 // Covers all of v3 |
| 1391 touch_rect.SetRect(0, 200, 150, 100); |
| 1392 result_view = root_view->GetEventHandlerForRect(touch_rect); |
| 1393 EXPECT_EQ(result_view, v31); |
| 1394 |
| 1395 // Covers right half of v3 |
| 1396 touch_rect.SetRect(75, 200, 75, 100); |
| 1397 result_view = root_view->GetEventHandlerForRect(touch_rect); |
| 1398 EXPECT_EQ(result_view, v32); |
| 1399 |
| 1400 // Covers v31 and v32 by enough, but closer to v32 |
| 1401 touch_rect.SetRect(30, 225, 180, 115); |
| 1402 result_view = root_view->GetEventHandlerForRect(touch_rect); |
| 1403 EXPECT_EQ(result_view, v32); |
| 1404 |
| 1405 // Covers all of v41 |
| 1406 touch_rect.SetRect(310, 210, 80, 80); |
| 1407 result_view = root_view->GetEventHandlerForRect(touch_rect); |
| 1408 EXPECT_EQ(result_view, v411); |
| 1409 |
| 1410 // Covers all of v411 |
| 1411 touch_rect.SetRect(370, 275, 10, 5); |
| 1412 result_view = root_view->GetEventHandlerForRect(touch_rect); |
| 1413 EXPECT_EQ(result_view, v411); |
| 1414 |
| 1415 // Intersects v41 and v411 but covers neither by enough |
| 1416 touch_rect.SetRect(368, 272, 5, 8); |
| 1417 result_view = root_view->GetEventHandlerForRect(touch_rect); |
| 1418 EXPECT_FALSE(result_view); |
| 1419 |
| 1420 // Covers enough of v41 but not enough of v411 |
| 1421 touch_rect.SetRect(315, 212, 62, 64); |
| 1422 result_view = root_view->GetEventHandlerForRect(touch_rect); |
| 1423 EXPECT_FALSE(result_view); |
| 1424 |
| 1425 // Intersects v31, v32 (covers by enough), v4111 (does not cover |
| 1426 // by enough) and is closest to v32 |
| 1427 touch_rect.SetRect(20, 222, 352, 250); |
| 1428 result_view = root_view->GetEventHandlerForRect(touch_rect); |
| 1429 EXPECT_EQ(result_view, v32); |
| 1430 |
| 1431 // Covers all views completely |
| 1432 touch_rect.SetRect(0, 0, 400, 300); |
| 1433 result_view = root_view->GetEventHandlerForRect(touch_rect); |
| 1434 EXPECT_EQ(result_view, v2); |
| 1435 |
| 1436 // Covers enough of v32, v2, v411 (closest to v411) |
| 1437 touch_rect.SetRect(110, 15, 375, 450); |
| 1438 result_view = root_view->GetEventHandlerForRect(touch_rect); |
| 1439 EXPECT_EQ(result_view, v411); |
| 1440 |
| 1441 widget->CloseNow(); |
| 1442 } |
| 1443 |
999 TEST_F(ViewTest, NotifyEnterExitOnChild) { | 1444 TEST_F(ViewTest, NotifyEnterExitOnChild) { |
1000 Widget* widget = new Widget; | 1445 Widget* widget = new Widget; |
1001 widget->Init(Widget::InitParams(Widget::InitParams::TYPE_POPUP)); | 1446 widget->Init(Widget::InitParams(Widget::InitParams::TYPE_POPUP)); |
1002 View* root_view = widget->GetRootView(); | 1447 View* root_view = widget->GetRootView(); |
1003 root_view->SetBoundsRect(gfx::Rect(0, 0, 500, 500)); | 1448 root_view->SetBoundsRect(gfx::Rect(0, 0, 500, 500)); |
1004 | 1449 |
1005 // Have this hierarchy of views (the coords here are in root coord): | 1450 // Have this hierarchy of views (the coords here are in root coord): |
1006 // v1 (0, 0, 100, 100) | 1451 // v1 (0, 0, 100, 100) |
1007 // - v11 (0, 0, 20, 30) | 1452 // - v11 (0, 0, 20, 30) |
1008 // - v111 (5, 5, 5, 15) | 1453 // - v111 (5, 5, 5, 15) |
(...skipping 2328 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3337 // Set to non default value. | 3782 // Set to non default value. |
3338 v->layer()->set_scale_content(false); | 3783 v->layer()->set_scale_content(false); |
3339 scoped_ptr<ui::Layer> old_layer(v->RecreateLayer()); | 3784 scoped_ptr<ui::Layer> old_layer(v->RecreateLayer()); |
3340 ui::Layer* new_layer = v->layer(); | 3785 ui::Layer* new_layer = v->layer(); |
3341 EXPECT_FALSE(new_layer->scale_content()); | 3786 EXPECT_FALSE(new_layer->scale_content()); |
3342 } | 3787 } |
3343 | 3788 |
3344 #endif // USE_AURA | 3789 #endif // USE_AURA |
3345 | 3790 |
3346 } // namespace views | 3791 } // namespace views |
OLD | NEW |