OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 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 "core/paint/PaintPropertyTreeBuilderTest.h" | 5 #include "core/paint/PaintPropertyTreeBuilderTest.h" |
6 | 6 |
7 #include "core/html/HTMLIFrameElement.h" | 7 #include "core/html/HTMLIFrameElement.h" |
8 #include "core/layout/LayoutTreeAsText.h" | 8 #include "core/layout/LayoutTreeAsText.h" |
9 #include "core/paint/ObjectPaintProperties.h" | 9 #include "core/paint/ObjectPaintProperties.h" |
10 #include "core/paint/PaintPropertyTreePrinter.h" | 10 #include "core/paint/PaintPropertyTreePrinter.h" |
(...skipping 1749 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1760 // Visual rects via the non-paint properties system use enclosingIntRect | 1760 // Visual rects via the non-paint properties system use enclosingIntRect |
1761 // before applying transforms, because they are computed bottom-up and | 1761 // before applying transforms, because they are computed bottom-up and |
1762 // therefore can't apply pixel snapping. Therefore apply a slop of 1px. | 1762 // therefore can't apply pixel snapping. Therefore apply a slop of 1px. |
1763 CHECK_VISUAL_RECT(LayoutRect(LayoutUnit(0.7) + LayoutUnit(0.7), | 1763 CHECK_VISUAL_RECT(LayoutRect(LayoutUnit(0.7) + LayoutUnit(0.7), |
1764 LayoutUnit(0.7) + LayoutUnit(0.7), | 1764 LayoutUnit(0.7) + LayoutUnit(0.7), |
1765 LayoutUnit(40), LayoutUnit(40)), | 1765 LayoutUnit(40), LayoutUnit(40)), |
1766 c, frame_view->GetLayoutView(), 1); | 1766 c, frame_view->GetLayoutView(), 1); |
1767 } | 1767 } |
1768 | 1768 |
1769 TEST_P(PaintPropertyTreeBuilderTest, | 1769 TEST_P(PaintPropertyTreeBuilderTest, |
1770 NonTranslationTransformShouldResetSubpixelPaintOffset) { | |
1771 SetBodyInnerHTML( | |
1772 "<style>" | |
1773 " * { margin: 0; }" | |
1774 " div { position: relative; }" | |
1775 " #a {" | |
1776 " width: 70px;" | |
1777 " height: 70px;" | |
1778 " left: 0.8px;" | |
1779 " top: 0.8px;" | |
1780 " }" | |
1781 " #b {" | |
1782 " width: 40px;" | |
1783 " height: 40px;" | |
1784 " transform: scale(10);" | |
1785 " transform-origin: 0 0;" | |
1786 " }" | |
1787 " #c {" | |
1788 " width: 40px;" | |
1789 " height: 40px;" | |
1790 " left: 0.6px;" | |
1791 " top: 0.6px;" | |
1792 " }" | |
1793 "</style>" | |
1794 "<div id='a'>" | |
1795 " <div id='b'>" | |
1796 " <div id='c'></div>" | |
1797 " </div>" | |
1798 "</div>"); | |
1799 FrameView* frame_view = GetDocument().View(); | |
1800 | |
1801 LayoutUnit a_offset = LayoutUnit(0.8); | |
1802 LayoutUnit c_offset = LayoutUnit(0.6); | |
1803 | |
1804 LayoutObject* b = GetDocument().getElementById("b")->GetLayoutObject(); | |
1805 const ObjectPaintProperties* b_properties = b->PaintProperties(); | |
1806 EXPECT_EQ(TransformationMatrix().Scale(10), | |
1807 b_properties->Transform()->Matrix()); | |
1808 // The paint offset transform should not be snapped. | |
1809 EXPECT_EQ(TransformationMatrix().Translate(a_offset.ToDouble(), | |
1810 a_offset.ToDouble()), | |
1811 b_properties->Transform()->Parent()->Matrix()); | |
1812 EXPECT_EQ(LayoutPoint(), b->PaintOffset()); | |
1813 CHECK_EXACT_VISUAL_RECT( | |
1814 LayoutRect(a_offset, a_offset, LayoutUnit(400), LayoutUnit(400)), b, | |
1815 frame_view->GetLayoutView()); | |
1816 | |
1817 // c's painting should start at c_offset. | |
1818 LayoutObject* c = GetDocument().getElementById("c")->GetLayoutObject(); | |
1819 EXPECT_EQ(LayoutPoint(c_offset, c_offset), c->PaintOffset()); | |
1820 // Visual rects via the non-paint properties system use enclosingIntRect | |
1821 // before applying transforms, because they are computed bottom-up and | |
1822 // therefore can't apply pixel snapping. Therefore apply a slop of | |
1823 // c_offset * 10 + 1px. | |
1824 CHECK_VISUAL_RECT( | |
1825 LayoutRect(c_offset * 10 + a_offset, c_offset * 10 + a_offset, | |
1826 LayoutUnit(400), LayoutUnit(400)), | |
1827 c, frame_view->GetLayoutView(), c_offset * 10 + 1); | |
1828 } | |
1829 | |
1830 TEST_P(PaintPropertyTreeBuilderTest, | |
1831 PaintOffsetWithPixelSnappingThroughMultipleTransforms) { | 1770 PaintOffsetWithPixelSnappingThroughMultipleTransforms) { |
1832 SetBodyInnerHTML( | 1771 SetBodyInnerHTML( |
1833 "<style>" | 1772 "<style>" |
1834 " * { margin: 0; }" | 1773 " * { margin: 0; }" |
1835 " div { position: relative; }" | 1774 " div { position: relative; }" |
1836 " #a {" | 1775 " #a {" |
1837 " width: 70px;" | 1776 " width: 70px;" |
1838 " height: 70px;" | 1777 " height: 70px;" |
1839 " left: 0.7px;" | 1778 " left: 0.7px;" |
1840 " top: 0.7px;" | 1779 " top: 0.7px;" |
(...skipping 1690 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3531 | 3470 |
3532 LayoutObject& svg_root = | 3471 LayoutObject& svg_root = |
3533 *GetDocument().getElementById("svgroot")->GetLayoutObject(); | 3472 *GetDocument().getElementById("svgroot")->GetLayoutObject(); |
3534 const ObjectPaintProperties* svg_root_properties = svg_root.PaintProperties(); | 3473 const ObjectPaintProperties* svg_root_properties = svg_root.PaintProperties(); |
3535 EXPECT_TRUE(svg_root_properties->Effect()); | 3474 EXPECT_TRUE(svg_root_properties->Effect()); |
3536 EXPECT_EQ(EffectPaintPropertyNode::Root(), | 3475 EXPECT_EQ(EffectPaintPropertyNode::Root(), |
3537 svg_root_properties->Effect()->Parent()); | 3476 svg_root_properties->Effect()->Parent()); |
3538 } | 3477 } |
3539 | 3478 |
3540 } // namespace blink | 3479 } // namespace blink |
OLD | NEW |