New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. Weβll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[LBSE] Fix/enable zooming & panning - improve interop #5073
[LBSE] Fix/enable zooming & panning - improve interop #5073
Conversation
EWS run on previous version of this PR (hash 60aeb73) |
60aeb73
to
388d09f
Compare
EWS run on previous version of this PR (hash 388d09f) |
388d09f
to
fb8afc0
Compare
EWS run on previous version of this PR (hash fb8afc0) |
fb8afc0
to
caca2a9
Compare
EWS run on current version of this PR (hash caca2a9) |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM.
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
caca2a9
to
f2385c3
Compare
Committed 255727@main (f2385c3): https://commits.webkit.org/255727@main Reviewed commits have been landed. Closing PR #5073 and removing active labels. |
f2385c3
caca2a9
π π§ͺ winπ wincairoπ§ͺ ios-wk2π§ͺ gtk-wk2π§ͺ api-gtkπ§ͺ mac-wk1π§ͺ mac-wk2π§ͺ mac-AS-debug-wk2