Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1239)

Unified Diff: ui/views/view_targeter_unittest.cc

Issue 365263004: Remove hit test mask methods from views::View (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: re-upload Created 6 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/views/view.cc ('k') | ui/views/view_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/views/view_targeter_unittest.cc
diff --git a/ui/views/view_targeter_unittest.cc b/ui/views/view_targeter_unittest.cc
index fa851f083023e99e2f20937c9fb3174c462b9fda..62adec8e82803d9e8cea3c72e5bd0759d3551cfd 100644
--- a/ui/views/view_targeter_unittest.cc
+++ b/ui/views/view_targeter_unittest.cc
@@ -78,6 +78,22 @@ namespace test {
typedef ViewsTestBase ViewTargeterTest;
+namespace {
+
+gfx::Point ConvertPointToView(View* view, const gfx::Point& p) {
+ gfx::Point tmp(p);
+ View::ConvertPointToTarget(view->GetWidget()->GetRootView(), view, &tmp);
+ return tmp;
+}
+
+gfx::Rect ConvertRectToView(View* view, const gfx::Rect& r) {
+ gfx::Rect tmp(r);
+ tmp.set_origin(ConvertPointToView(view, r.origin()));
+ return tmp;
+}
+
+} // namespace
+
// Verifies that the the functions ViewTargeter::FindTargetForEvent()
// and ViewTargeter::FindNextBestTarget() are implemented correctly
// for key events.
@@ -388,5 +404,80 @@ TEST_F(ViewTargeterTest, DoesIntersectRect) {
gfx::Rect(-20, -20, 10, 10)));
}
+// Tests that calls made directly on the hit-testing methods in View
+// (HitTestPoint(), HitTestRect(), etc.) return the correct values.
+TEST_F(ViewTargeterTest, HitTestCallsOnView) {
+ // The coordinates in this test are in the coordinate space of the root view.
+ Widget* widget = new Widget;
+ Widget::InitParams params = CreateParams(Widget::InitParams::TYPE_POPUP);
+ widget->Init(params);
+ View* root_view = widget->GetRootView();
+ root_view->SetBoundsRect(gfx::Rect(0, 0, 500, 500));
+
+ // |v1| has no hit test mask. No ViewTargeter is installed on |v1|, which
+ // means that View::HitTestRect() will call into the targeter installed on
+ // the root view instead when we hit test against |v1|.
+ gfx::Rect v1_bounds = gfx::Rect(0, 0, 100, 100);
+ TestingView* v1 = new TestingView();
+ v1->SetBoundsRect(v1_bounds);
+ root_view->AddChildView(v1);
+
+ // |v2| has a triangular hit test mask. Install a ViewTargeter on |v2| which
+ // will be called into by View::HitTestRect().
+ gfx::Rect v2_bounds = gfx::Rect(105, 0, 100, 100);
+ TestMaskedView* v2 = new TestMaskedView();
+ v2->SetBoundsRect(v2_bounds);
+ root_view->AddChildView(v2);
+ ViewTargeter* view_targeter = new ViewTargeter(v2);
+ v2->SetEventTargeter(make_scoped_ptr(view_targeter));
+
+ gfx::Point v1_centerpoint = v1_bounds.CenterPoint();
+ gfx::Point v2_centerpoint = v2_bounds.CenterPoint();
+ gfx::Point v1_origin = v1_bounds.origin();
+ gfx::Point v2_origin = v2_bounds.origin();
+ gfx::Rect r1(10, 10, 110, 15);
+ gfx::Rect r2(106, 1, 98, 98);
+ gfx::Rect r3(0, 0, 300, 300);
+ gfx::Rect r4(115, 342, 200, 10);
+
+ // Test calls into View::HitTestPoint().
+ EXPECT_TRUE(v1->HitTestPoint(ConvertPointToView(v1, v1_centerpoint)));
+ EXPECT_TRUE(v2->HitTestPoint(ConvertPointToView(v2, v2_centerpoint)));
+
+ EXPECT_TRUE(v1->HitTestPoint(ConvertPointToView(v1, v1_origin)));
+ EXPECT_FALSE(v2->HitTestPoint(ConvertPointToView(v2, v2_origin)));
+
+ // Test calls into View::HitTestRect().
+ EXPECT_TRUE(v1->HitTestRect(ConvertRectToView(v1, r1)));
+ EXPECT_FALSE(v2->HitTestRect(ConvertRectToView(v2, r1)));
+
+ EXPECT_FALSE(v1->HitTestRect(ConvertRectToView(v1, r2)));
+ EXPECT_TRUE(v2->HitTestRect(ConvertRectToView(v2, r2)));
+
+ EXPECT_TRUE(v1->HitTestRect(ConvertRectToView(v1, r3)));
+ EXPECT_TRUE(v2->HitTestRect(ConvertRectToView(v2, r3)));
+
+ EXPECT_FALSE(v1->HitTestRect(ConvertRectToView(v1, r4)));
+ EXPECT_FALSE(v2->HitTestRect(ConvertRectToView(v2, r4)));
+
+ // Test calls into View::GetEventHandlerForPoint().
+ EXPECT_EQ(v1, root_view->GetEventHandlerForPoint(v1_centerpoint));
+ EXPECT_EQ(v2, root_view->GetEventHandlerForPoint(v2_centerpoint));
+
+ EXPECT_EQ(v1, root_view->GetEventHandlerForPoint(v1_origin));
+ EXPECT_EQ(root_view, root_view->GetEventHandlerForPoint(v2_origin));
+
+ // Test calls into View::GetTooltipHandlerForPoint().
+ EXPECT_EQ(v1, root_view->GetTooltipHandlerForPoint(v1_centerpoint));
+ EXPECT_EQ(v2, root_view->GetTooltipHandlerForPoint(v2_centerpoint));
+
+ EXPECT_EQ(v1, root_view->GetTooltipHandlerForPoint(v1_origin));
+ EXPECT_EQ(root_view, root_view->GetTooltipHandlerForPoint(v2_origin));
+
+ EXPECT_FALSE(v1->GetTooltipHandlerForPoint(v2_origin));
+
+ widget->CloseNow();
+}
+
} // namespace test
} // namespace views
« no previous file with comments | « ui/views/view.cc ('k') | ui/views/view_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698