[webkit-changes] [WebKit/WebKit] f2385c: [LBSE] Fix/enable zooming & panning - improve interop

Nikolas Zimmermann noreply at github.com
Wed Oct 19 04:06:38 PDT 2022


  Branch: refs/heads/main
  Home:   https://github.com/WebKit/WebKit
  Commit: f2385c386d5eaaab21f8a97cf49835827af1f259
      https://github.com/WebKit/WebKit/commit/f2385c386d5eaaab21f8a97cf49835827af1f259
  Author: Nikolas Zimmermann <nzimmermann at igalia.com>
  Date:   2022-10-19 (Wed, 19 Oct 2022)

  Changed paths:
    M LayoutTests/platform/mac-monterey-wk2-lbse-text/TestExpectations
    A LayoutTests/platform/mac-monterey-wk2-lbse-text/svg/custom/pan-direction-expected.txt
    A LayoutTests/platform/mac-monterey-wk2-lbse-text/svg/zoom/page/absolute-sized-document-no-scrollbars-expected.txt
    A LayoutTests/platform/mac-monterey-wk2-lbse-text/svg/zoom/page/absolute-sized-document-scrollbars-expected.txt
    A LayoutTests/platform/mac-monterey-wk2-lbse-text/svg/zoom/page/relative-sized-document-scrollbars-expected.png
    A LayoutTests/platform/mac-monterey-wk2-lbse-text/svg/zoom/page/relative-sized-document-scrollbars-expected.txt
    A LayoutTests/platform/mac-monterey-wk2-lbse-text/svg/zoom/page/zoom-coords-viewattr-01-b-expected.png
    A LayoutTests/platform/mac-monterey-wk2-lbse-text/svg/zoom/page/zoom-coords-viewattr-01-b-expected.txt
    A LayoutTests/platform/mac-monterey-wk2-lbse-text/svg/zoom/page/zoom-foreign-content-expected.png
    A LayoutTests/platform/mac-monterey-wk2-lbse-text/svg/zoom/page/zoom-foreign-content-expected.txt
    A LayoutTests/platform/mac-monterey-wk2-lbse-text/svg/zoom/page/zoom-foreignObject-expected.png
    A LayoutTests/platform/mac-monterey-wk2-lbse-text/svg/zoom/page/zoom-foreignObject-expected.txt
    A LayoutTests/platform/mac-monterey-wk2-lbse-text/svg/zoom/page/zoom-hixie-mixed-008-expected.png
    A LayoutTests/platform/mac-monterey-wk2-lbse-text/svg/zoom/page/zoom-hixie-mixed-008-expected.txt
    A LayoutTests/platform/mac-monterey-wk2-lbse-text/svg/zoom/page/zoom-hixie-mixed-009-expected.png
    A LayoutTests/platform/mac-monterey-wk2-lbse-text/svg/zoom/page/zoom-hixie-mixed-009-expected.txt
    A LayoutTests/platform/mac-monterey-wk2-lbse-text/svg/zoom/page/zoom-hixie-rendering-model-004-expected.png
    A LayoutTests/platform/mac-monterey-wk2-lbse-text/svg/zoom/page/zoom-hixie-rendering-model-004-expected.txt
    A LayoutTests/platform/mac-monterey-wk2-lbse-text/svg/zoom/page/zoom-img-preserveAspectRatio-support-1-expected.txt
    A LayoutTests/platform/mac-monterey-wk2-lbse-text/svg/zoom/page/zoom-replaced-intrinsic-ratio-001-expected.txt
    A LayoutTests/platform/mac-monterey-wk2-lbse-text/svg/zoom/page/zoom-svg-as-object-expected.txt
    A LayoutTests/platform/mac-monterey-wk2-lbse-text/svg/zoom/page/zoom-svg-float-border-padding-expected.png
    A LayoutTests/platform/mac-monterey-wk2-lbse-text/svg/zoom/page/zoom-svg-float-border-padding-expected.txt
    A LayoutTests/platform/mac-monterey-wk2-lbse-text/svg/zoom/page/zoom-svg-through-object-with-absolute-size-2-expected.txt
    A LayoutTests/platform/mac-monterey-wk2-lbse-text/svg/zoom/page/zoom-svg-through-object-with-auto-size-expected.txt
    A LayoutTests/platform/mac-monterey-wk2-lbse-text/svg/zoom/page/zoom-svg-through-object-with-override-size-expected.txt
    A LayoutTests/platform/mac-monterey-wk2-lbse-text/svg/zoom/text/zoom-hixie-mixed-008-expected.png
    M Source/WebCore/rendering/svg/RenderSVGRoot.cpp
    M Source/WebCore/rendering/svg/RenderSVGRoot.h
    M Source/WebCore/rendering/svg/RenderSVGViewportContainer.cpp
    M Source/WebCore/rendering/svg/RenderSVGViewportContainer.h
    M Source/WebCore/svg/SVGSVGElement.cpp

  Log Message:
  -----------
  [LBSE] Fix/enable zooming & panning - improve interop
