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

Unified Diff: third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilderTest.cpp

Issue 2847873002: Don't pass subpixel offsets through non-translation transforms (Closed)
Patch Set: - Created 3 years, 8 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 side-by-side diff with in-line comments
Download patch
« no previous file with comments | « third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilder.cpp ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilderTest.cpp
diff --git a/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilderTest.cpp b/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilderTest.cpp
index ee14870edf529da38ce10cd0220fcab32bd7e2e3..55442f3af90513c88aacaa23ed7d32b63f3e5246 100644
--- a/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilderTest.cpp
+++ b/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilderTest.cpp
@@ -1767,6 +1767,67 @@ TEST_P(PaintPropertyTreeBuilderTest,
}
TEST_P(PaintPropertyTreeBuilderTest,
+ NonTranslationTransformShouldResetSubpixelPaintOffset) {
+ SetBodyInnerHTML(
+ "<style>"
+ " * { margin: 0; }"
+ " div { position: relative; }"
+ " #a {"
+ " width: 70px;"
+ " height: 70px;"
+ " left: 0.8px;"
+ " top: 0.8px;"
+ " }"
+ " #b {"
+ " width: 40px;"
+ " height: 40px;"
+ " transform: scale(10);"
+ " transform-origin: 0 0;"
+ " }"
+ " #c {"
+ " width: 40px;"
+ " height: 40px;"
+ " left: 0.6px;"
+ " top: 0.6px;"
+ " }"
+ "</style>"
+ "<div id='a'>"
+ " <div id='b'>"
+ " <div id='c'></div>"
+ " </div>"
+ "</div>");
+ FrameView* frame_view = GetDocument().View();
+
+ LayoutUnit a_offset = LayoutUnit(0.8);
+ LayoutUnit c_offset = LayoutUnit(0.6);
+
+ LayoutObject* b = GetDocument().getElementById("b")->GetLayoutObject();
+ const ObjectPaintProperties* b_properties = b->PaintProperties();
+ EXPECT_EQ(TransformationMatrix().Scale(10),
+ b_properties->Transform()->Matrix());
+ // The paint offset transform should not be snapped.
+ EXPECT_EQ(TransformationMatrix().Translate(a_offset.ToDouble(),
+ a_offset.ToDouble()),
+ b_properties->Transform()->Parent()->Matrix());
+ EXPECT_EQ(LayoutPoint(), b->PaintOffset());
+ CHECK_EXACT_VISUAL_RECT(
+ LayoutRect(a_offset, a_offset, LayoutUnit(400), LayoutUnit(400)), b,
+ frame_view->GetLayoutView());
+
+ // c's painting should start at c_offset.
+ LayoutObject* c = GetDocument().getElementById("c")->GetLayoutObject();
+ EXPECT_EQ(LayoutPoint(c_offset, c_offset), c->PaintOffset());
+ // Visual rects via the non-paint properties system use enclosingIntRect
+ // before applying transforms, because they are computed bottom-up and
+ // therefore can't apply pixel snapping. Therefore apply a slop of
+ // c_offset * 10 + 1px.
+ CHECK_VISUAL_RECT(
+ LayoutRect(c_offset * 10 + a_offset, c_offset * 10 + a_offset,
+ LayoutUnit(400), LayoutUnit(400)),
+ c, frame_view->GetLayoutView(), c_offset * 10 + 1);
+}
+
+TEST_P(PaintPropertyTreeBuilderTest,
PaintOffsetWithPixelSnappingThroughMultipleTransforms) {
SetBodyInnerHTML(
"<style>"
« no previous file with comments | « third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilder.cpp ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698