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