https://bugs.webkit.org/show_bug.cgi?id=245507

Reviewed by Rob Buis.

Zooming/panning is entirely broken and unprecdictable if LBSE is activated.
It often shows no immediate effect, or painting artefacts upon scrolling.

Fix panning by implementing RenderSVGRoot::updateFromElement() and using
it from SVGSVGElement::updateCurrentTranslate() to request pan updates.
Forward updateFromElement() calls to the viewportContainer() (the anonymous
RenderSVGViewportContainer wrapping the rest of the SVG render tree) to
update the layer transform.

Enforce 'HasSVGTransform' flag to be set on thew viewportContainer() if
it gained a SVG transform due to full page zoom or panning. It only used
to work if other means caused the flag to be set (e.g. viewBox transform).

This also improves interop with Blink/Gecko, resolving a 15+ year old issue.
SVGs with relative sized width/height cannot be zoomed (stroke-width enlarges,
but document stays at the same size, scrollbars never appear).
RenderSVGRoot::computeReplacedLogicalWidth() now multiples the result by the
effectiveZoom() if the document has no intrinsic width (e.g. % units!).
Likewise computeReplacedLogicalHeight() now also respects the zoom.

The other code paths in computeReplacedLogicalWidh() already implicitely took the
zoom into account, e.g. if isEmbeddedThroughFrameContainingSVGDocument() = true, the
containingBlock() availableLogicalWidth() is returned. These kind of CSS values are
multiplied by the effectiveZoom() by default during Length resolving, whereas SVG elements
don't - see Style::BuilderState::useSVGZoomRulesForLength. This is correct for the whole
SVG subtree, since the effectiveZoom() induced scaling is realized by applying a transform
to the outermost RenderSVGViewportContainer layer, not by scaling individual length values.

This PR fixes all page zoom / panning / .. issues in LBSE.
Covered by various existing tests (see TestExpectations changes).

