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 "ui/aura/window.h" | 5 #include "ui/aura/window.h" |
6 | 6 |
7 #include <limits.h> | 7 #include <limits.h> |
8 | 8 |
9 #include <string> | 9 #include <string> |
10 #include <utility> | 10 #include <utility> |
(...skipping 20 matching lines...) Expand all Loading... |
31 #include "ui/aura/window_event_dispatcher.h" | 31 #include "ui/aura/window_event_dispatcher.h" |
32 #include "ui/aura/window_observer.h" | 32 #include "ui/aura/window_observer.h" |
33 #include "ui/aura/window_property.h" | 33 #include "ui/aura/window_property.h" |
34 #include "ui/aura/window_tree_host.h" | 34 #include "ui/aura/window_tree_host.h" |
35 #include "ui/base/hit_test.h" | 35 #include "ui/base/hit_test.h" |
36 #include "ui/compositor/layer.h" | 36 #include "ui/compositor/layer.h" |
37 #include "ui/compositor/layer_animation_observer.h" | 37 #include "ui/compositor/layer_animation_observer.h" |
38 #include "ui/compositor/scoped_animation_duration_scale_mode.h" | 38 #include "ui/compositor/scoped_animation_duration_scale_mode.h" |
39 #include "ui/compositor/scoped_layer_animation_settings.h" | 39 #include "ui/compositor/scoped_layer_animation_settings.h" |
40 #include "ui/compositor/test/test_layers.h" | 40 #include "ui/compositor/test/test_layers.h" |
| 41 #include "ui/display/screen.h" |
41 #include "ui/events/event.h" | 42 #include "ui/events/event.h" |
42 #include "ui/events/event_utils.h" | 43 #include "ui/events/event_utils.h" |
43 #include "ui/events/gesture_detection/gesture_configuration.h" | 44 #include "ui/events/gesture_detection/gesture_configuration.h" |
44 #include "ui/events/keycodes/keyboard_codes.h" | 45 #include "ui/events/keycodes/keyboard_codes.h" |
45 #include "ui/events/test/event_generator.h" | 46 #include "ui/events/test/event_generator.h" |
46 #include "ui/gfx/canvas.h" | 47 #include "ui/gfx/canvas.h" |
47 #include "ui/gfx/geometry/vector2d.h" | 48 #include "ui/gfx/geometry/vector2d.h" |
48 #include "ui/gfx/screen.h" | |
49 #include "ui/gfx/skia_util.h" | 49 #include "ui/gfx/skia_util.h" |
50 | 50 |
51 DECLARE_WINDOW_PROPERTY_TYPE(const char*) | 51 DECLARE_WINDOW_PROPERTY_TYPE(const char*) |
52 | 52 |
53 namespace { | 53 namespace { |
54 | 54 |
55 enum class DeletionOrder { | 55 enum class DeletionOrder { |
56 LAYOUT_MANAGER_FIRST, | 56 LAYOUT_MANAGER_FIRST, |
57 PROPERTY_FIRST, | 57 PROPERTY_FIRST, |
58 UNKNOWN, | 58 UNKNOWN, |
(...skipping 341 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
400 std::unique_ptr<Window> w11( | 400 std::unique_ptr<Window> w11( |
401 CreateTestWindow(SK_ColorGREEN, 11, gfx::Rect(5, 5, 100, 100), w1.get())); | 401 CreateTestWindow(SK_ColorGREEN, 11, gfx::Rect(5, 5, 100, 100), w1.get())); |
402 std::unique_ptr<Window> w111( | 402 std::unique_ptr<Window> w111( |
403 CreateTestWindow(SK_ColorCYAN, 111, gfx::Rect(5, 5, 75, 75), w11.get())); | 403 CreateTestWindow(SK_ColorCYAN, 111, gfx::Rect(5, 5, 75, 75), w11.get())); |
404 std::unique_ptr<Window> w1111( | 404 std::unique_ptr<Window> w1111( |
405 CreateTestWindow(SK_ColorRED, 1111, gfx::Rect(5, 5, 50, 50), w111.get())); | 405 CreateTestWindow(SK_ColorRED, 1111, gfx::Rect(5, 5, 50, 50), w111.get())); |
406 | 406 |
407 Window* root = root_window(); | 407 Window* root = root_window(); |
408 root->MoveCursorTo(gfx::Point(10, 10)); | 408 root->MoveCursorTo(gfx::Point(10, 10)); |
409 EXPECT_EQ("10,10", | 409 EXPECT_EQ("10,10", |
410 gfx::Screen::GetScreen()->GetCursorScreenPoint().ToString()); | 410 display::Screen::GetScreen()->GetCursorScreenPoint().ToString()); |
411 w1->MoveCursorTo(gfx::Point(10, 10)); | 411 w1->MoveCursorTo(gfx::Point(10, 10)); |
412 EXPECT_EQ("20,20", | 412 EXPECT_EQ("20,20", |
413 gfx::Screen::GetScreen()->GetCursorScreenPoint().ToString()); | 413 display::Screen::GetScreen()->GetCursorScreenPoint().ToString()); |
414 w11->MoveCursorTo(gfx::Point(10, 10)); | 414 w11->MoveCursorTo(gfx::Point(10, 10)); |
415 EXPECT_EQ("25,25", | 415 EXPECT_EQ("25,25", |
416 gfx::Screen::GetScreen()->GetCursorScreenPoint().ToString()); | 416 display::Screen::GetScreen()->GetCursorScreenPoint().ToString()); |
417 w111->MoveCursorTo(gfx::Point(10, 10)); | 417 w111->MoveCursorTo(gfx::Point(10, 10)); |
418 EXPECT_EQ("30,30", | 418 EXPECT_EQ("30,30", |
419 gfx::Screen::GetScreen()->GetCursorScreenPoint().ToString()); | 419 display::Screen::GetScreen()->GetCursorScreenPoint().ToString()); |
420 w1111->MoveCursorTo(gfx::Point(10, 10)); | 420 w1111->MoveCursorTo(gfx::Point(10, 10)); |
421 EXPECT_EQ("35,35", | 421 EXPECT_EQ("35,35", |
422 gfx::Screen::GetScreen()->GetCursorScreenPoint().ToString()); | 422 display::Screen::GetScreen()->GetCursorScreenPoint().ToString()); |
423 } | 423 } |
424 | 424 |
425 TEST_F(WindowTest, ContainsMouse) { | 425 TEST_F(WindowTest, ContainsMouse) { |
426 std::unique_ptr<Window> w(CreateTestWindow( | 426 std::unique_ptr<Window> w(CreateTestWindow( |
427 SK_ColorWHITE, 1, gfx::Rect(10, 10, 500, 500), root_window())); | 427 SK_ColorWHITE, 1, gfx::Rect(10, 10, 500, 500), root_window())); |
428 w->Show(); | 428 w->Show(); |
429 WindowTestApi w_test_api(w.get()); | 429 WindowTestApi w_test_api(w.get()); |
430 Window* root = root_window(); | 430 Window* root = root_window(); |
431 root->MoveCursorTo(gfx::Point(10, 10)); | 431 root->MoveCursorTo(gfx::Point(10, 10)); |
432 EXPECT_TRUE(w_test_api.ContainsMouse()); | 432 EXPECT_TRUE(w_test_api.ContainsMouse()); |
433 root->MoveCursorTo(gfx::Point(9, 10)); | 433 root->MoveCursorTo(gfx::Point(9, 10)); |
434 EXPECT_FALSE(w_test_api.ContainsMouse()); | 434 EXPECT_FALSE(w_test_api.ContainsMouse()); |
435 } | 435 } |
436 | 436 |
437 // Test Window::ConvertPointToWindow() with transform to root_window. | 437 // Test Window::ConvertPointToWindow() with transform to root_window. |
438 TEST_F(WindowTest, MoveCursorToWithTransformRootWindow) { | 438 TEST_F(WindowTest, MoveCursorToWithTransformRootWindow) { |
439 gfx::Transform transform; | 439 gfx::Transform transform; |
440 transform.Translate(100.0, 100.0); | 440 transform.Translate(100.0, 100.0); |
441 transform.Rotate(90.0); | 441 transform.Rotate(90.0); |
442 transform.Scale(2.0, 5.0); | 442 transform.Scale(2.0, 5.0); |
443 host()->SetRootTransform(transform); | 443 host()->SetRootTransform(transform); |
444 host()->MoveCursorTo(gfx::Point(10, 10)); | 444 host()->MoveCursorTo(gfx::Point(10, 10)); |
445 #if !defined(OS_WIN) | 445 #if !defined(OS_WIN) |
446 // TODO(yoshiki): fix this to build on Windows. See crbug.com/133413.OD | 446 // TODO(yoshiki): fix this to build on Windows. See crbug.com/133413.OD |
447 EXPECT_EQ("50,120", QueryLatestMousePositionRequestInHost(host()).ToString()); | 447 EXPECT_EQ("50,120", QueryLatestMousePositionRequestInHost(host()).ToString()); |
448 #endif | 448 #endif |
449 EXPECT_EQ("10,10", | 449 EXPECT_EQ("10,10", |
450 gfx::Screen::GetScreen()->GetCursorScreenPoint().ToString()); | 450 display::Screen::GetScreen()->GetCursorScreenPoint().ToString()); |
451 } | 451 } |
452 | 452 |
453 // Tests Window::ConvertPointToWindow() with transform to non-root windows. | 453 // Tests Window::ConvertPointToWindow() with transform to non-root windows. |
454 TEST_F(WindowTest, MoveCursorToWithTransformWindow) { | 454 TEST_F(WindowTest, MoveCursorToWithTransformWindow) { |
455 std::unique_ptr<Window> w1(CreateTestWindow( | 455 std::unique_ptr<Window> w1(CreateTestWindow( |
456 SK_ColorWHITE, 1, gfx::Rect(10, 10, 500, 500), root_window())); | 456 SK_ColorWHITE, 1, gfx::Rect(10, 10, 500, 500), root_window())); |
457 | 457 |
458 gfx::Transform transform1; | 458 gfx::Transform transform1; |
459 transform1.Scale(2, 2); | 459 transform1.Scale(2, 2); |
460 w1->SetTransform(transform1); | 460 w1->SetTransform(transform1); |
461 w1->MoveCursorTo(gfx::Point(10, 10)); | 461 w1->MoveCursorTo(gfx::Point(10, 10)); |
462 EXPECT_EQ("30,30", | 462 EXPECT_EQ("30,30", |
463 gfx::Screen::GetScreen()->GetCursorScreenPoint().ToString()); | 463 display::Screen::GetScreen()->GetCursorScreenPoint().ToString()); |
464 | 464 |
465 gfx::Transform transform2; | 465 gfx::Transform transform2; |
466 transform2.Translate(-10, 20); | 466 transform2.Translate(-10, 20); |
467 w1->SetTransform(transform2); | 467 w1->SetTransform(transform2); |
468 w1->MoveCursorTo(gfx::Point(10, 10)); | 468 w1->MoveCursorTo(gfx::Point(10, 10)); |
469 EXPECT_EQ("10,40", | 469 EXPECT_EQ("10,40", |
470 gfx::Screen::GetScreen()->GetCursorScreenPoint().ToString()); | 470 display::Screen::GetScreen()->GetCursorScreenPoint().ToString()); |
471 | 471 |
472 gfx::Transform transform3; | 472 gfx::Transform transform3; |
473 transform3.Rotate(90.0); | 473 transform3.Rotate(90.0); |
474 w1->SetTransform(transform3); | 474 w1->SetTransform(transform3); |
475 w1->MoveCursorTo(gfx::Point(5, 5)); | 475 w1->MoveCursorTo(gfx::Point(5, 5)); |
476 EXPECT_EQ("5,15", | 476 EXPECT_EQ("5,15", |
477 gfx::Screen::GetScreen()->GetCursorScreenPoint().ToString()); | 477 display::Screen::GetScreen()->GetCursorScreenPoint().ToString()); |
478 | 478 |
479 gfx::Transform transform4; | 479 gfx::Transform transform4; |
480 transform4.Translate(100.0, 100.0); | 480 transform4.Translate(100.0, 100.0); |
481 transform4.Rotate(90.0); | 481 transform4.Rotate(90.0); |
482 transform4.Scale(2.0, 5.0); | 482 transform4.Scale(2.0, 5.0); |
483 w1->SetTransform(transform4); | 483 w1->SetTransform(transform4); |
484 w1->MoveCursorTo(gfx::Point(10, 10)); | 484 w1->MoveCursorTo(gfx::Point(10, 10)); |
485 EXPECT_EQ("60,130", | 485 EXPECT_EQ("60,130", |
486 gfx::Screen::GetScreen()->GetCursorScreenPoint().ToString()); | 486 display::Screen::GetScreen()->GetCursorScreenPoint().ToString()); |
487 } | 487 } |
488 | 488 |
489 // Test Window::ConvertPointToWindow() with complex transforms to both root and | 489 // Test Window::ConvertPointToWindow() with complex transforms to both root and |
490 // non-root windows. | 490 // non-root windows. |
491 // Test Window::ConvertPointToWindow() with transform to root_window. | 491 // Test Window::ConvertPointToWindow() with transform to root_window. |
492 TEST_F(WindowTest, MoveCursorToWithComplexTransform) { | 492 TEST_F(WindowTest, MoveCursorToWithComplexTransform) { |
493 std::unique_ptr<Window> w1(CreateTestWindow( | 493 std::unique_ptr<Window> w1(CreateTestWindow( |
494 SK_ColorWHITE, 1, gfx::Rect(10, 10, 500, 500), root_window())); | 494 SK_ColorWHITE, 1, gfx::Rect(10, 10, 500, 500), root_window())); |
495 std::unique_ptr<Window> w11( | 495 std::unique_ptr<Window> w11( |
496 CreateTestWindow(SK_ColorGREEN, 11, gfx::Rect(5, 5, 100, 100), w1.get())); | 496 CreateTestWindow(SK_ColorGREEN, 11, gfx::Rect(5, 5, 100, 100), w1.get())); |
(...skipping 19 matching lines...) Expand all Loading... |
516 w111->SetTransform(transform); | 516 w111->SetTransform(transform); |
517 w1111->SetTransform(transform); | 517 w1111->SetTransform(transform); |
518 | 518 |
519 w1111->MoveCursorTo(gfx::Point(10, 10)); | 519 w1111->MoveCursorTo(gfx::Point(10, 10)); |
520 | 520 |
521 #if !defined(OS_WIN) | 521 #if !defined(OS_WIN) |
522 // TODO(yoshiki): fix this to build on Windows. See crbug.com/133413. | 522 // TODO(yoshiki): fix this to build on Windows. See crbug.com/133413. |
523 EXPECT_EQ("169,80", QueryLatestMousePositionRequestInHost(host()).ToString()); | 523 EXPECT_EQ("169,80", QueryLatestMousePositionRequestInHost(host()).ToString()); |
524 #endif | 524 #endif |
525 EXPECT_EQ("20,53", | 525 EXPECT_EQ("20,53", |
526 gfx::Screen::GetScreen()->GetCursorScreenPoint().ToString()); | 526 display::Screen::GetScreen()->GetCursorScreenPoint().ToString()); |
527 } | 527 } |
528 | 528 |
529 // Tests that we do not crash when a Window is destroyed by going out of | 529 // Tests that we do not crash when a Window is destroyed by going out of |
530 // scope (as opposed to being explicitly deleted by its WindowDelegate). | 530 // scope (as opposed to being explicitly deleted by its WindowDelegate). |
531 TEST_F(WindowTest, NoCrashOnWindowDelete) { | 531 TEST_F(WindowTest, NoCrashOnWindowDelete) { |
532 CaptureWindowDelegateImpl delegate; | 532 CaptureWindowDelegateImpl delegate; |
533 std::unique_ptr<Window> window(CreateTestWindowWithDelegate( | 533 std::unique_ptr<Window> window(CreateTestWindowWithDelegate( |
534 &delegate, 0, gfx::Rect(0, 0, 20, 20), root_window())); | 534 &delegate, 0, gfx::Rect(0, 0, 20, 20), root_window())); |
535 } | 535 } |
536 | 536 |
(...skipping 1067 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1604 EXPECT_EQ(w12.get(), w1->GetEventHandlerForPoint(gfx::Point(160, 160))); | 1604 EXPECT_EQ(w12.get(), w1->GetEventHandlerForPoint(gfx::Point(160, 160))); |
1605 w12->set_ignore_events(true); | 1605 w12->set_ignore_events(true); |
1606 EXPECT_EQ(w111.get(), w1->GetEventHandlerForPoint(gfx::Point(160, 160))); | 1606 EXPECT_EQ(w111.get(), w1->GetEventHandlerForPoint(gfx::Point(160, 160))); |
1607 w111->set_ignore_events(true); | 1607 w111->set_ignore_events(true); |
1608 EXPECT_EQ(w11.get(), w1->GetEventHandlerForPoint(gfx::Point(160, 160))); | 1608 EXPECT_EQ(w11.get(), w1->GetEventHandlerForPoint(gfx::Point(160, 160))); |
1609 } | 1609 } |
1610 | 1610 |
1611 // Tests transformation on the root window. | 1611 // Tests transformation on the root window. |
1612 TEST_F(WindowTest, Transform) { | 1612 TEST_F(WindowTest, Transform) { |
1613 gfx::Size size = host()->GetBounds().size(); | 1613 gfx::Size size = host()->GetBounds().size(); |
1614 EXPECT_EQ(gfx::Rect(size), | 1614 EXPECT_EQ(gfx::Rect(size), display::Screen::GetScreen() |
1615 gfx::Screen::GetScreen()->GetDisplayNearestPoint( | 1615 ->GetDisplayNearestPoint(gfx::Point()) |
1616 gfx::Point()).bounds()); | 1616 .bounds()); |
1617 | 1617 |
1618 // Rotate it clock-wise 90 degrees. | 1618 // Rotate it clock-wise 90 degrees. |
1619 gfx::Transform transform; | 1619 gfx::Transform transform; |
1620 transform.Translate(size.height(), 0); | 1620 transform.Translate(size.height(), 0); |
1621 transform.Rotate(90.0); | 1621 transform.Rotate(90.0); |
1622 host()->SetRootTransform(transform); | 1622 host()->SetRootTransform(transform); |
1623 | 1623 |
1624 // The size should be the transformed size. | 1624 // The size should be the transformed size. |
1625 gfx::Size transformed_size(size.height(), size.width()); | 1625 gfx::Size transformed_size(size.height(), size.width()); |
1626 EXPECT_EQ(transformed_size.ToString(), | 1626 EXPECT_EQ(transformed_size.ToString(), |
1627 root_window()->bounds().size().ToString()); | 1627 root_window()->bounds().size().ToString()); |
1628 EXPECT_EQ( | 1628 EXPECT_EQ(gfx::Rect(transformed_size).ToString(), |
1629 gfx::Rect(transformed_size).ToString(), | 1629 display::Screen::GetScreen() |
1630 gfx::Screen::GetScreen()->GetDisplayNearestPoint( | 1630 ->GetDisplayNearestPoint(gfx::Point()) |
1631 gfx::Point()).bounds().ToString()); | 1631 .bounds() |
| 1632 .ToString()); |
1632 | 1633 |
1633 // Host size shouldn't change. | 1634 // Host size shouldn't change. |
1634 EXPECT_EQ(size.ToString(), host()->GetBounds().size().ToString()); | 1635 EXPECT_EQ(size.ToString(), host()->GetBounds().size().ToString()); |
1635 } | 1636 } |
1636 | 1637 |
1637 TEST_F(WindowTest, TransformGesture) { | 1638 TEST_F(WindowTest, TransformGesture) { |
1638 gfx::Size size = host()->GetBounds().size(); | 1639 gfx::Size size = host()->GetBounds().size(); |
1639 | 1640 |
1640 std::unique_ptr<GestureTrackPositionDelegate> delegate( | 1641 std::unique_ptr<GestureTrackPositionDelegate> delegate( |
1641 new GestureTrackPositionDelegate); | 1642 new GestureTrackPositionDelegate); |
(...skipping 1338 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2980 | 2981 |
2981 EXPECT_TRUE(animator.get()); | 2982 EXPECT_TRUE(animator.get()); |
2982 EXPECT_FALSE(animator->is_animating()); | 2983 EXPECT_FALSE(animator->is_animating()); |
2983 EXPECT_TRUE(observer.animation_completed()); | 2984 EXPECT_TRUE(observer.animation_completed()); |
2984 EXPECT_FALSE(observer.animation_aborted()); | 2985 EXPECT_FALSE(observer.animation_aborted()); |
2985 animator->RemoveObserver(&observer); | 2986 animator->RemoveObserver(&observer); |
2986 } | 2987 } |
2987 | 2988 |
2988 } // namespace test | 2989 } // namespace test |
2989 } // namespace aura | 2990 } // namespace aura |
OLD | NEW |