OLD | NEW |
---|---|
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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/string_util.h" | 8 #include "base/string_util.h" |
9 #include "base/utf_string_conversions.h" | 9 #include "base/utf_string_conversions.h" |
10 #include "testing/gmock/include/gmock/gmock.h" | 10 #include "testing/gmock/include/gmock/gmock.h" |
(...skipping 615 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
626 | 626 |
627 DISALLOW_COPY_AND_ASSIGN(HitTestView); | 627 DISALLOW_COPY_AND_ASSIGN(HitTestView); |
628 }; | 628 }; |
629 | 629 |
630 gfx::Point ConvertPointToView(View* view, const gfx::Point& p) { | 630 gfx::Point ConvertPointToView(View* view, const gfx::Point& p) { |
631 gfx::Point tmp(p); | 631 gfx::Point tmp(p); |
632 View::ConvertPointToView(view->GetWidget()->GetRootView(), view, &tmp); | 632 View::ConvertPointToView(view->GetWidget()->GetRootView(), view, &tmp); |
633 return tmp; | 633 return tmp; |
634 } | 634 } |
635 | 635 |
636 void RotateCounterclockwise(ui::Transform& transform) { | |
637 transform.matrix().set3x3(0, -1, 0, | |
638 1, 0, 0, | |
639 0, 0, 1); | |
640 } | |
641 | |
642 void RotateClockwise(ui::Transform& transform) { | |
643 transform.matrix().set3x3( 0, 1, 0, | |
644 -1, 0, 0, | |
645 0, 0, 1); | |
646 } | |
647 | |
636 } // namespace | 648 } // namespace |
637 | 649 |
638 TEST_F(ViewTest, HitTestMasks) { | 650 TEST_F(ViewTest, HitTestMasks) { |
639 Widget* widget = new Widget; | 651 Widget* widget = new Widget; |
640 widget->Init(Widget::InitParams(Widget::InitParams::TYPE_POPUP)); | 652 widget->Init(Widget::InitParams(Widget::InitParams::TYPE_POPUP)); |
641 View* root_view = widget->GetRootView(); | 653 View* root_view = widget->GetRootView(); |
642 root_view->SetBounds(0, 0, 500, 500); | 654 root_view->SetBounds(0, 0, 500, 500); |
643 | 655 |
644 gfx::Rect v1_bounds = gfx::Rect(0, 0, 100, 100); | 656 gfx::Rect v1_bounds = gfx::Rect(0, 0, 100, 100); |
645 HitTestView* v1 = new HitTestView(false); | 657 HitTestView* v1 = new HitTestView(false); |
(...skipping 888 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1534 v1->AddChildView(v2); | 1546 v1->AddChildView(v2); |
1535 | 1547 |
1536 // At this moment, |v2| occupies (100, 100) to (300, 200) in |root|. | 1548 // At this moment, |v2| occupies (100, 100) to (300, 200) in |root|. |
1537 v1->ClearScheduledPaintRect(); | 1549 v1->ClearScheduledPaintRect(); |
1538 v2->SchedulePaint(); | 1550 v2->SchedulePaint(); |
1539 | 1551 |
1540 EXPECT_EQ(gfx::Rect(100, 100, 200, 100), v1->scheduled_paint_rect()); | 1552 EXPECT_EQ(gfx::Rect(100, 100, 200, 100), v1->scheduled_paint_rect()); |
1541 | 1553 |
1542 // Rotate |v1| counter-clockwise. | 1554 // Rotate |v1| counter-clockwise. |
1543 ui::Transform transform; | 1555 ui::Transform transform; |
1544 transform.SetRotate(-90.0f); | 1556 RotateCounterclockwise(transform); |
1545 transform.SetTranslateY(500.0f); | 1557 transform.SetTranslateY(500.0f); |
1546 v1->SetTransform(transform); | 1558 v1->SetTransform(transform); |
1547 | 1559 |
1548 // |v2| now occupies (100, 200) to (200, 400) in |root|. | 1560 // |v2| now occupies (100, 200) to (200, 400) in |root|. |
1549 | 1561 |
1550 v1->ClearScheduledPaintRect(); | 1562 v1->ClearScheduledPaintRect(); |
1551 v2->SchedulePaint(); | 1563 v2->SchedulePaint(); |
1552 | 1564 |
1553 EXPECT_EQ(gfx::Rect(100, 200, 100, 200), v1->scheduled_paint_rect()); | 1565 EXPECT_EQ(gfx::Rect(100, 200, 100, 200), v1->scheduled_paint_rect()); |
1554 | 1566 |
(...skipping 13 matching lines...) Expand all Loading... | |
1568 widget->Init(params); | 1580 widget->Init(params); |
1569 View* root = widget->GetRootView(); | 1581 View* root = widget->GetRootView(); |
1570 | 1582 |
1571 root->AddChildView(v1); | 1583 root->AddChildView(v1); |
1572 v1->AddChildView(v2); | 1584 v1->AddChildView(v2); |
1573 | 1585 |
1574 // At this moment, |v2| occupies (100, 100) to (300, 200) in |root|. | 1586 // At this moment, |v2| occupies (100, 100) to (300, 200) in |root|. |
1575 | 1587 |
1576 // Rotate |v1| counter-clockwise. | 1588 // Rotate |v1| counter-clockwise. |
1577 ui::Transform transform(v1->GetTransform()); | 1589 ui::Transform transform(v1->GetTransform()); |
1578 transform.SetRotate(-90.0f); | 1590 RotateCounterclockwise(transform); |
1579 transform.SetTranslateY(500.0f); | 1591 transform.SetTranslateY(500.0f); |
1580 v1->SetTransform(transform); | 1592 v1->SetTransform(transform); |
1581 | 1593 |
1582 // |v2| now occupies (100, 200) to (200, 400) in |root|. | 1594 // |v2| now occupies (100, 200) to (200, 400) in |root|. |
1583 v1->Reset(); | 1595 v1->Reset(); |
1584 v2->Reset(); | 1596 v2->Reset(); |
1585 | 1597 |
1586 MouseEvent pressed(ui::ET_MOUSE_PRESSED, | 1598 MouseEvent pressed(ui::ET_MOUSE_PRESSED, |
1587 110, 210, | 1599 110, 210, |
1588 ui::EF_LEFT_BUTTON_DOWN); | 1600 ui::EF_LEFT_BUTTON_DOWN); |
1589 root->OnMousePressed(pressed); | 1601 root->OnMousePressed(pressed); |
1590 EXPECT_EQ(0, v1->last_mouse_event_type_); | 1602 EXPECT_EQ(0, v1->last_mouse_event_type_); |
1591 EXPECT_EQ(ui::ET_MOUSE_PRESSED, v2->last_mouse_event_type_); | 1603 EXPECT_EQ(ui::ET_MOUSE_PRESSED, v2->last_mouse_event_type_); |
1592 EXPECT_EQ(190, v2->location_.x()); | 1604 EXPECT_EQ(190, v2->location_.x()); |
1593 EXPECT_EQ(10, v2->location_.y()); | 1605 EXPECT_EQ(10, v2->location_.y()); |
1594 | 1606 |
1595 MouseEvent released(ui::ET_MOUSE_RELEASED, 0, 0, 0); | 1607 MouseEvent released(ui::ET_MOUSE_RELEASED, 0, 0, 0); |
1596 root->OnMouseReleased(released); | 1608 root->OnMouseReleased(released); |
1597 | 1609 |
1598 // Now rotate |v2| inside |v1| clockwise. | 1610 // Now rotate |v2| inside |v1| clockwise. |
1599 transform = v2->GetTransform(); | 1611 transform = v2->GetTransform(); |
1600 transform.SetRotate(90.0f); | 1612 RotateClockwise(transform); |
1601 transform.SetTranslateX(100.0f); | 1613 transform.SetTranslateX(100.0f); |
1602 v2->SetTransform(transform); | 1614 v2->SetTransform(transform); |
1603 | 1615 |
1604 // Now, |v2| occupies (100, 100) to (200, 300) in |v1|, and (100, 300) to | 1616 // Now, |v2| occupies (100, 100) to (200, 300) in |v1|, and (100, 300) to |
1605 // (300, 400) in |root|. | 1617 // (300, 400) in |root|. |
1606 | 1618 |
1607 v1->Reset(); | 1619 v1->Reset(); |
1608 v2->Reset(); | 1620 v2->Reset(); |
1609 | 1621 |
1610 MouseEvent p2(ui::ET_MOUSE_PRESSED, | 1622 MouseEvent p2(ui::ET_MOUSE_PRESSED, |
1611 110, 320, | 1623 110, 320, |
1612 ui::EF_LEFT_BUTTON_DOWN); | 1624 ui::EF_LEFT_BUTTON_DOWN); |
1613 root->OnMousePressed(p2); | 1625 root->OnMousePressed(p2); |
1614 EXPECT_EQ(0, v1->last_mouse_event_type_); | 1626 EXPECT_EQ(0, v1->last_mouse_event_type_); |
1615 EXPECT_EQ(ui::ET_MOUSE_PRESSED, v2->last_mouse_event_type_); | 1627 EXPECT_EQ(ui::ET_MOUSE_PRESSED, v2->last_mouse_event_type_); |
1616 EXPECT_EQ(10, v2->location_.x()); | 1628 EXPECT_EQ(10, v2->location_.x()); |
1617 EXPECT_EQ(20, v2->location_.y()); | 1629 EXPECT_EQ(20, v2->location_.y()); |
1618 | 1630 |
1619 root->OnMouseReleased(released); | 1631 root->OnMouseReleased(released); |
1620 | 1632 |
1621 v1->SetTransform(ui::Transform()); | 1633 v1->SetTransform(ui::Transform()); |
1622 v2->SetTransform(ui::Transform()); | 1634 v2->SetTransform(ui::Transform()); |
1623 | 1635 |
1624 TestView* v3 = new TestView(); | 1636 TestView* v3 = new TestView(); |
1625 v3->SetBounds(10, 10, 20, 30); | 1637 v3->SetBounds(10, 10, 20, 30); |
1626 v2->AddChildView(v3); | 1638 v2->AddChildView(v3); |
1627 | 1639 |
1628 // Rotate |v3| clockwise with respect to |v2|. | 1640 // Rotate |v3| clockwise with respect to |v2|. |
1629 transform = v1->GetTransform(); | 1641 transform = v1->GetTransform(); |
1630 transform.SetRotate(90.0f); | 1642 RotateClockwise(transform); |
1631 transform.SetTranslateX(30.0f); | 1643 transform.SetTranslateX(30.0f); |
1632 v3->SetTransform(transform); | 1644 v3->SetTransform(transform); |
1633 | 1645 |
1634 // Scale |v2| with respect to |v1| along both axis. | 1646 // Scale |v2| with respect to |v1| along both axis. |
1635 transform = v2->GetTransform(); | 1647 transform = v2->GetTransform(); |
1636 transform.SetScale(0.8f, 0.5f); | 1648 transform.SetScale(0.8f, 0.5f); |
1637 v2->SetTransform(transform); | 1649 v2->SetTransform(transform); |
1638 | 1650 |
1639 // |v3| occupies (108, 105) to (132, 115) in |root|. | 1651 // |v3| occupies (108, 105) to (132, 115) in |root|. |
1640 | 1652 |
(...skipping 15 matching lines...) Expand all Loading... | |
1656 v1->SetTransform(ui::Transform()); | 1668 v1->SetTransform(ui::Transform()); |
1657 v2->SetTransform(ui::Transform()); | 1669 v2->SetTransform(ui::Transform()); |
1658 v3->SetTransform(ui::Transform()); | 1670 v3->SetTransform(ui::Transform()); |
1659 | 1671 |
1660 v1->Reset(); | 1672 v1->Reset(); |
1661 v2->Reset(); | 1673 v2->Reset(); |
1662 v3->Reset(); | 1674 v3->Reset(); |
1663 | 1675 |
1664 // Rotate |v3| clockwise with respect to |v2|, and scale it along both axis. | 1676 // Rotate |v3| clockwise with respect to |v2|, and scale it along both axis. |
1665 transform = v3->GetTransform(); | 1677 transform = v3->GetTransform(); |
1666 transform.SetRotate(90.0f); | 1678 RotateClockwise(transform); |
1667 transform.SetTranslateX(30.0f); | 1679 transform.SetTranslateX(30.0f); |
1668 // Rotation sets some scaling transformation. Using SetScale would overwrite | 1680 // Rotation sets some scaling transformation. Using SetScale would overwrite |
1669 // that and pollute the rotation. So combine the scaling with the existing | 1681 // that and pollute the rotation. So combine the scaling with the existing |
1670 // transforamtion. | 1682 // transforamtion. |
1671 transform.ConcatScale(0.8f, 0.5f); | 1683 transform.ConcatScale(0.8f, 0.5f); |
1672 v3->SetTransform(transform); | 1684 v3->SetTransform(transform); |
1673 | 1685 |
1674 // Translate |v2| with respect to |v1|. | 1686 // Translate |v2| with respect to |v1|. |
1675 transform = v2->GetTransform(); | 1687 transform = v2->GetTransform(); |
1676 transform.SetTranslate(10, 10); | 1688 transform.SetTranslate(10, 10); |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1709 viewport->SetBoundsRect(viewport_bounds); | 1721 viewport->SetBoundsRect(viewport_bounds); |
1710 contents->SetBounds(0, 0, 100, 200); | 1722 contents->SetBounds(0, 0, 100, 200); |
1711 | 1723 |
1712 View* child = new View; | 1724 View* child = new View; |
1713 contents->AddChildView(child); | 1725 contents->AddChildView(child); |
1714 child->SetBounds(10, 90, 50, 50); | 1726 child->SetBounds(10, 90, 50, 50); |
1715 EXPECT_EQ(gfx::Rect(0, 0, 50, 10), child->GetVisibleBounds()); | 1727 EXPECT_EQ(gfx::Rect(0, 0, 50, 10), child->GetVisibleBounds()); |
1716 | 1728 |
1717 // Rotate |child| counter-clockwise | 1729 // Rotate |child| counter-clockwise |
1718 ui::Transform transform; | 1730 ui::Transform transform; |
1719 transform.SetRotate(-90.0f); | 1731 RotateCounterclockwise(transform); |
1720 transform.SetTranslateY(50.0f); | 1732 transform.SetTranslateY(50.0f); |
1721 child->SetTransform(transform); | 1733 child->SetTransform(transform); |
1722 EXPECT_EQ(gfx::Rect(40, 0, 10, 50), child->GetVisibleBounds()); | 1734 EXPECT_EQ(gfx::Rect(40, 0, 10, 50), child->GetVisibleBounds()); |
1723 | 1735 |
1724 widget->CloseNow(); | 1736 widget->CloseNow(); |
1725 } | 1737 } |
1726 | 1738 |
1727 //////////////////////////////////////////////////////////////////////////////// | 1739 //////////////////////////////////////////////////////////////////////////////// |
1728 // OnVisibleBoundsChanged() | 1740 // OnVisibleBoundsChanged() |
1729 | 1741 |
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1840 transform.SetScale(5.0f, 7.0f); | 1852 transform.SetScale(5.0f, 7.0f); |
1841 child_child->SetTransform(transform); | 1853 child_child->SetTransform(transform); |
1842 | 1854 |
1843 // Sanity check to make sure basic transforms act as expected. | 1855 // Sanity check to make sure basic transforms act as expected. |
1844 { | 1856 { |
1845 ui::Transform transform; | 1857 ui::Transform transform; |
1846 transform.ConcatTranslate(1, 1); | 1858 transform.ConcatTranslate(1, 1); |
1847 transform.ConcatScale(100, 55); | 1859 transform.ConcatScale(100, 55); |
1848 transform.ConcatTranslate(110, -110); | 1860 transform.ConcatTranslate(110, -110); |
1849 | 1861 |
1850 EXPECT_EQ(210, transform.matrix().getTranslateX()); | 1862 // convert to a 3x3 matrix. |
1851 EXPECT_EQ(-55, transform.matrix().getTranslateY()); | 1863 SkMatrix matrix = transform.matrix(); |
sky
2011/06/24 20:58:19
const SkMatrix& here and other places.
| |
1852 EXPECT_EQ(100, transform.matrix().getScaleX()); | 1864 |
1853 EXPECT_EQ(55, transform.matrix().getScaleY()); | 1865 EXPECT_EQ(210, matrix.getTranslateX()); |
1854 EXPECT_EQ(0, transform.matrix().getSkewX()); | 1866 EXPECT_EQ(-55, matrix.getTranslateY()); |
1855 EXPECT_EQ(0, transform.matrix().getSkewY()); | 1867 EXPECT_EQ(100, matrix.getScaleX()); |
1868 EXPECT_EQ(55, matrix.getScaleY()); | |
1869 EXPECT_EQ(0, matrix.getSkewX()); | |
1870 EXPECT_EQ(0, matrix.getSkewY()); | |
1856 } | 1871 } |
1857 | 1872 |
1858 { | 1873 { |
1859 ui::Transform transform; | 1874 ui::Transform transform; |
1860 transform.SetTranslate(1, 1); | 1875 transform.SetTranslate(1, 1); |
1861 ui::Transform t2; | 1876 ui::Transform t2; |
1862 t2.SetScale(100, 55); | 1877 t2.SetScale(100, 55); |
1863 ui::Transform t3; | 1878 ui::Transform t3; |
1864 t3.SetTranslate(110, -110); | 1879 t3.SetTranslate(110, -110); |
1865 transform.ConcatTransform(t2); | 1880 transform.ConcatTransform(t2); |
1866 transform.ConcatTransform(t3); | 1881 transform.ConcatTransform(t3); |
1867 | 1882 |
1868 EXPECT_EQ(210, transform.matrix().getTranslateX()); | 1883 // convert to a 3x3 matrix |
1869 EXPECT_EQ(-55, transform.matrix().getTranslateY()); | 1884 SkMatrix matrix = transform.matrix(); |
1870 EXPECT_EQ(100, transform.matrix().getScaleX()); | 1885 |
1871 EXPECT_EQ(55, transform.matrix().getScaleY()); | 1886 EXPECT_EQ(210, matrix.getTranslateX()); |
1872 EXPECT_EQ(0, transform.matrix().getSkewX()); | 1887 EXPECT_EQ(-55, matrix.getTranslateY()); |
1873 EXPECT_EQ(0, transform.matrix().getSkewY()); | 1888 EXPECT_EQ(100, matrix.getScaleX()); |
1889 EXPECT_EQ(55, matrix.getScaleY()); | |
1890 EXPECT_EQ(0, matrix.getSkewX()); | |
1891 EXPECT_EQ(0, matrix.getSkewY()); | |
1874 } | 1892 } |
1875 | 1893 |
1876 // Conversions from child->top and top->child. | 1894 // Conversions from child->top and top->child. |
1877 { | 1895 { |
1878 gfx::Point point(5, 5); | 1896 gfx::Point point(5, 5); |
1879 View::ConvertPointToView(child, &top_view, &point); | 1897 View::ConvertPointToView(child, &top_view, &point); |
1880 EXPECT_EQ(22, point.x()); | 1898 EXPECT_EQ(22, point.x()); |
1881 EXPECT_EQ(39, point.y()); | 1899 EXPECT_EQ(39, point.y()); |
1882 | 1900 |
1883 point.SetPoint(22, 39); | 1901 point.SetPoint(22, 39); |
(...skipping 594 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2478 v1->SetPosition(gfx::Point(25, 36)); | 2496 v1->SetPosition(gfx::Point(25, 36)); |
2479 EXPECT_EQ(gfx::Rect(35, 47, 40, 50), v2->layer()->bounds()); | 2497 EXPECT_EQ(gfx::Rect(35, 47, 40, 50), v2->layer()->bounds()); |
2480 | 2498 |
2481 v2->SetPosition(gfx::Point(11, 12)); | 2499 v2->SetPosition(gfx::Point(11, 12)); |
2482 EXPECT_EQ(gfx::Rect(36, 48, 40, 50), v2->layer()->bounds()); | 2500 EXPECT_EQ(gfx::Rect(36, 48, 40, 50), v2->layer()->bounds()); |
2483 } | 2501 } |
2484 | 2502 |
2485 #endif // VIEWS_COMPOSITOR || TOUCH_UI | 2503 #endif // VIEWS_COMPOSITOR || TOUCH_UI |
2486 | 2504 |
2487 } // namespace views | 2505 } // namespace views |
OLD | NEW |