* LayoutTests/platform/mac-monterey-wk2-lbse-text/TestExpectations:
* LayoutTests/platform/mac-monterey-wk2-lbse-text/svg/custom/pan-direction-expected.txt: Added.
* LayoutTests/platform/mac-monterey-wk2-lbse-text/svg/zoom/page/absolute-sized-document-no-scrollbars-expected.txt: Added.
* LayoutTests/platform/mac-monterey-wk2-lbse-text/svg/zoom/page/absolute-sized-document-scrollbars-expected.txt: Added.
* LayoutTests/platform/mac-monterey-wk2-lbse-text/svg/zoom/page/relative-sized-document-scrollbars-expected.png: Added.
* LayoutTests/platform/mac-monterey-wk2-lbse-text/svg/zoom/page/relative-sized-document-scrollbars-expected.txt: Added.
* LayoutTests/platform/mac-monterey-wk2-lbse-text/svg/zoom/page/zoom-coords-viewattr-01-b-expected.png: Added.
* LayoutTests/platform/mac-monterey-wk2-lbse-text/svg/zoom/page/zoom-coords-viewattr-01-b-expected.txt: Added.
* LayoutTests/platform/mac-monterey-wk2-lbse-text/svg/zoom/page/zoom-foreign-content-expected.png: Added.
* LayoutTests/platform/mac-monterey-wk2-lbse-text/svg/zoom/page/zoom-foreign-content-expected.txt: Added.
* LayoutTests/platform/mac-monterey-wk2-lbse-text/svg/zoom/page/zoom-foreignObject-expected.png: Added.
* LayoutTests/platform/mac-monterey-wk2-lbse-text/svg/zoom/page/zoom-foreignObject-expected.txt: Added.
* LayoutTests/platform/mac-monterey-wk2-lbse-text/svg/zoom/page/zoom-hixie-mixed-008-expected.png: Added.
* LayoutTests/platform/mac-monterey-wk2-lbse-text/svg/zoom/page/zoom-hixie-mixed-008-expected.txt: Added.
* LayoutTests/platform/mac-monterey-wk2-lbse-text/svg/zoom/page/zoom-hixie-mixed-009-expected.png: Added.
* LayoutTests/platform/mac-monterey-wk2-lbse-text/svg/zoom/page/zoom-hixie-mixed-009-expected.txt: Added.
* LayoutTests/platform/mac-monterey-wk2-lbse-text/svg/zoom/page/zoom-hixie-rendering-model-004-expected.png: Added.
* LayoutTests/platform/mac-monterey-wk2-lbse-text/svg/zoom/page/zoom-hixie-rendering-model-004-expected.txt: Added.
* LayoutTests/platform/mac-monterey-wk2-lbse-text/svg/zoom/page/zoom-img-preserveAspectRatio-support-1-expected.txt: Added.
* LayoutTests/platform/mac-monterey-wk2-lbse-text/svg/zoom/page/zoom-replaced-intrinsic-ratio-001-expected.txt: Added.
* LayoutTests/platform/mac-monterey-wk2-lbse-text/svg/zoom/page/zoom-svg-as-object-expected.txt: Added.
* LayoutTests/platform/mac-monterey-wk2-lbse-text/svg/zoom/page/zoom-svg-float-border-padding-expected.png: Added.
* LayoutTests/platform/mac-monterey-wk2-lbse-text/svg/zoom/page/zoom-svg-float-border-padding-expected.txt: Added.
* LayoutTests/platform/mac-monterey-wk2-lbse-text/svg/zoom/page/zoom-svg-through-object-with-absolute-size-2-expected.txt: Added.
* LayoutTests/platform/mac-monterey-wk2-lbse-text/svg/zoom/page/zoom-svg-through-object-with-auto-size-expected.txt: Added.
* LayoutTests/platform/mac-monterey-wk2-lbse-text/svg/zoom/page/zoom-svg-through-object-with-override-size-expected.txt: Added.
* LayoutTests/platform/mac-monterey-wk2-lbse-text/svg/zoom/text/zoom-hixie-mixed-008-expected.png: Added.
* Source/WebCore/rendering/svg/RenderSVGRoot.cpp:
(WebCore::RenderSVGRoot::computeReplacedLogicalWidth const):
(WebCore::RenderSVGRoot::computeReplacedLogicalHeight const):
(WebCore::RenderSVGRoot::updateLayoutSizeIfNeeded):
(WebCore::RenderSVGRoot::updateFromElement):
(WebCore::RenderSVGRoot::updateFromStyle):
(WebCore::RenderSVGRoot::computeViewportSize const):
(WebCore::RenderSVGRoot::overflowClipRect const):
* Source/WebCore/rendering/svg/RenderSVGRoot.h:
* Source/WebCore/rendering/svg/RenderSVGViewportContainer.cpp:
(WebCore::RenderSVGViewportContainer::updateLayoutSizeIfNeeded):
(WebCore::RenderSVGViewportContainer::needsHasSVGTransformFlag const):
(WebCore::RenderSVGViewportContainer::updateFromStyle):
(WebCore::RenderSVGViewportContainer::updateLayerTransform):
* Source/WebCore/rendering/svg/RenderSVGViewportContainer.h:
* Source/WebCore/svg/SVGSVGElement.cpp:
(WebCore::SVGSVGElement::updateCurrentTranslate):

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




More information about the webkit-changes mailing list