Branch: refs/heads/main Home: https://github.com/WebKit/WebKit Commit: d2c0299eb83a36da49226c4c3696e8ae7382c39b https://github.com/WebKit/WebKit/commit/d2c0299eb83a36da49226c4c3696e8ae7382c39b Author: Nikolas Zimmermann <nzimmerm...@igalia.com> Date: 2022-09-26 (Mon, 26 Sep 2022)
Changed paths: A LayoutTests/svg/compositing/inline-svg-non-integer-position-display-block-composited-expected.html A LayoutTests/svg/compositing/inline-svg-non-integer-position-display-block-composited.html A LayoutTests/svg/compositing/inline-svg-non-integer-position-display-inline-composited-expected.html A LayoutTests/svg/compositing/inline-svg-non-integer-position-display-inline-composited.html M Source/WebCore/rendering/RenderLayer.cpp M Source/WebCore/rendering/RenderLayerBacking.cpp Log Message: ----------- [LBSE] Pixel snapping logic is incorrect for SVG, when elements are composited https://bugs.webkit.org/show_bug.cgi?id=245416 Reviewed by Rob Buis. In bug webkit.org/b/244966 ("[LBSE] Outermost <svg> elements are not device-pixel aligned") the rendering was adapted in such a way that the outermost <svg> element is the only element in the SVG subtree that is pixel snapped, delivering consistent results between e.g. HTML <div> elements and SVG <svg> elements, embedded in a CSS formatting context. The <div> will get pixel snapped upon painting -- the same was enforced for the outermost <svg>, however without propagating/accumulating sub-pixel errors for the descendant layers, since no pixel snapping is applied within the SVG subtree. When elements are composited another logic is used (RenderLayerBacking), and the device-pixel alignment is applied for all SVG layers -- effectively breaking content. By fixing that, the pixel snapping logic is consistent for all painting modes we have, no matter if the outer <svg> is composited, or any of its descendants. Added two new reftests covering LBSE + compositing + sub-pixel locations in different display modes. Doesn't affect any other existing tests. * LayoutTests/svg/compositing/inline-svg-non-integer-position-display-block-composited-expected.html: Added. * LayoutTests/svg/compositing/inline-svg-non-integer-position-display-block-composited.html: Added. * LayoutTests/svg/compositing/inline-svg-non-integer-position-display-inline-composited-expected.html: Added. * LayoutTests/svg/compositing/inline-svg-non-integer-position-display-inline-composited.html: Added. * Source/WebCore/rendering/RenderLayer.cpp: (WebCore::RenderLayer::convertToLayerCoords const): * Source/WebCore/rendering/RenderLayerBacking.cpp: (WebCore::snappedGraphicsLayer): (WebCore::RenderLayerBacking::computeParentGraphicsLayerRect const): (WebCore::RenderLayerBacking::updateGeometry): (WebCore::RenderLayerBacking::adjustOverflowControlsPositionRelativeToAncestor): (WebCore::RenderLayerBacking::updateMaskingLayerGeometry): (WebCore::RenderLayerBacking::updateContentsRects): (WebCore::RenderLayerBacking::updateClippingStackLayerGeometry): (WebCore::RenderLayerBacking::setContentsNeedDisplayInRect): Canonical link: https://commits.webkit.org/254863@main _______________________________________________ webkit-changes mailing list webkit-changes@lists.webkit.org https://lists.webkit.org/mailman/listinfo/webkit-changes