| 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 "base/command_line.h" | 5 #include "base/command_line.h" |
| 6 #include "base/memory/scoped_vector.h" | 6 #include "base/memory/scoped_vector.h" |
| 7 #include "base/run_loop.h" | 7 #include "base/run_loop.h" |
| 8 #include "base/strings/string_number_conversions.h" | 8 #include "base/strings/string_number_conversions.h" |
| 9 #include "base/timer/timer.h" | 9 #include "base/timer/timer.h" |
| 10 #include "testing/gtest/include/gtest/gtest.h" | 10 #include "testing/gtest/include/gtest/gtest.h" |
| (...skipping 2151 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2162 windows[i] = CreateTestWindowWithDelegate( | 2162 windows[i] = CreateTestWindowWithDelegate( |
| 2163 delegates[i], i, window_bounds[i], root_window()); | 2163 delegates[i], i, window_bounds[i], root_window()); |
| 2164 windows[i]->set_id(i); | 2164 windows[i]->set_id(i); |
| 2165 ui::TouchEvent press(ui::ET_TOUCH_PRESSED, window_bounds[i].origin(), | 2165 ui::TouchEvent press(ui::ET_TOUCH_PRESSED, window_bounds[i].origin(), |
| 2166 i, tes.Now()); | 2166 i, tes.Now()); |
| 2167 dispatcher()->AsWindowTreeHostDelegate()->OnHostTouchEvent(&press); | 2167 dispatcher()->AsWindowTreeHostDelegate()->OnHostTouchEvent(&press); |
| 2168 } | 2168 } |
| 2169 | 2169 |
| 2170 // Touches should now be associated with the closest touch within | 2170 // Touches should now be associated with the closest touch within |
| 2171 // ui::GestureConfiguration::max_separation_for_gesture_touches_in_pixels | 2171 // ui::GestureConfiguration::max_separation_for_gesture_touches_in_pixels |
| 2172 target = gesture_recognizer->GetTargetForLocation(gfx::Point(11, 11), -1); | 2172 target = gesture_recognizer->GetTargetForLocation(gfx::Point(11, 11)); |
| 2173 EXPECT_EQ("0", WindowIDAsString(target)); | 2173 EXPECT_EQ("0", WindowIDAsString(target)); |
| 2174 target = gesture_recognizer->GetTargetForLocation(gfx::Point(511, 11), -1); | 2174 target = gesture_recognizer->GetTargetForLocation(gfx::Point(511, 11)); |
| 2175 EXPECT_EQ("1", WindowIDAsString(target)); | 2175 EXPECT_EQ("1", WindowIDAsString(target)); |
| 2176 target = gesture_recognizer->GetTargetForLocation(gfx::Point(11, 511), -1); | 2176 target = gesture_recognizer->GetTargetForLocation(gfx::Point(11, 511)); |
| 2177 EXPECT_EQ("2", WindowIDAsString(target)); | 2177 EXPECT_EQ("2", WindowIDAsString(target)); |
| 2178 target = gesture_recognizer->GetTargetForLocation(gfx::Point(511, 511), -1); | 2178 target = gesture_recognizer->GetTargetForLocation(gfx::Point(511, 511)); |
| 2179 EXPECT_EQ("3", WindowIDAsString(target)); | 2179 EXPECT_EQ("3", WindowIDAsString(target)); |
| 2180 | 2180 |
| 2181 // Add a touch in the middle associated with windows[2] | 2181 // Add a touch in the middle associated with windows[2] |
| 2182 ui::TouchEvent press(ui::ET_TOUCH_PRESSED, gfx::Point(0, 500), | 2182 ui::TouchEvent press(ui::ET_TOUCH_PRESSED, gfx::Point(0, 500), |
| 2183 kNumWindows, tes.Now()); | 2183 kNumWindows, tes.Now()); |
| 2184 dispatcher()->AsWindowTreeHostDelegate()->OnHostTouchEvent(&press); | 2184 dispatcher()->AsWindowTreeHostDelegate()->OnHostTouchEvent(&press); |
| 2185 ui::TouchEvent move(ui::ET_TOUCH_MOVED, gfx::Point(250, 250), | 2185 ui::TouchEvent move(ui::ET_TOUCH_MOVED, gfx::Point(250, 250), |
| 2186 kNumWindows, tes.Now()); | 2186 kNumWindows, tes.Now()); |
| 2187 dispatcher()->AsWindowTreeHostDelegate()->OnHostTouchEvent(&move); | 2187 dispatcher()->AsWindowTreeHostDelegate()->OnHostTouchEvent(&move); |
| 2188 | 2188 |
| 2189 target = gesture_recognizer->GetTargetForLocation(gfx::Point(250, 250), -1); | 2189 target = gesture_recognizer->GetTargetForLocation(gfx::Point(250, 250)); |
| 2190 EXPECT_EQ("2", WindowIDAsString(target)); | 2190 EXPECT_EQ("2", WindowIDAsString(target)); |
| 2191 | 2191 |
| 2192 // Make sure that ties are broken by distance to a current touch | 2192 // Make sure that ties are broken by distance to a current touch |
| 2193 // Closer to the point in the bottom right. | 2193 // Closer to the point in the bottom right. |
| 2194 target = gesture_recognizer->GetTargetForLocation(gfx::Point(380, 380), -1); | 2194 target = gesture_recognizer->GetTargetForLocation(gfx::Point(380, 380)); |
| 2195 EXPECT_EQ("3", WindowIDAsString(target)); | 2195 EXPECT_EQ("3", WindowIDAsString(target)); |
| 2196 | 2196 |
| 2197 // This touch is closer to the point in the middle | 2197 // This touch is closer to the point in the middle |
| 2198 target = gesture_recognizer->GetTargetForLocation(gfx::Point(300, 300), -1); | 2198 target = gesture_recognizer->GetTargetForLocation(gfx::Point(300, 300)); |
| 2199 EXPECT_EQ("2", WindowIDAsString(target)); | 2199 EXPECT_EQ("2", WindowIDAsString(target)); |
| 2200 | 2200 |
| 2201 // A touch too far from other touches won't be locked to anything | 2201 // A touch too far from other touches won't be locked to anything |
| 2202 target = gesture_recognizer->GetTargetForLocation(gfx::Point(1000, 1000), -1); | 2202 target = gesture_recognizer->GetTargetForLocation(gfx::Point(1000, 1000)); |
| 2203 EXPECT_TRUE(target == NULL); | 2203 EXPECT_TRUE(target == NULL); |
| 2204 | 2204 |
| 2205 // Move a touch associated with windows[2] to 1000, 1000 | 2205 // Move a touch associated with windows[2] to 1000, 1000 |
| 2206 ui::TouchEvent move2(ui::ET_TOUCH_MOVED, gfx::Point(1000, 1000), | 2206 ui::TouchEvent move2(ui::ET_TOUCH_MOVED, gfx::Point(1000, 1000), |
| 2207 kNumWindows, tes.Now()); | 2207 kNumWindows, tes.Now()); |
| 2208 dispatcher()->AsWindowTreeHostDelegate()->OnHostTouchEvent(&move2); | 2208 dispatcher()->AsWindowTreeHostDelegate()->OnHostTouchEvent(&move2); |
| 2209 | 2209 |
| 2210 target = gesture_recognizer->GetTargetForLocation(gfx::Point(1000, 1000), -1); | 2210 target = gesture_recognizer->GetTargetForLocation(gfx::Point(1000, 1000)); |
| 2211 EXPECT_EQ("2", WindowIDAsString(target)); | 2211 EXPECT_EQ("2", WindowIDAsString(target)); |
| 2212 | 2212 |
| 2213 for (int i = 0; i < kNumWindows; ++i) { | 2213 for (int i = 0; i < kNumWindows; ++i) { |
| 2214 // Delete windows before deleting delegates. | 2214 // Delete windows before deleting delegates. |
| 2215 delete windows[i]; | 2215 delete windows[i]; |
| 2216 delete delegates[i]; | 2216 delete delegates[i]; |
| 2217 } | 2217 } |
| 2218 } | 2218 } |
| 2219 | 2219 |
| 2220 // Check that a touch's target will not be effected by a touch on a different | |
| 2221 // screen. | |
| 2222 TEST_F(GestureRecognizerTest, GestureEventTouchLockIgnoresOtherScreens) { | |
| 2223 scoped_ptr<GestureEventConsumeDelegate> delegate( | |
| 2224 new GestureEventConsumeDelegate()); | |
| 2225 gfx::Rect bounds(0, 0, 10, 10); | |
| 2226 scoped_ptr<aura::Window> window( | |
| 2227 CreateTestWindowWithDelegate(delegate.get(), 0, bounds, root_window())); | |
| 2228 | |
| 2229 const int kTouchId1 = 8; | |
| 2230 const int kTouchId2 = 2; | |
| 2231 TimedEvents tes; | |
| 2232 | |
| 2233 ui::TouchEvent press1(ui::ET_TOUCH_PRESSED, gfx::Point(5, 5), | |
| 2234 kTouchId1, tes.Now()); | |
| 2235 press1.set_source_device_id(1); | |
| 2236 dispatcher()->AsWindowTreeHostDelegate()->OnHostTouchEvent(&press1); | |
| 2237 | |
| 2238 ui::TouchEvent press2(ui::ET_TOUCH_PRESSED, gfx::Point(20, 20), | |
| 2239 kTouchId2, tes.Now()); | |
| 2240 press2.set_source_device_id(2); | |
| 2241 dispatcher()->AsWindowTreeHostDelegate()->OnHostTouchEvent(&press2); | |
| 2242 | |
| 2243 // The second press should not have been locked to the same target as the | |
| 2244 // first, as they occured on different displays. | |
| 2245 EXPECT_NE( | |
| 2246 ui::GestureRecognizer::Get()->GetTouchLockedTarget(press1), | |
| 2247 ui::GestureRecognizer::Get()->GetTouchLockedTarget(press2)); | |
| 2248 } | |
| 2249 | |
| 2250 // Check that touch events outside the root window are still handled | 2220 // Check that touch events outside the root window are still handled |
| 2251 // by the root window's gesture sequence. | 2221 // by the root window's gesture sequence. |
| 2252 TEST_F(GestureRecognizerTest, GestureEventOutsideRootWindowTap) { | 2222 TEST_F(GestureRecognizerTest, GestureEventOutsideRootWindowTap) { |
| 2253 TestGestureRecognizer* gesture_recognizer = | 2223 TestGestureRecognizer* gesture_recognizer = |
| 2254 new TestGestureRecognizer(); | 2224 new TestGestureRecognizer(); |
| 2255 TimedEvents tes; | 2225 TimedEvents tes; |
| 2256 ScopedGestureRecognizerSetter gr_setter(gesture_recognizer); | 2226 ScopedGestureRecognizerSetter gr_setter(gesture_recognizer); |
| 2257 | 2227 |
| 2258 scoped_ptr<aura::Window> window(CreateTestWindowWithBounds( | 2228 scoped_ptr<aura::Window> window(CreateTestWindowWithBounds( |
| 2259 gfx::Rect(-100, -100, 2000, 2000), root_window())); | 2229 gfx::Rect(-100, -100, 2000, 2000), root_window())); |
| (...skipping 1476 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3736 ui::TouchEvent release1(ui::ET_TOUCH_RELEASED, gfx::Point(101, 201), | 3706 ui::TouchEvent release1(ui::ET_TOUCH_RELEASED, gfx::Point(101, 201), |
| 3737 kTouchId, tes.LeapForward(50)); | 3707 kTouchId, tes.LeapForward(50)); |
| 3738 dispatcher()->AsWindowTreeHostDelegate()->OnHostTouchEvent(&release1); | 3708 dispatcher()->AsWindowTreeHostDelegate()->OnHostTouchEvent(&release1); |
| 3739 EXPECT_TRUE(delegate->show_press()); | 3709 EXPECT_TRUE(delegate->show_press()); |
| 3740 EXPECT_FALSE(delegate->tap_cancel()); | 3710 EXPECT_FALSE(delegate->tap_cancel()); |
| 3741 EXPECT_TRUE(delegate->tap()); | 3711 EXPECT_TRUE(delegate->tap()); |
| 3742 } | 3712 } |
| 3743 | 3713 |
| 3744 } // namespace test | 3714 } // namespace test |
| 3745 } // namespace aura | 3715 } // namespace aura |
| OLD | NEW |