OLD | NEW |
---|---|
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "ui/touch_selection/touch_handle.h" | 5 #include "ui/touch_selection/touch_handle.h" |
6 | 6 |
7 #include "testing/gtest/include/gtest/gtest.h" | 7 #include "testing/gtest/include/gtest/gtest.h" |
8 #include "ui/events/test/motion_event_test_utils.h" | 8 #include "ui/events/test/motion_event_test_utils.h" |
9 #include "ui/gfx/geometry/rect_f.h" | 9 #include "ui/gfx/geometry/rect_f.h" |
10 #include "ui/touch_selection/touch_handle_orientation.h" | 10 #include "ui/touch_selection/touch_handle_orientation.h" |
11 | 11 |
12 using ui::test::MockMotionEvent; | 12 using ui::test::MockMotionEvent; |
13 | 13 |
14 namespace ui { | 14 namespace ui { |
15 namespace { | 15 namespace { |
16 | 16 |
17 const int kDefaultTapTimeoutMs = 200; | 17 const int kDefaultTapTimeoutMs = 200; |
18 const float kDefaultTapSlop = 10.f; | 18 const float kDefaultTapSlop = 10.f; |
19 const float kDefaultDrawableSize = 10.f; | 19 const float kDefaultDrawableSize = 10.f; |
20 const gfx::RectF kDefaultViewportRect(0, 0, 560, 1200); | |
20 | 21 |
21 struct MockDrawableData { | 22 struct MockDrawableData { |
22 MockDrawableData() | 23 MockDrawableData() |
23 : orientation(TouchHandleOrientation::UNDEFINED), | 24 : orientation(TouchHandleOrientation::UNDEFINED), |
24 alpha(0.f), | 25 alpha(0.f), |
25 enabled(false), | 26 enabled(false), |
26 visible(false), | 27 visible(false), |
27 rect(0, 0, kDefaultDrawableSize, kDefaultDrawableSize) {} | 28 rect(0, 0, kDefaultDrawableSize, kDefaultDrawableSize) {} |
28 TouchHandleOrientation orientation; | 29 TouchHandleOrientation orientation; |
29 float alpha; | 30 float alpha; |
31 bool mirror_horizontal; | |
32 bool mirror_vertical; | |
30 bool enabled; | 33 bool enabled; |
31 bool visible; | 34 bool visible; |
32 gfx::RectF rect; | 35 gfx::RectF rect; |
33 }; | 36 }; |
34 | 37 |
35 class MockTouchHandleDrawable : public TouchHandleDrawable { | 38 class MockTouchHandleDrawable : public TouchHandleDrawable { |
36 public: | 39 public: |
37 explicit MockTouchHandleDrawable(MockDrawableData* data) : data_(data) {} | 40 explicit MockTouchHandleDrawable(MockDrawableData* data) : data_(data) {} |
38 ~MockTouchHandleDrawable() override {} | 41 ~MockTouchHandleDrawable() override {} |
39 | 42 |
40 void SetEnabled(bool enabled) override { data_->enabled = enabled; } | 43 void SetEnabled(bool enabled) override { data_->enabled = enabled; } |
41 | 44 |
42 void SetOrientation(TouchHandleOrientation orientation) override { | 45 void SetLayout(const gfx::PointF& position, |
46 TouchHandleOrientation orientation, | |
47 bool mirror_vertical, | |
48 bool mirror_horizontal) override { | |
49 data_->rect.set_origin(position); | |
43 data_->orientation = orientation; | 50 data_->orientation = orientation; |
51 data_->mirror_horizontal = mirror_horizontal; | |
52 data_->mirror_vertical = mirror_vertical; | |
44 } | 53 } |
45 | 54 |
46 void SetAlpha(float alpha) override { | 55 void SetAlpha(float alpha) override { |
47 data_->alpha = alpha; | 56 data_->alpha = alpha; |
48 data_->visible = alpha > 0; | 57 data_->visible = alpha > 0; |
49 } | 58 } |
50 | 59 |
51 void SetFocus(const gfx::PointF& position) override { | 60 gfx::SizeF GetDrawablePadding() const override { return gfx::SizeF(); } |
mfomitchev
2015/06/18 16:16:31
Once we have the implementation nailed down, we sh
AviD
2015/06/19 07:20:47
Acknowledged.
| |
52 // Anchor focus to the top left of the rect (regardless of orientation). | |
53 data_->rect.set_origin(position); | |
54 } | |
55 | 61 |
56 gfx::RectF GetVisibleBounds() const override { | 62 gfx::RectF GetVisibleBounds() const override { |
57 return data_->rect; | 63 return data_->rect; |
58 } | 64 } |
59 | 65 |
60 private: | 66 private: |
61 MockDrawableData* data_; | 67 MockDrawableData* data_; |
62 }; | 68 }; |
63 | 69 |
64 } // namespace | 70 } // namespace |
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
137 gfx::PointF drag_position_; | 143 gfx::PointF drag_position_; |
138 bool dragging_; | 144 bool dragging_; |
139 bool dragged_; | 145 bool dragged_; |
140 bool tapped_; | 146 bool tapped_; |
141 bool needs_animate_; | 147 bool needs_animate_; |
142 | 148 |
143 MockDrawableData drawable_data_; | 149 MockDrawableData drawable_data_; |
144 }; | 150 }; |
145 | 151 |
146 TEST_F(TouchHandleTest, Visibility) { | 152 TEST_F(TouchHandleTest, Visibility) { |
147 TouchHandle handle(this, TouchHandleOrientation::CENTER); | 153 TouchHandle handle(this, TouchHandleOrientation::CENTER, |
154 kDefaultViewportRect); | |
148 EXPECT_FALSE(drawable().visible); | 155 EXPECT_FALSE(drawable().visible); |
149 | 156 |
150 handle.SetVisible(true, TouchHandle::ANIMATION_NONE); | 157 handle.SetVisible(true, TouchHandle::ANIMATION_NONE); |
151 EXPECT_TRUE(drawable().visible); | 158 EXPECT_TRUE(drawable().visible); |
152 EXPECT_EQ(1.f, drawable().alpha); | 159 EXPECT_EQ(1.f, drawable().alpha); |
153 | 160 |
154 handle.SetVisible(false, TouchHandle::ANIMATION_NONE); | 161 handle.SetVisible(false, TouchHandle::ANIMATION_NONE); |
155 EXPECT_FALSE(drawable().visible); | 162 EXPECT_FALSE(drawable().visible); |
156 | 163 |
157 handle.SetVisible(true, TouchHandle::ANIMATION_NONE); | 164 handle.SetVisible(true, TouchHandle::ANIMATION_NONE); |
158 EXPECT_TRUE(drawable().visible); | 165 EXPECT_TRUE(drawable().visible); |
159 EXPECT_EQ(1.f, drawable().alpha); | 166 EXPECT_EQ(1.f, drawable().alpha); |
160 } | 167 } |
161 | 168 |
162 TEST_F(TouchHandleTest, VisibilityAnimation) { | 169 TEST_F(TouchHandleTest, VisibilityAnimation) { |
163 TouchHandle handle(this, TouchHandleOrientation::CENTER); | 170 TouchHandle handle(this, TouchHandleOrientation::CENTER, |
171 kDefaultViewportRect); | |
164 ASSERT_FALSE(NeedsAnimate()); | 172 ASSERT_FALSE(NeedsAnimate()); |
165 ASSERT_FALSE(drawable().visible); | 173 ASSERT_FALSE(drawable().visible); |
166 ASSERT_EQ(0.f, drawable().alpha); | 174 ASSERT_EQ(0.f, drawable().alpha); |
167 | 175 |
168 handle.SetVisible(true, TouchHandle::ANIMATION_SMOOTH); | 176 handle.SetVisible(true, TouchHandle::ANIMATION_SMOOTH); |
169 EXPECT_TRUE(NeedsAnimate()); | 177 EXPECT_TRUE(NeedsAnimate()); |
170 EXPECT_FALSE(drawable().visible); | 178 EXPECT_FALSE(drawable().visible); |
171 EXPECT_EQ(0.f, drawable().alpha); | 179 EXPECT_EQ(0.f, drawable().alpha); |
172 | 180 |
173 Animate(handle); | 181 Animate(handle); |
(...skipping 15 matching lines...) Expand all Loading... | |
189 EXPECT_FALSE(GetAndResetNeedsAnimate()); | 197 EXPECT_FALSE(GetAndResetNeedsAnimate()); |
190 handle.SetVisible(false, TouchHandle::ANIMATION_SMOOTH); | 198 handle.SetVisible(false, TouchHandle::ANIMATION_SMOOTH); |
191 EXPECT_EQ(1.f, drawable().alpha); | 199 EXPECT_EQ(1.f, drawable().alpha); |
192 EXPECT_TRUE(GetAndResetNeedsAnimate()); | 200 EXPECT_TRUE(GetAndResetNeedsAnimate()); |
193 handle.SetVisible(true, TouchHandle::ANIMATION_SMOOTH); | 201 handle.SetVisible(true, TouchHandle::ANIMATION_SMOOTH); |
194 EXPECT_EQ(1.f, drawable().alpha); | 202 EXPECT_EQ(1.f, drawable().alpha); |
195 EXPECT_FALSE(GetAndResetNeedsAnimate()); | 203 EXPECT_FALSE(GetAndResetNeedsAnimate()); |
196 } | 204 } |
197 | 205 |
198 TEST_F(TouchHandleTest, Orientation) { | 206 TEST_F(TouchHandleTest, Orientation) { |
199 TouchHandle handle(this, TouchHandleOrientation::CENTER); | 207 TouchHandle handle(this, TouchHandleOrientation::CENTER, |
208 kDefaultViewportRect); | |
200 EXPECT_EQ(TouchHandleOrientation::CENTER, drawable().orientation); | 209 EXPECT_EQ(TouchHandleOrientation::CENTER, drawable().orientation); |
201 | 210 |
211 handle.SetVisible(true, TouchHandle::ANIMATION_NONE); | |
202 handle.SetOrientation(TouchHandleOrientation::LEFT); | 212 handle.SetOrientation(TouchHandleOrientation::LEFT); |
203 EXPECT_EQ(TouchHandleOrientation::LEFT, drawable().orientation); | 213 EXPECT_EQ(TouchHandleOrientation::LEFT, drawable().orientation); |
204 | 214 |
205 handle.SetOrientation(TouchHandleOrientation::RIGHT); | 215 handle.SetOrientation(TouchHandleOrientation::RIGHT); |
206 EXPECT_EQ(TouchHandleOrientation::RIGHT, drawable().orientation); | 216 EXPECT_EQ(TouchHandleOrientation::RIGHT, drawable().orientation); |
207 | 217 |
208 handle.SetOrientation(TouchHandleOrientation::CENTER); | 218 handle.SetOrientation(TouchHandleOrientation::CENTER); |
209 EXPECT_EQ(TouchHandleOrientation::CENTER, drawable().orientation); | 219 EXPECT_EQ(TouchHandleOrientation::CENTER, drawable().orientation); |
210 } | 220 } |
211 | 221 |
212 TEST_F(TouchHandleTest, Position) { | 222 TEST_F(TouchHandleTest, Position) { |
213 TouchHandle handle(this, TouchHandleOrientation::CENTER); | 223 TouchHandle handle(this, TouchHandleOrientation::CENTER, |
224 kDefaultViewportRect); | |
214 handle.SetVisible(true, TouchHandle::ANIMATION_NONE); | 225 handle.SetVisible(true, TouchHandle::ANIMATION_NONE); |
215 | 226 |
216 gfx::PointF position; | 227 gfx::PointF focus_top; |
228 gfx::PointF focus_bottom; | |
217 EXPECT_EQ(gfx::PointF(), drawable().rect.origin()); | 229 EXPECT_EQ(gfx::PointF(), drawable().rect.origin()); |
218 | 230 |
219 position = gfx::PointF(7.3f, -3.7f); | 231 focus_top = gfx::PointF(7.3f, -3.7f); |
220 handle.SetPosition(position); | 232 focus_bottom = gfx::PointF(7.3f, -2.7f); |
221 EXPECT_EQ(position, drawable().rect.origin()); | 233 handle.SetFocus(focus_top, focus_bottom); |
234 EXPECT_EQ(focus_bottom, drawable().rect.origin()); | |
222 | 235 |
223 position = gfx::PointF(-7.3f, 3.7f); | 236 focus_top = gfx::PointF(-7.3f, 3.7f); |
224 handle.SetPosition(position); | 237 focus_bottom = gfx::PointF(-7.3f, 4.7f); |
225 EXPECT_EQ(position, drawable().rect.origin()); | 238 handle.SetFocus(focus_top, focus_bottom); |
239 EXPECT_EQ(focus_bottom, drawable().rect.origin()); | |
226 } | 240 } |
227 | 241 |
228 TEST_F(TouchHandleTest, PositionNotUpdatedWhileFadingOrInvisible) { | 242 TEST_F(TouchHandleTest, PositionNotUpdatedWhileFadingOrInvisible) { |
229 TouchHandle handle(this, TouchHandleOrientation::CENTER); | 243 TouchHandle handle(this, TouchHandleOrientation::CENTER, |
244 kDefaultViewportRect); | |
230 | 245 |
231 handle.SetVisible(true, TouchHandle::ANIMATION_NONE); | 246 handle.SetVisible(true, TouchHandle::ANIMATION_NONE); |
232 ASSERT_TRUE(drawable().visible); | 247 ASSERT_TRUE(drawable().visible); |
233 ASSERT_FALSE(NeedsAnimate()); | 248 ASSERT_FALSE(NeedsAnimate()); |
234 | 249 |
235 gfx::PointF old_position(7.3f, -3.7f); | 250 gfx::PointF old_focus_top(7.3f, -3.7f); |
236 handle.SetPosition(old_position); | 251 gfx::PointF old_focus_bottom(7.3f, -2.7f); |
237 ASSERT_EQ(old_position, drawable().rect.origin()); | 252 handle.SetFocus(old_focus_top, old_focus_bottom); |
253 ASSERT_EQ(old_focus_bottom, drawable().rect.origin()); | |
238 | 254 |
239 handle.SetVisible(false, TouchHandle::ANIMATION_SMOOTH); | 255 handle.SetVisible(false, TouchHandle::ANIMATION_SMOOTH); |
240 ASSERT_TRUE(NeedsAnimate()); | 256 ASSERT_TRUE(NeedsAnimate()); |
241 | 257 |
242 gfx::PointF new_position(3.7f, -3.7f); | 258 gfx::PointF new_position_top(3.7f, -3.7f); |
243 handle.SetPosition(new_position); | 259 gfx::PointF new_position_bottom(3.7f, -2.7f); |
244 EXPECT_EQ(old_position, drawable().rect.origin()); | 260 handle.SetFocus(new_position_top, new_position_bottom); |
261 EXPECT_EQ(old_focus_bottom, drawable().rect.origin()); | |
245 EXPECT_TRUE(NeedsAnimate()); | 262 EXPECT_TRUE(NeedsAnimate()); |
246 | 263 |
247 // While the handle is fading, the new position should not take affect. | 264 // While the handle is fading, the new position should not take affect. |
248 base::TimeTicks now = base::TimeTicks::Now(); | 265 base::TimeTicks now = base::TimeTicks::Now(); |
249 while (handle.Animate(now)) { | 266 while (handle.Animate(now)) { |
250 EXPECT_EQ(old_position, drawable().rect.origin()); | 267 EXPECT_EQ(old_focus_bottom, drawable().rect.origin()); |
251 now += base::TimeDelta::FromMilliseconds(16); | 268 now += base::TimeDelta::FromMilliseconds(16); |
252 } | 269 } |
253 | 270 |
254 // Even after the animation terminates, the new position will not be pushed. | 271 // Even after the animation terminates, the new position will not be pushed. |
255 EXPECT_EQ(old_position, drawable().rect.origin()); | 272 EXPECT_EQ(old_focus_bottom, drawable().rect.origin()); |
256 | 273 |
257 // As soon as the handle becomes visible, the new position will be pushed. | 274 // As soon as the handle becomes visible, the new position will be pushed. |
258 handle.SetVisible(true, TouchHandle::ANIMATION_SMOOTH); | 275 handle.SetVisible(true, TouchHandle::ANIMATION_SMOOTH); |
259 EXPECT_EQ(new_position, drawable().rect.origin()); | 276 EXPECT_EQ(new_position_bottom, drawable().rect.origin()); |
260 } | 277 } |
261 | 278 |
262 TEST_F(TouchHandleTest, Enabled) { | 279 TEST_F(TouchHandleTest, Enabled) { |
263 // A newly created handle defaults to enabled. | 280 // A newly created handle defaults to enabled. |
264 TouchHandle handle(this, TouchHandleOrientation::CENTER); | 281 TouchHandle handle(this, TouchHandleOrientation::CENTER, |
282 kDefaultViewportRect); | |
265 EXPECT_TRUE(drawable().enabled); | 283 EXPECT_TRUE(drawable().enabled); |
266 | 284 |
267 handle.SetVisible(true, TouchHandle::ANIMATION_SMOOTH); | 285 handle.SetVisible(true, TouchHandle::ANIMATION_SMOOTH); |
268 EXPECT_TRUE(GetAndResetNeedsAnimate()); | 286 EXPECT_TRUE(GetAndResetNeedsAnimate()); |
269 EXPECT_EQ(0.f, drawable().alpha); | 287 EXPECT_EQ(0.f, drawable().alpha); |
270 handle.SetEnabled(false); | 288 handle.SetEnabled(false); |
271 EXPECT_FALSE(drawable().enabled); | 289 EXPECT_FALSE(drawable().enabled); |
272 | 290 |
273 // Dragging should not be allowed while the handle is disabled. | 291 // Dragging should not be allowed while the handle is disabled. |
274 base::TimeTicks event_time = base::TimeTicks::Now(); | 292 base::TimeTicks event_time = base::TimeTicks::Now(); |
(...skipping 16 matching lines...) Expand all Loading... | |
291 handle.SetEnabled(true); | 309 handle.SetEnabled(true); |
292 handle.SetVisible(true, TouchHandle::ANIMATION_NONE); | 310 handle.SetVisible(true, TouchHandle::ANIMATION_NONE); |
293 EXPECT_TRUE(handle.WillHandleTouchEvent(event)); | 311 EXPECT_TRUE(handle.WillHandleTouchEvent(event)); |
294 EXPECT_TRUE(IsDragging()); | 312 EXPECT_TRUE(IsDragging()); |
295 handle.SetEnabled(false); | 313 handle.SetEnabled(false); |
296 EXPECT_FALSE(IsDragging()); | 314 EXPECT_FALSE(IsDragging()); |
297 EXPECT_FALSE(handle.WillHandleTouchEvent(event)); | 315 EXPECT_FALSE(handle.WillHandleTouchEvent(event)); |
298 } | 316 } |
299 | 317 |
300 TEST_F(TouchHandleTest, Drag) { | 318 TEST_F(TouchHandleTest, Drag) { |
301 TouchHandle handle(this, TouchHandleOrientation::CENTER); | 319 TouchHandle handle(this, TouchHandleOrientation::CENTER, |
320 kDefaultViewportRect); | |
302 | 321 |
303 base::TimeTicks event_time = base::TimeTicks::Now(); | 322 base::TimeTicks event_time = base::TimeTicks::Now(); |
304 const float kOffset = kDefaultDrawableSize / 2.f; | 323 const float kOffset = kDefaultDrawableSize / 2.f; |
305 | 324 |
306 // The handle must be visible to trigger drag. | 325 // The handle must be visible to trigger drag. |
307 MockMotionEvent event( | 326 MockMotionEvent event( |
308 MockMotionEvent::ACTION_DOWN, event_time, kOffset, kOffset); | 327 MockMotionEvent::ACTION_DOWN, event_time, kOffset, kOffset); |
309 EXPECT_FALSE(handle.WillHandleTouchEvent(event)); | 328 EXPECT_FALSE(handle.WillHandleTouchEvent(event)); |
310 EXPECT_FALSE(IsDragging()); | 329 EXPECT_FALSE(IsDragging()); |
311 handle.SetVisible(true, TouchHandle::ANIMATION_NONE); | 330 handle.SetVisible(true, TouchHandle::ANIMATION_NONE); |
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
345 EXPECT_TRUE(handle.WillHandleTouchEvent(event)); | 364 EXPECT_TRUE(handle.WillHandleTouchEvent(event)); |
346 EXPECT_FALSE(GetAndResetHandleDragged()); | 365 EXPECT_FALSE(GetAndResetHandleDragged()); |
347 EXPECT_FALSE(IsDragging()); | 366 EXPECT_FALSE(IsDragging()); |
348 | 367 |
349 // Non-ACTION_DOWN events after the drag has terminated should not be handled. | 368 // Non-ACTION_DOWN events after the drag has terminated should not be handled. |
350 event = MockMotionEvent(MockMotionEvent::ACTION_CANCEL); | 369 event = MockMotionEvent(MockMotionEvent::ACTION_CANCEL); |
351 EXPECT_FALSE(handle.WillHandleTouchEvent(event)); | 370 EXPECT_FALSE(handle.WillHandleTouchEvent(event)); |
352 } | 371 } |
353 | 372 |
354 TEST_F(TouchHandleTest, DragDefersOrientationChange) { | 373 TEST_F(TouchHandleTest, DragDefersOrientationChange) { |
355 TouchHandle handle(this, TouchHandleOrientation::RIGHT); | 374 TouchHandle handle(this, TouchHandleOrientation::RIGHT, kDefaultViewportRect); |
356 ASSERT_EQ(drawable().orientation, TouchHandleOrientation::RIGHT); | 375 ASSERT_EQ(drawable().orientation, TouchHandleOrientation::RIGHT); |
357 handle.SetVisible(true, TouchHandle::ANIMATION_NONE); | 376 handle.SetVisible(true, TouchHandle::ANIMATION_NONE); |
358 | 377 |
359 MockMotionEvent event(MockMotionEvent::ACTION_DOWN); | 378 MockMotionEvent event(MockMotionEvent::ACTION_DOWN); |
360 EXPECT_TRUE(handle.WillHandleTouchEvent(event)); | 379 EXPECT_TRUE(handle.WillHandleTouchEvent(event)); |
361 EXPECT_TRUE(IsDragging()); | 380 EXPECT_TRUE(IsDragging()); |
362 | 381 |
363 // Orientation changes will be deferred until the drag ends. | 382 // Orientation changes will be deferred until the drag ends. |
364 handle.SetOrientation(TouchHandleOrientation::LEFT); | 383 handle.SetOrientation(TouchHandleOrientation::LEFT); |
365 EXPECT_EQ(TouchHandleOrientation::RIGHT, drawable().orientation); | 384 EXPECT_EQ(TouchHandleOrientation::RIGHT, drawable().orientation); |
366 | 385 |
367 event = MockMotionEvent(MockMotionEvent::ACTION_MOVE); | 386 event = MockMotionEvent(MockMotionEvent::ACTION_MOVE); |
368 EXPECT_TRUE(handle.WillHandleTouchEvent(event)); | 387 EXPECT_TRUE(handle.WillHandleTouchEvent(event)); |
369 EXPECT_TRUE(GetAndResetHandleDragged()); | 388 EXPECT_TRUE(GetAndResetHandleDragged()); |
370 EXPECT_TRUE(IsDragging()); | 389 EXPECT_TRUE(IsDragging()); |
371 EXPECT_EQ(TouchHandleOrientation::RIGHT, drawable().orientation); | 390 EXPECT_EQ(TouchHandleOrientation::RIGHT, drawable().orientation); |
372 | 391 |
373 event = MockMotionEvent(MockMotionEvent::ACTION_UP); | 392 event = MockMotionEvent(MockMotionEvent::ACTION_UP); |
374 EXPECT_TRUE(handle.WillHandleTouchEvent(event)); | 393 EXPECT_TRUE(handle.WillHandleTouchEvent(event)); |
375 EXPECT_FALSE(GetAndResetHandleDragged()); | 394 EXPECT_FALSE(GetAndResetHandleDragged()); |
376 EXPECT_FALSE(IsDragging()); | 395 EXPECT_FALSE(IsDragging()); |
377 EXPECT_EQ(TouchHandleOrientation::LEFT, drawable().orientation); | 396 EXPECT_EQ(TouchHandleOrientation::LEFT, drawable().orientation); |
378 } | 397 } |
379 | 398 |
380 TEST_F(TouchHandleTest, DragDefersFade) { | 399 TEST_F(TouchHandleTest, DragDefersFade) { |
381 TouchHandle handle(this, TouchHandleOrientation::CENTER); | 400 TouchHandle handle(this, TouchHandleOrientation::CENTER, |
401 kDefaultViewportRect); | |
382 handle.SetVisible(true, TouchHandle::ANIMATION_NONE); | 402 handle.SetVisible(true, TouchHandle::ANIMATION_NONE); |
383 | 403 |
384 MockMotionEvent event(MockMotionEvent::ACTION_DOWN); | 404 MockMotionEvent event(MockMotionEvent::ACTION_DOWN); |
385 EXPECT_TRUE(handle.WillHandleTouchEvent(event)); | 405 EXPECT_TRUE(handle.WillHandleTouchEvent(event)); |
386 EXPECT_TRUE(IsDragging()); | 406 EXPECT_TRUE(IsDragging()); |
387 | 407 |
388 // Fade will be deferred until the drag ends. | 408 // Fade will be deferred until the drag ends. |
389 handle.SetVisible(false, TouchHandle::ANIMATION_SMOOTH); | 409 handle.SetVisible(false, TouchHandle::ANIMATION_SMOOTH); |
390 EXPECT_FALSE(NeedsAnimate()); | 410 EXPECT_FALSE(NeedsAnimate()); |
391 EXPECT_TRUE(drawable().visible); | 411 EXPECT_TRUE(drawable().visible); |
392 EXPECT_EQ(1.f, drawable().alpha); | 412 EXPECT_EQ(1.f, drawable().alpha); |
393 | 413 |
394 event = MockMotionEvent(MockMotionEvent::ACTION_MOVE); | 414 event = MockMotionEvent(MockMotionEvent::ACTION_MOVE); |
395 EXPECT_TRUE(handle.WillHandleTouchEvent(event)); | 415 EXPECT_TRUE(handle.WillHandleTouchEvent(event)); |
396 EXPECT_FALSE(NeedsAnimate()); | 416 EXPECT_FALSE(NeedsAnimate()); |
397 EXPECT_TRUE(drawable().visible); | 417 EXPECT_TRUE(drawable().visible); |
398 | 418 |
399 event = MockMotionEvent(MockMotionEvent::ACTION_UP); | 419 event = MockMotionEvent(MockMotionEvent::ACTION_UP); |
400 EXPECT_TRUE(handle.WillHandleTouchEvent(event)); | 420 EXPECT_TRUE(handle.WillHandleTouchEvent(event)); |
401 EXPECT_FALSE(IsDragging()); | 421 EXPECT_FALSE(IsDragging()); |
402 EXPECT_TRUE(NeedsAnimate()); | 422 EXPECT_TRUE(NeedsAnimate()); |
403 | 423 |
404 Animate(handle); | 424 Animate(handle); |
405 EXPECT_FALSE(drawable().visible); | 425 EXPECT_FALSE(drawable().visible); |
406 EXPECT_EQ(0.f, drawable().alpha); | 426 EXPECT_EQ(0.f, drawable().alpha); |
407 } | 427 } |
408 | 428 |
409 TEST_F(TouchHandleTest, DragTargettingUsesTouchSize) { | 429 TEST_F(TouchHandleTest, DragTargettingUsesTouchSize) { |
410 TouchHandle handle(this, TouchHandleOrientation::CENTER); | 430 TouchHandle handle(this, TouchHandleOrientation::CENTER, |
431 kDefaultViewportRect); | |
411 handle.SetVisible(true, TouchHandle::ANIMATION_NONE); | 432 handle.SetVisible(true, TouchHandle::ANIMATION_NONE); |
412 | 433 |
413 base::TimeTicks event_time = base::TimeTicks::Now(); | 434 base::TimeTicks event_time = base::TimeTicks::Now(); |
414 const float kTouchSize = 24.f; | 435 const float kTouchSize = 24.f; |
415 const float kOffset = kDefaultDrawableSize + kTouchSize / 2.001f; | 436 const float kOffset = kDefaultDrawableSize + kTouchSize / 2.001f; |
416 | 437 |
417 MockMotionEvent event( | 438 MockMotionEvent event( |
418 MockMotionEvent::ACTION_DOWN, event_time, kOffset, 0); | 439 MockMotionEvent::ACTION_DOWN, event_time, kOffset, 0); |
419 event.SetTouchMajor(0.f); | 440 event.SetTouchMajor(0.f); |
420 EXPECT_FALSE(handle.WillHandleTouchEvent(event)); | 441 EXPECT_FALSE(handle.WillHandleTouchEvent(event)); |
(...skipping 30 matching lines...) Expand all Loading... | |
451 event = MockMotionEvent(MockMotionEvent::ACTION_DOWN, | 472 event = MockMotionEvent(MockMotionEvent::ACTION_DOWN, |
452 event_time, | 473 event_time, |
453 kDefaultDrawableSize / 2.f, | 474 kDefaultDrawableSize / 2.f, |
454 kDefaultDrawableSize / 2.f); | 475 kDefaultDrawableSize / 2.f); |
455 event.SetTouchMajor(0); | 476 event.SetTouchMajor(0); |
456 EXPECT_TRUE(handle.WillHandleTouchEvent(event)); | 477 EXPECT_TRUE(handle.WillHandleTouchEvent(event)); |
457 EXPECT_TRUE(IsDragging()); | 478 EXPECT_TRUE(IsDragging()); |
458 } | 479 } |
459 | 480 |
460 TEST_F(TouchHandleTest, Tap) { | 481 TEST_F(TouchHandleTest, Tap) { |
461 TouchHandle handle(this, TouchHandleOrientation::CENTER); | 482 TouchHandle handle(this, TouchHandleOrientation::CENTER, |
483 kDefaultViewportRect); | |
462 handle.SetVisible(true, TouchHandle::ANIMATION_NONE); | 484 handle.SetVisible(true, TouchHandle::ANIMATION_NONE); |
463 | 485 |
464 base::TimeTicks event_time = base::TimeTicks::Now(); | 486 base::TimeTicks event_time = base::TimeTicks::Now(); |
465 | 487 |
466 // ACTION_CANCEL shouldn't trigger a tap. | 488 // ACTION_CANCEL shouldn't trigger a tap. |
467 MockMotionEvent event(MockMotionEvent::ACTION_DOWN, event_time, 0, 0); | 489 MockMotionEvent event(MockMotionEvent::ACTION_DOWN, event_time, 0, 0); |
468 EXPECT_TRUE(handle.WillHandleTouchEvent(event)); | 490 EXPECT_TRUE(handle.WillHandleTouchEvent(event)); |
469 event_time += base::TimeDelta::FromMilliseconds(50); | 491 event_time += base::TimeDelta::FromMilliseconds(50); |
470 event = MockMotionEvent(MockMotionEvent::ACTION_CANCEL, event_time, 0, 0); | 492 event = MockMotionEvent(MockMotionEvent::ACTION_CANCEL, event_time, 0, 0); |
471 EXPECT_TRUE(handle.WillHandleTouchEvent(event)); | 493 EXPECT_TRUE(handle.WillHandleTouchEvent(event)); |
(...skipping 25 matching lines...) Expand all Loading... | |
497 event_time += GetTapTimeout() / 2; | 519 event_time += GetTapTimeout() / 2; |
498 event = MockMotionEvent( | 520 event = MockMotionEvent( |
499 MockMotionEvent::ACTION_MOVE, event_time, kDefaultTapSlop * 2.f, 0); | 521 MockMotionEvent::ACTION_MOVE, event_time, kDefaultTapSlop * 2.f, 0); |
500 EXPECT_TRUE(handle.WillHandleTouchEvent(event)); | 522 EXPECT_TRUE(handle.WillHandleTouchEvent(event)); |
501 event = MockMotionEvent( | 523 event = MockMotionEvent( |
502 MockMotionEvent::ACTION_UP, event_time, kDefaultTapSlop * 2.f, 0); | 524 MockMotionEvent::ACTION_UP, event_time, kDefaultTapSlop * 2.f, 0); |
503 EXPECT_TRUE(handle.WillHandleTouchEvent(event)); | 525 EXPECT_TRUE(handle.WillHandleTouchEvent(event)); |
504 EXPECT_FALSE(GetAndResetHandleTapped()); | 526 EXPECT_FALSE(GetAndResetHandleTapped()); |
505 } | 527 } |
506 | 528 |
529 TEST_F(TouchHandleTest, MirrorFocusChange) { | |
530 TouchHandle handle(this, TouchHandleOrientation::LEFT, kDefaultViewportRect); | |
531 handle.SetVisible(true, TouchHandle::ANIMATION_NONE); | |
532 | |
533 gfx::PointF focus_top; | |
534 gfx::PointF focus_bottom; | |
535 EXPECT_EQ(gfx::PointF(), drawable().rect.origin()); | |
536 | |
537 // Moving the selection to the bottom of the screen | |
538 // should mirror the handle vertically. | |
539 focus_top = gfx::PointF(17.3f, 1199.0f); | |
540 focus_bottom = gfx::PointF(17.3f, 1200.0f); | |
541 handle.SetFocus(focus_top, focus_bottom); | |
542 EXPECT_TRUE(drawable().mirror_vertical); | |
543 EXPECT_FALSE(drawable().mirror_horizontal); | |
544 | |
545 // Moving the left handle to the left edge of the viewport | |
546 // should mirror the handle horizontally as well. | |
547 focus_top = gfx::PointF(2.3f, 1199.0f); | |
548 focus_bottom = gfx::PointF(2.3f, 1200.0f); | |
549 handle.SetFocus(focus_top, focus_bottom); | |
550 EXPECT_TRUE(drawable().mirror_vertical); | |
551 EXPECT_TRUE(drawable().mirror_horizontal); | |
552 | |
553 // When the selection is not at the bottom, only the | |
554 // horizontal mirror flag should be true. | |
555 focus_top = gfx::PointF(2.3f, 7.3f); | |
556 focus_bottom = gfx::PointF(2.3f, 8.3f); | |
557 handle.SetFocus(focus_top, focus_bottom); | |
558 EXPECT_FALSE(drawable().mirror_vertical); | |
559 EXPECT_TRUE(drawable().mirror_horizontal); | |
560 | |
561 // When selection handles intersects the viewport fully, | |
562 // both mirror values should be false. | |
563 focus_top = gfx::PointF(23.3f, 7.3f); | |
564 focus_bottom = gfx::PointF(23.3f, 8.3f); | |
565 handle.SetFocus(focus_top, focus_bottom); | |
566 EXPECT_FALSE(drawable().mirror_vertical); | |
567 EXPECT_FALSE(drawable().mirror_horizontal); | |
568 | |
569 // Horizontal mirror should be true for Right handle when | |
570 // the handle is at theright edge of the viewport. | |
571 handle.SetOrientation(TouchHandleOrientation::RIGHT); | |
572 focus_top = gfx::PointF(560.0f, 7.3f); | |
573 focus_bottom = gfx::PointF(560.0f, 8.3f); | |
574 handle.SetFocus(focus_top, focus_bottom); | |
575 EXPECT_FALSE(drawable().mirror_vertical); | |
576 EXPECT_TRUE(drawable().mirror_horizontal); | |
577 } | |
578 | |
579 TEST_F(TouchHandleTest, DragDefersMirrorChange) { | |
580 TouchHandle handle(this, TouchHandleOrientation::RIGHT, kDefaultViewportRect); | |
581 ASSERT_EQ(drawable().orientation, TouchHandleOrientation::RIGHT); | |
582 handle.SetVisible(true, TouchHandle::ANIMATION_NONE); | |
583 | |
584 base::TimeTicks event_time = base::TimeTicks::Now(); | |
585 const float kOffset = kDefaultDrawableSize / 2.f; | |
586 | |
587 // Start the drag. | |
588 MockMotionEvent event(MockMotionEvent::ACTION_DOWN, event_time, kOffset, | |
589 kOffset); | |
590 EXPECT_TRUE(handle.WillHandleTouchEvent(event)); | |
591 EXPECT_TRUE(IsDragging()); | |
592 | |
593 handle.SetOrientation(TouchHandleOrientation::LEFT); | |
594 gfx::PointF focus_top(17.3f, 1199.0f); | |
595 gfx::PointF focus_bottom(17.3f, 1200.0f); | |
596 handle.SetFocus(focus_top, focus_bottom); | |
597 EXPECT_FALSE(drawable().mirror_vertical); | |
598 EXPECT_FALSE(drawable().mirror_horizontal); | |
599 | |
600 // Mirror flag changes will be deferred until the drag ends. | |
601 event = MockMotionEvent(MockMotionEvent::ACTION_UP); | |
602 EXPECT_TRUE(handle.WillHandleTouchEvent(event)); | |
603 EXPECT_FALSE(GetAndResetHandleDragged()); | |
604 EXPECT_FALSE(IsDragging()); | |
605 EXPECT_TRUE(drawable().mirror_vertical); | |
606 EXPECT_FALSE(drawable().mirror_horizontal); | |
607 } | |
608 | |
609 TEST_F(TouchHandleTest, ViewportSizeChange) { | |
610 TouchHandle handle(this, TouchHandleOrientation::RIGHT, kDefaultViewportRect); | |
611 ASSERT_EQ(drawable().orientation, TouchHandleOrientation::RIGHT); | |
612 handle.SetVisible(true, TouchHandle::ANIMATION_NONE); | |
613 | |
614 gfx::PointF focus_top; | |
615 gfx::PointF focus_bottom; | |
616 EXPECT_EQ(gfx::PointF(), drawable().rect.origin()); | |
617 | |
618 focus_top = gfx::PointF(230.0f, 599.0f); | |
619 focus_bottom = gfx::PointF(230.0f, 600.0f); | |
620 handle.SetFocus(focus_top, focus_bottom); | |
621 EXPECT_FALSE(drawable().mirror_vertical); | |
622 EXPECT_FALSE(drawable().mirror_horizontal); | |
623 | |
624 handle.SetViewportRect(gfx::RectF(0, 0, 560, 600)); | |
625 EXPECT_TRUE(drawable().mirror_vertical); | |
626 EXPECT_FALSE(drawable().mirror_horizontal); | |
627 | |
628 handle.SetViewportRect(gfx::RectF(0, 0, 230, 600)); | |
629 EXPECT_TRUE(drawable().mirror_vertical); | |
630 EXPECT_TRUE(drawable().mirror_horizontal); | |
631 | |
632 handle.SetViewportRect(kDefaultViewportRect); | |
633 EXPECT_FALSE(drawable().mirror_vertical); | |
634 EXPECT_FALSE(drawable().mirror_horizontal); | |
635 } | |
636 | |
507 } // namespace ui | 637 } // namespace ui |
OLD | NEW |