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/strings/string_util.h" | 9 #include "base/strings/string_util.h" |
10 #include "base/strings/stringprintf.h" | 10 #include "base/strings/stringprintf.h" |
(...skipping 467 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
478 widget->CloseNow(); | 478 widget->CloseNow(); |
479 } | 479 } |
480 | 480 |
481 //////////////////////////////////////////////////////////////////////////////// | 481 //////////////////////////////////////////////////////////////////////////////// |
482 // GestureEvent | 482 // GestureEvent |
483 //////////////////////////////////////////////////////////////////////////////// | 483 //////////////////////////////////////////////////////////////////////////////// |
484 | 484 |
485 void TestView::OnGestureEvent(ui::GestureEvent* event) { | 485 void TestView::OnGestureEvent(ui::GestureEvent* event) { |
486 } | 486 } |
487 | 487 |
488 TEST_F(ViewTest, GestureEvent) { | |
489 // Views hierarchy for non delivery of GestureEvent. | |
490 TestView* v1 = new TestViewConsumeGesture(); | |
491 v1->SetBoundsRect(gfx::Rect(0, 0, 300, 300)); | |
492 | |
493 TestView* v2 = new TestViewConsumeGesture(); | |
494 v2->SetBoundsRect(gfx::Rect(100, 100, 100, 100)); | |
495 | |
496 TestView* v3 = new TestViewIgnoreGesture(); | |
497 v3->SetBoundsRect(gfx::Rect(0, 0, 100, 100)); | |
498 | |
499 scoped_ptr<Widget> widget(new Widget()); | |
500 Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP); | |
501 params.ownership = views::Widget::InitParams::WIDGET_OWNS_NATIVE_WIDGET; | |
502 params.bounds = gfx::Rect(50, 50, 650, 650); | |
503 widget->Init(params); | |
504 internal::RootView* root = | |
505 static_cast<internal::RootView*>(widget->GetRootView()); | |
506 ui::EventDispatchDetails details; | |
507 | |
508 root->AddChildView(v1); | |
509 v1->AddChildView(v2); | |
510 v2->AddChildView(v3); | |
511 | |
512 // |v3| completely obscures |v2|, but all the gesture events on |v3| should | |
513 // reach |v2| because |v3| doesn't process any gesture events. However, since | |
514 // |v2| does process gesture events, gesture events on |v3| or |v2| should not | |
515 // reach |v1|. | |
516 | |
517 v1->Reset(); | |
518 v2->Reset(); | |
519 v3->Reset(); | |
520 | |
521 // Gesture on |v3| | |
522 GestureEventForTest g1(ui::ET_GESTURE_TAP, 110, 110, 0); | |
523 details = root->OnEventFromSource(&g1); | |
524 EXPECT_FALSE(details.dispatcher_destroyed); | |
525 EXPECT_FALSE(details.target_destroyed); | |
526 | |
527 EXPECT_EQ(ui::ET_GESTURE_TAP, v2->last_gesture_event_type_); | |
528 EXPECT_EQ(gfx::Point(10, 10), v2->location_); | |
529 EXPECT_EQ(ui::ET_UNKNOWN, v1->last_gesture_event_type_); | |
530 | |
531 // Simulate an up so that RootView is no longer targetting |v3|. | |
532 GestureEventForTest g1_up(ui::ET_GESTURE_END, 110, 110, 0); | |
533 details = root->OnEventFromSource(&g1_up); | |
534 EXPECT_FALSE(details.dispatcher_destroyed); | |
535 EXPECT_FALSE(details.target_destroyed); | |
536 | |
537 v1->Reset(); | |
538 v2->Reset(); | |
539 v3->Reset(); | |
540 | |
541 // Gesture on |v1| | |
542 GestureEventForTest g2(ui::ET_GESTURE_TAP, 80, 80, 0); | |
543 details = root->OnEventFromSource(&g2); | |
544 EXPECT_FALSE(details.dispatcher_destroyed); | |
545 EXPECT_FALSE(details.target_destroyed); | |
546 | |
547 EXPECT_EQ(ui::ET_GESTURE_TAP, v1->last_gesture_event_type_); | |
548 EXPECT_EQ(gfx::Point(80, 80), v1->location_); | |
549 EXPECT_EQ(ui::ET_UNKNOWN, v2->last_gesture_event_type_); | |
550 | |
551 // Send event |g1| again. Even though the coordinates target |v3| it should go | |
552 // to |v1| as that is the view the touch was initially down on. | |
553 v1->last_gesture_event_type_ = ui::ET_UNKNOWN; | |
554 v3->last_gesture_event_type_ = ui::ET_UNKNOWN; | |
555 details = root->OnEventFromSource(&g1); | |
556 EXPECT_FALSE(details.dispatcher_destroyed); | |
557 EXPECT_FALSE(details.target_destroyed); | |
558 | |
559 EXPECT_EQ(ui::ET_GESTURE_TAP, v1->last_gesture_event_type_); | |
560 EXPECT_EQ(ui::ET_UNKNOWN, v3->last_gesture_event_type_); | |
561 EXPECT_EQ("110,110", v1->location_.ToString()); | |
562 | |
563 widget->CloseNow(); | |
564 } | |
565 | |
566 TEST_F(ViewTest, ScrollGestureEvent) { | 488 TEST_F(ViewTest, ScrollGestureEvent) { |
567 // Views hierarchy for non delivery of GestureEvent. | 489 // Views hierarchy for non delivery of GestureEvent. |
568 TestView* v1 = new TestViewConsumeGesture(); | 490 TestView* v1 = new TestViewConsumeGesture(); |
569 v1->SetBoundsRect(gfx::Rect(0, 0, 300, 300)); | 491 v1->SetBoundsRect(gfx::Rect(0, 0, 300, 300)); |
570 | 492 |
571 TestView* v2 = new TestViewIgnoreScrollGestures(); | 493 TestView* v2 = new TestViewIgnoreScrollGestures(); |
572 v2->SetBoundsRect(gfx::Rect(100, 100, 100, 100)); | 494 v2->SetBoundsRect(gfx::Rect(100, 100, 100, 100)); |
573 | 495 |
574 TestView* v3 = new TestViewIgnoreGesture(); | 496 TestView* v3 = new TestViewIgnoreGesture(); |
575 v3->SetBoundsRect(gfx::Rect(0, 0, 100, 100)); | 497 v3->SetBoundsRect(gfx::Rect(0, 0, 100, 100)); |
(...skipping 3327 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3903 // notification. | 3825 // notification. |
3904 TestView* test_view_child_2 = new TestView(); | 3826 TestView* test_view_child_2 = new TestView(); |
3905 test_view->AddChildView(test_view_child_2); | 3827 test_view->AddChildView(test_view_child_2); |
3906 EXPECT_TRUE(test_view_child_2->native_theme_); | 3828 EXPECT_TRUE(test_view_child_2->native_theme_); |
3907 EXPECT_EQ(widget->GetNativeTheme(), test_view_child_2->native_theme_); | 3829 EXPECT_EQ(widget->GetNativeTheme(), test_view_child_2->native_theme_); |
3908 | 3830 |
3909 widget->CloseNow(); | 3831 widget->CloseNow(); |
3910 } | 3832 } |
3911 | 3833 |
3912 } // namespace views | 3834 } // namespace views |
OLD | NEW |