Chromium Code Reviews| 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 |