Branch: refs/heads/main
Home: https://github.com/WebKit/WebKit
Commit: 0aefc8041c1188bfb8d974c2403809784689b130
https://github.com/WebKit/WebKit/commit/0aefc8041c1188bfb8d974c2403809784689b130
Author: Yoel Hawa <[email protected]>
Date: 2026-10-02 (Fri, 02 Oct 2026)
Changed paths:
A LayoutTests/model-element/model-element-fit-centers-content-expected.txt
A LayoutTests/model-element/model-element-fit-centers-content.html
A LayoutTests/model-element/volumetric/volumetric-scene-fit-expected.txt
A LayoutTests/model-element/volumetric/volumetric-scene-fit.html
M Source/WebKit/ModelProcess/cocoa/ModelProcessModelPlayerProxy.h
M Source/WebKit/ModelProcess/cocoa/ModelProcessModelPlayerProxy.mm
M Source/WebKit/UIProcess/Model/PortalPresentationManagerProxy.mm
M Source/WebKit/WebKitSwift/RealityKit/WKRKEntity.h
M Source/WebKit/WebKitSwift/RealityKit/WKRKEntity.swift
M Source/WebKit/WebKitSwift/StageMode/WKStageMode.swift
Log Message:
-----------
[visionOS] Add auto-fit behavior to connected volumetric scenes
https://bugs.webkit.org/show_bug.cgi?id=324616
<rdar://182292558>
Reviewed by Etienne Segonzac.
Content in a connected volumetric scene kept its inline fit, which comes
from the layer's bounds in points, so it sat in the volume at the wrong
size and off-center, and a resize did not re-fit it. Fit it to a sphere
inscribed in the volume's smaller in-plane extent instead, resting on the
floor of the volume.
The fit also canceled the bounding box center without rotating it, so
rotated content whose bounding box is not centered on its origin ended up
off-center. The orbit path masked this by re-centering afterward in
WKRKEntity's recenter(at:), but other re-fits did not, such as a resize after
leaving orbit. Cancel the rotated center in the fit and remove recenter(at:).
setContainerTransformInPortal() now keeps the content in place when it moves
the orbit pivot, as operationDidUpdate() already did, because the pivot is
now re-centered after each re-fit.
Tests: model-element/model-element-fit-centers-content.html
model-element/volumetric/volumetric-scene-fit.html
* LayoutTests/model-element/model-element-fit-centers-content-expected.txt:
Added.
* LayoutTests/model-element/model-element-fit-centers-content.html: Added.
* LayoutTests/model-element/volumetric/volumetric-scene-fit-expected.txt: Added.
* LayoutTests/model-element/volumetric/volumetric-scene-fit.html: Added.
* Source/WebKit/ModelProcess/cocoa/ModelProcessModelPlayerProxy.h:
* Source/WebKit/ModelProcess/cocoa/ModelProcessModelPlayerProxy.mm:
(WebKit::computeSRT):
(WebKit::ModelProcessModelPlayerProxy::computeMergedBounds const):
(WebKit::ModelProcessModelPlayerProxy::computeTransform):
(WebKit::ModelProcessModelPlayerProxy::didFinishLoading):
(WebKit::ModelProcessModelPlayerProxy::updateForCurrentStageMode):
(WebKit::ModelProcessModelPlayerProxy::setPresentationMode):
(WebKit::ModelProcessModelPlayerProxy::applyPresentationTransform):
(WebKit::isFinite):
(WebKit::ModelProcessModelPlayerProxy::computeVolumetricFitSRT):
(WebKit::ModelProcessModelPlayerProxy::applyVolumetricPresentationTransform):
* Source/WebKit/UIProcess/Model/PortalPresentationManagerProxy.mm:
(WebKit::PortalPresentationManagerProxy::showVolumetricScene):
(WebKit::PortalPresentationManagerProxy::reconnectVolumetricSceneToContentContext):
Report the mock
size to a rebound player too, as a real scene does.
* Source/WebKit/WebKitSwift/RealityKit/WKRKEntity.h:
* Source/WebKit/WebKitSwift/RealityKit/WKRKEntity.swift:
(WKRKEntity.transformMatrix(relativeTo:)):
(WKRKEntity.setTransformMatrix(_:relativeTo:)):
(WKRKEntity.removeFromParentEntity):
(WKRKEntity.interactionContainerDidRecenter(fromTransform:)): Deleted.
(WKRKEntity.recenter(at:)): Deleted.
* Source/WebKit/WebKitSwift/StageMode/WKStageMode.swift:
(WKStageModeInteractionDriver.recenterInteractionPivotOnContent):
(WKStageModeInteractionDriver.setContainerTransformInPortal):
(WKStageModeInteractionDriver.operationDidUpdate(_:)):
Canonical link: https://commits.webkit.org/322544@main
To unsubscribe from these emails, change your notification settings at
https://github.com/WebKit/WebKit/settings/notifications