Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(24)

Side by Side Diff: views/view_unittest.cc

Issue 7044062: Use SkMatrix44 for the underlying implementation of ui::Transform (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: Layer animator updates Created 9 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« ui/gfx/transform_unittest.cc ('K') | « views/view.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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
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
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
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
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
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
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
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
OLDNEW
« ui/gfx/transform_unittest.cc ('K') | « views/view.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698