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

Side by Side Diff: third_party/WebKit/Source/core/paint/PaintPropertyTreeBuilder.cpp

Issue 2862053002: Reland of Don't pass subpixel offsets through non-translation transforms (Closed)
Patch Set: - Created 3 years, 7 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
OLDNEW
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/PaintPropertyTreeBuilder.h" 5 #include "core/paint/PaintPropertyTreeBuilder.h"
6 6
7 #include <memory> 7 #include <memory>
8 #include "core/dom/DOMNodeIds.h" 8 #include "core/dom/DOMNodeIds.h"
9 #include "core/frame/FrameView.h" 9 #include "core/frame/FrameView.h"
10 #include "core/frame/LocalFrame.h" 10 #include "core/frame/LocalFrame.h"
(...skipping 251 matching lines...) Expand 10 before | Expand all | Expand 10 after
262 // regardless of whether a transform is present. If there is a transform 262 // regardless of whether a transform is present. If there is a transform
263 // we round the paint offset but keep around the residual fractional 263 // we round the paint offset but keep around the residual fractional
264 // component for the transformed content to paint with. In spv1 this was 264 // component for the transformed content to paint with. In spv1 this was
265 // called "subpixel accumulation". For more information, see 265 // called "subpixel accumulation". For more information, see
266 // PaintLayer::subpixelAccumulation() and 266 // PaintLayer::subpixelAccumulation() and
267 // PaintLayerPainter::paintFragmentByApplyingTransform. 267 // PaintLayerPainter::paintFragmentByApplyingTransform.
268 IntPoint rounded_paint_offset = 268 IntPoint rounded_paint_offset =
269 RoundedIntPoint(context.current.paint_offset); 269 RoundedIntPoint(context.current.paint_offset);
270 LayoutPoint fractional_paint_offset = 270 LayoutPoint fractional_paint_offset =
271 LayoutPoint(context.current.paint_offset - rounded_paint_offset); 271 LayoutPoint(context.current.paint_offset - rounded_paint_offset);
272 if (fractional_paint_offset != LayoutPoint()) {
273 // If the object has a non-translation transform, discard the fractional
274 // paint offset which can't be transformed by the transform.
275 TransformationMatrix matrix;
276 object.StyleRef().ApplyTransform(
277 matrix, LayoutSize(), ComputedStyle::kExcludeTransformOrigin,
278 ComputedStyle::kIncludeMotionPath,
279 ComputedStyle::kIncludeIndependentTransformProperties);
280 if (!matrix.IsIdentityOrTranslation())
281 fractional_paint_offset = LayoutPoint();
282 }
272 283
273 force_subtree_update |= properties.UpdatePaintOffsetTranslation( 284 force_subtree_update |= properties.UpdatePaintOffsetTranslation(
274 context.current.transform, 285 context.current.transform,
275 TransformationMatrix().Translate(rounded_paint_offset.X(), 286 TransformationMatrix().Translate(rounded_paint_offset.X(),
276 rounded_paint_offset.Y()), 287 rounded_paint_offset.Y()),
277 FloatPoint3D(), context.current.should_flatten_inherited_transform, 288 FloatPoint3D(), context.current.should_flatten_inherited_transform,
278 context.current.rendering_context_id); 289 context.current.rendering_context_id);
279 290
280 context.current.transform = properties.PaintOffsetTranslation(); 291 context.current.transform = properties.PaintOffsetTranslation();
281 context.current.paint_offset = fractional_paint_offset; 292 context.current.paint_offset = fractional_paint_offset;
282 if (RuntimeEnabledFeatures::rootLayerScrollingEnabled() && 293 if (RuntimeEnabledFeatures::rootLayerScrollingEnabled() &&
283 object.IsLayoutView()) { 294 object.IsLayoutView()) {
284 context.absolute_position.transform = properties.PaintOffsetTranslation(); 295 context.absolute_position.transform = properties.PaintOffsetTranslation();
285 context.fixed_position.transform = properties.PaintOffsetTranslation(); 296 context.fixed_position.transform = properties.PaintOffsetTranslation();
286 context.absolute_position.paint_offset = LayoutPoint(); 297 context.absolute_position.paint_offset = fractional_paint_offset;
287 context.fixed_position.paint_offset = LayoutPoint(); 298 context.fixed_position.paint_offset = fractional_paint_offset;
288 } 299 }
289 } else { 300 } else {
290 if (auto* properties = object.GetMutableForPainting().PaintProperties()) 301 if (auto* properties = object.GetMutableForPainting().PaintProperties())
291 force_subtree_update |= properties->ClearPaintOffsetTranslation(); 302 force_subtree_update |= properties->ClearPaintOffsetTranslation();
292 } 303 }
293 } 304 }
294 305
295 static bool NeedsTransformForNonRootSVG(const LayoutObject& object) { 306 static bool NeedsTransformForNonRootSVG(const LayoutObject& object) {
296 // TODO(pdr): Check for the presence of a transform instead of the value. 307 // TODO(pdr): Check for the presence of a transform instead of the value.
297 // Checking for an identity matrix will cause the property tree structure 308 // Checking for an identity matrix will cause the property tree structure
(...skipping 972 matching lines...) Expand 10 before | Expand all | Expand 10 after
1270 context.force_subtree_update); 1281 context.force_subtree_update);
1271 1282
1272 context.force_subtree_update |= object.SubtreeNeedsPaintPropertyUpdate(); 1283 context.force_subtree_update |= object.SubtreeNeedsPaintPropertyUpdate();
1273 } 1284 }
1274 1285
1275 if (object.CanContainAbsolutePositionObjects()) 1286 if (object.CanContainAbsolutePositionObjects())
1276 context.container_for_absolute_position = &object; 1287 context.container_for_absolute_position = &object;
1277 } 1288 }
1278 1289
1279 } // namespace blink 1290 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698