Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: f654a53b02aa9440e7e32aaf51465a57b134c1ec
      
https://github.com/WebKit/WebKit/commit/f654a53b02aa9440e7e32aaf51465a57b134c1ec
  Author: Nikolas Zimmermann <[email protected]>
  Date:   2026-06-11 (Thu, 11 Jun 2026)

  Changed paths:
    M Source/WebCore/rendering/RenderLayerModelObject.cpp
    M Source/WebCore/rendering/RenderObject.cpp
    M Source/WebCore/rendering/svg/RenderSVGModelObject.cpp
    M Source/WebCore/rendering/svg/RenderSVGText.cpp
    M Source/WebCore/rendering/svg/RenderSVGText.h
    M Source/WebCore/rendering/svg/RenderSVGTextPath.cpp

  Log Message:
  -----------
  [LBSE] Extend non-layered 2D local transform handling to RenderSVGText
https://bugs.webkit.org/show_bug.cgi?id=316903

Reviewed by Rob Buis.

Foundation for conditional layer creation: once an SVG renderer can lack a
RenderLayer, its plain 2D transform must be cached on the renderer and read
back while painting, hit-testing and computing CTMs, instead of living on the
layer's transformation matrix.

RenderSVGText gains its own updateLocalTransform(), similar to the legacy
engine, and layout() now calls updateLocalTransform() once glyph metrics are
stable for non-layered text.

RenderLayerModelObject::updateTransformAndRepaintForSVGAfterAttributeChange()
combines its layered and non-layered transform refresh into one 
refreshTransform()
helper: it updates the RenderLayer transform when layered, and the cached
m_localTransform when the renderer is a non-layered RenderSVGModelObject.

Non-layered RenderSVGText is handled separately, because its transform depends
on glyph metrics that are only final after layout: it probes the new transform
with computeLocalTransform(), a non-caching variant of updateLocalTransform().
A changed scale schedules a relayout, so layout() recomputes the transform from
fresh metrics - an unchanged scale refreshes m_localTransform in place and
issues a delta repaint, with no relayout.

These paths stay dormant until requiresLayer() becomes conditional.

* Source/WebCore/rendering/RenderLayerModelObject.cpp:
(WebCore::RenderLayerModelObject::updateTransformAndRepaintForSVGAfterAttributeChange):
* Source/WebCore/rendering/RenderObject.cpp:
(WebCore::RenderObject::getTransformFromContainer const):
* Source/WebCore/rendering/svg/RenderSVGModelObject.cpp:
(WebCore::RenderSVGModelObject::updateFromStyle):
* Source/WebCore/rendering/svg/RenderSVGText.cpp:
(WebCore::RenderSVGText::computeLocalTransform const):
(WebCore::RenderSVGText::updateLocalTransform):
(WebCore::RenderSVGText::layout):
* Source/WebCore/rendering/svg/RenderSVGText.h:
* Source/WebCore/rendering/svg/RenderSVGTextPath.cpp:

Canonical link: https://commits.webkit.org/315025@main



To unsubscribe from these emails, change your notification settings at 
https://github.com/WebKit/WebKit/settings/notifications

Reply via email to