| Index: third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilder.cpp
|
| diff --git a/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilder.cpp b/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilder.cpp
|
| index 2823cc71fc0a171897078a01fb939785dc88bc5e..c3078720eaaccfff1c396c766f1b791c8c23baa0 100644
|
| --- a/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilder.cpp
|
| +++ b/third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilder.cpp
|
| @@ -77,11 +77,17 @@ void PaintPropertyTreeBuilder::updatePaintOffsetTranslation(const LayoutObject&
|
| if (context.paintOffset == LayoutPoint())
|
| return;
|
|
|
| + // We pixel align transformed content to reduce aliasing by pixel snapping the paint offset
|
| + // transform. Any residual paint offset continues through to children. See the equivalent spv1
|
| + // code in PaintLayerPainter::paintFragmentByApplyingTransform.
|
| + IntPoint roundedPaintOffset = roundedIntPoint(context.paintOffset);
|
| + LayoutPoint subpixelPaintOffset = LayoutPoint(context.paintOffset - roundedPaintOffset);
|
| +
|
| RefPtr<TransformPaintPropertyNode> paintOffsetTranslation = TransformPaintPropertyNode::create(
|
| - TransformationMatrix().translate(context.paintOffset.x(), context.paintOffset.y()),
|
| + TransformationMatrix().translate(roundedPaintOffset.x(), roundedPaintOffset.y()),
|
| FloatPoint3D(), context.currentTransform);
|
| context.currentTransform = paintOffsetTranslation.get();
|
| - context.paintOffset = LayoutPoint();
|
| + context.paintOffset = subpixelPaintOffset;
|
| object.getMutableForPainting().ensureObjectPaintProperties().setPaintOffsetTranslation(paintOffsetTranslation.release());
|
| }
|
|
|
| @@ -98,10 +104,6 @@ static FloatPoint3D transformOrigin(const LayoutBox& box)
|
| void PaintPropertyTreeBuilder::updateTransform(const LayoutObject& object, PaintPropertyTreeBuilderContext& context)
|
| {
|
| if (object.isSVG() && !object.isSVGRoot()) {
|
| - // SVG does not use paint offset internally and the root should have already accounted for
|
| - // any paint offset in the root's svgLocalToBorderBox transform.
|
| - DCHECK(context.paintOffset == LayoutPoint());
|
| -
|
| // FIXME(pdr): Check for the presence of a transform instead of the value. Checking for an
|
| // identity matrix will cause the property tree structure to change during animations if
|
| // the animation passes through the identity matrix.
|
| @@ -121,7 +123,6 @@ void PaintPropertyTreeBuilder::updateTransform(const LayoutObject& object, Paint
|
| const ComputedStyle& style = object.styleRef();
|
| if (!object.isBox() || !style.hasTransform())
|
| return;
|
| - ASSERT(context.paintOffset == LayoutPoint());
|
|
|
| TransformationMatrix matrix;
|
| style.applyTransform(matrix, toLayoutBox(object).size(), ComputedStyle::ExcludeTransformOrigin,
|
|
|