| // Copyright (c) 2023, the Dart project authors. Please see the AUTHORS file |
| // for details. All rights reserved. Use of this source code is governed by a |
| // BSD-style license that can be found in the LICENSE file. |
| |
| import 'dart:js_interop'; |
| |
| import 'anchors.dart'; |
| import 'dom.dart'; |
| import 'gamepad.dart'; |
| import 'geometry.dart'; |
| import 'hr_time.dart'; |
| import 'html.dart'; |
| import 'permissions.dart'; |
| import 'raw_camera_access.dart'; |
| import 'real_world_meshing.dart'; |
| import 'webgl1.dart'; |
| import 'webxr_ar_module.dart'; |
| import 'webxr_depth_sensing.dart'; |
| import 'webxr_dom_overlays.dart'; |
| import 'webxr_hand_input.dart'; |
| import 'webxr_hit_test.dart'; |
| import 'webxr_lighting_estimation.dart'; |
| |
| typedef XRWebGLRenderingContext = JSAny?; |
| typedef XRFrameRequestCallback = JSFunction; |
| typedef XRSessionMode = String; |
| typedef XRVisibilityState = String; |
| typedef XRReferenceSpaceType = String; |
| typedef XREye = String; |
| typedef XRHandedness = String; |
| typedef XRTargetRayMode = String; |
| |
| @JS('XRSystem') |
| @staticInterop |
| class XRSystem implements EventTarget {} |
| |
| extension XRSystemExtension on XRSystem { |
| external JSPromise isSessionSupported(XRSessionMode mode); |
| external JSPromise requestSession( |
| XRSessionMode mode, [ |
| XRSessionInit options, |
| ]); |
| external set ondevicechange(EventHandler value); |
| external EventHandler get ondevicechange; |
| } |
| |
| @JS() |
| @staticInterop |
| @anonymous |
| class XRSessionInit implements JSObject { |
| external factory XRSessionInit({ |
| XRDepthStateInit depthSensing, |
| XRDOMOverlayInit? domOverlay, |
| JSArray requiredFeatures, |
| JSArray optionalFeatures, |
| }); |
| } |
| |
| extension XRSessionInitExtension on XRSessionInit { |
| external set depthSensing(XRDepthStateInit value); |
| external XRDepthStateInit get depthSensing; |
| external set domOverlay(XRDOMOverlayInit? value); |
| external XRDOMOverlayInit? get domOverlay; |
| external set requiredFeatures(JSArray value); |
| external JSArray get requiredFeatures; |
| external set optionalFeatures(JSArray value); |
| external JSArray get optionalFeatures; |
| } |
| |
| @JS('XRSession') |
| @staticInterop |
| class XRSession implements EventTarget {} |
| |
| extension XRSessionExtension on XRSession { |
| external JSPromise restorePersistentAnchor(String uuid); |
| external JSPromise deletePersistentAnchor(String uuid); |
| external JSPromise requestHitTestSource(XRHitTestOptionsInit options); |
| external JSPromise requestHitTestSourceForTransientInput( |
| XRTransientInputHitTestOptionsInit options); |
| external JSPromise requestLightProbe([XRLightProbeInit options]); |
| external JSVoid updateRenderState([XRRenderStateInit state]); |
| external JSPromise updateTargetFrameRate(double rate); |
| external JSPromise requestReferenceSpace(XRReferenceSpaceType type); |
| external int requestAnimationFrame(XRFrameRequestCallback callback); |
| external JSVoid cancelAnimationFrame(int handle); |
| external JSPromise end(); |
| external JSArray get persistentAnchors; |
| external XREnvironmentBlendMode get environmentBlendMode; |
| external XRInteractionMode get interactionMode; |
| external XRDepthUsage get depthUsage; |
| external XRDepthDataFormat get depthDataFormat; |
| external XRDOMOverlayState? get domOverlayState; |
| external XRReflectionFormat get preferredReflectionFormat; |
| external XRVisibilityState get visibilityState; |
| external double? get frameRate; |
| external JSFloat32Array? get supportedFrameRates; |
| external XRRenderState get renderState; |
| external XRInputSourceArray get inputSources; |
| external JSArray get enabledFeatures; |
| external bool get isSystemKeyboardSupported; |
| external set onend(EventHandler value); |
| external EventHandler get onend; |
| external set oninputsourceschange(EventHandler value); |
| external EventHandler get oninputsourceschange; |
| external set onselect(EventHandler value); |
| external EventHandler get onselect; |
| external set onselectstart(EventHandler value); |
| external EventHandler get onselectstart; |
| external set onselectend(EventHandler value); |
| external EventHandler get onselectend; |
| external set onsqueeze(EventHandler value); |
| external EventHandler get onsqueeze; |
| external set onsqueezestart(EventHandler value); |
| external EventHandler get onsqueezestart; |
| external set onsqueezeend(EventHandler value); |
| external EventHandler get onsqueezeend; |
| external set onvisibilitychange(EventHandler value); |
| external EventHandler get onvisibilitychange; |
| external set onframeratechange(EventHandler value); |
| external EventHandler get onframeratechange; |
| } |
| |
| @JS() |
| @staticInterop |
| @anonymous |
| class XRRenderStateInit implements JSObject { |
| external factory XRRenderStateInit({ |
| double depthNear, |
| double depthFar, |
| double inlineVerticalFieldOfView, |
| XRWebGLLayer? baseLayer, |
| JSArray? layers, |
| }); |
| } |
| |
| extension XRRenderStateInitExtension on XRRenderStateInit { |
| external set depthNear(double value); |
| external double get depthNear; |
| external set depthFar(double value); |
| external double get depthFar; |
| external set inlineVerticalFieldOfView(double value); |
| external double get inlineVerticalFieldOfView; |
| external set baseLayer(XRWebGLLayer? value); |
| external XRWebGLLayer? get baseLayer; |
| external set layers(JSArray? value); |
| external JSArray? get layers; |
| } |
| |
| @JS('XRRenderState') |
| @staticInterop |
| class XRRenderState implements JSObject {} |
| |
| extension XRRenderStateExtension on XRRenderState { |
| external double get depthNear; |
| external double get depthFar; |
| external double? get inlineVerticalFieldOfView; |
| external XRWebGLLayer? get baseLayer; |
| external JSArray get layers; |
| } |
| |
| @JS('XRFrame') |
| @staticInterop |
| class XRFrame implements JSObject {} |
| |
| extension XRFrameExtension on XRFrame { |
| external JSPromise createAnchor( |
| XRRigidTransform pose, |
| XRSpace space, |
| ); |
| external XRCPUDepthInformation? getDepthInformation(XRView view); |
| external XRJointPose? getJointPose( |
| XRJointSpace joint, |
| XRSpace baseSpace, |
| ); |
| external bool fillJointRadii( |
| JSArray jointSpaces, |
| JSFloat32Array radii, |
| ); |
| external bool fillPoses( |
| JSArray spaces, |
| XRSpace baseSpace, |
| JSFloat32Array transforms, |
| ); |
| external JSArray getHitTestResults(XRHitTestSource hitTestSource); |
| external JSArray getHitTestResultsForTransientInput( |
| XRTransientInputHitTestSource hitTestSource); |
| external XRLightEstimate? getLightEstimate(XRLightProbe lightProbe); |
| external XRViewerPose? getViewerPose(XRReferenceSpace referenceSpace); |
| external XRPose? getPose( |
| XRSpace space, |
| XRSpace baseSpace, |
| ); |
| external XRAnchorSet get trackedAnchors; |
| external XRMeshSet get detectedMeshes; |
| external XRSession get session; |
| external DOMHighResTimeStamp get predictedDisplayTime; |
| } |
| |
| @JS('XRSpace') |
| @staticInterop |
| class XRSpace implements EventTarget {} |
| |
| @JS('XRReferenceSpace') |
| @staticInterop |
| class XRReferenceSpace implements XRSpace {} |
| |
| extension XRReferenceSpaceExtension on XRReferenceSpace { |
| external XRReferenceSpace getOffsetReferenceSpace( |
| XRRigidTransform originOffset); |
| external set onreset(EventHandler value); |
| external EventHandler get onreset; |
| } |
| |
| @JS('XRBoundedReferenceSpace') |
| @staticInterop |
| class XRBoundedReferenceSpace implements XRReferenceSpace {} |
| |
| extension XRBoundedReferenceSpaceExtension on XRBoundedReferenceSpace { |
| external JSArray get boundsGeometry; |
| } |
| |
| @JS('XRView') |
| @staticInterop |
| class XRView implements JSObject {} |
| |
| extension XRViewExtension on XRView { |
| external JSVoid requestViewportScale(double? scale); |
| external XRCamera? get camera; |
| external bool get isFirstPersonObserver; |
| external XREye get eye; |
| external JSFloat32Array get projectionMatrix; |
| external XRRigidTransform get transform; |
| external double? get recommendedViewportScale; |
| } |
| |
| @JS('XRViewport') |
| @staticInterop |
| class XRViewport implements JSObject {} |
| |
| extension XRViewportExtension on XRViewport { |
| external int get x; |
| external int get y; |
| external int get width; |
| external int get height; |
| } |
| |
| @JS('XRRigidTransform') |
| @staticInterop |
| class XRRigidTransform implements JSObject { |
| external factory XRRigidTransform([ |
| DOMPointInit position, |
| DOMPointInit orientation, |
| ]); |
| } |
| |
| extension XRRigidTransformExtension on XRRigidTransform { |
| external DOMPointReadOnly get position; |
| external DOMPointReadOnly get orientation; |
| external JSFloat32Array get matrix; |
| external XRRigidTransform get inverse; |
| } |
| |
| @JS('XRPose') |
| @staticInterop |
| class XRPose implements JSObject {} |
| |
| extension XRPoseExtension on XRPose { |
| external XRRigidTransform get transform; |
| external DOMPointReadOnly? get linearVelocity; |
| external DOMPointReadOnly? get angularVelocity; |
| external bool get emulatedPosition; |
| } |
| |
| @JS('XRViewerPose') |
| @staticInterop |
| class XRViewerPose implements XRPose {} |
| |
| extension XRViewerPoseExtension on XRViewerPose { |
| external JSArray get views; |
| } |
| |
| @JS('XRInputSource') |
| @staticInterop |
| class XRInputSource implements JSObject {} |
| |
| extension XRInputSourceExtension on XRInputSource { |
| external Gamepad? get gamepad; |
| external XRHand? get hand; |
| external XRHandedness get handedness; |
| external XRTargetRayMode get targetRayMode; |
| external XRSpace get targetRaySpace; |
| external XRSpace? get gripSpace; |
| external JSArray get profiles; |
| } |
| |
| @JS('XRInputSourceArray') |
| @staticInterop |
| class XRInputSourceArray implements JSObject {} |
| |
| extension XRInputSourceArrayExtension on XRInputSourceArray { |
| external int get length; |
| } |
| |
| @JS('XRLayer') |
| @staticInterop |
| class XRLayer implements EventTarget {} |
| |
| @JS() |
| @staticInterop |
| @anonymous |
| class XRWebGLLayerInit implements JSObject { |
| external factory XRWebGLLayerInit({ |
| bool antialias, |
| bool depth, |
| bool stencil, |
| bool alpha, |
| bool ignoreDepthValues, |
| double framebufferScaleFactor, |
| }); |
| } |
| |
| extension XRWebGLLayerInitExtension on XRWebGLLayerInit { |
| external set antialias(bool value); |
| external bool get antialias; |
| external set depth(bool value); |
| external bool get depth; |
| external set stencil(bool value); |
| external bool get stencil; |
| external set alpha(bool value); |
| external bool get alpha; |
| external set ignoreDepthValues(bool value); |
| external bool get ignoreDepthValues; |
| external set framebufferScaleFactor(double value); |
| external double get framebufferScaleFactor; |
| } |
| |
| @JS('XRWebGLLayer') |
| @staticInterop |
| class XRWebGLLayer implements XRLayer { |
| external factory XRWebGLLayer( |
| XRSession session, |
| XRWebGLRenderingContext context, [ |
| XRWebGLLayerInit layerInit, |
| ]); |
| |
| external static double getNativeFramebufferScaleFactor(XRSession session); |
| } |
| |
| extension XRWebGLLayerExtension on XRWebGLLayer { |
| external XRViewport? getViewport(XRView view); |
| external bool get antialias; |
| external bool get ignoreDepthValues; |
| external set fixedFoveation(double? value); |
| external double? get fixedFoveation; |
| external WebGLFramebuffer? get framebuffer; |
| external int get framebufferWidth; |
| external int get framebufferHeight; |
| } |
| |
| @JS('XRSessionEvent') |
| @staticInterop |
| class XRSessionEvent implements Event { |
| external factory XRSessionEvent( |
| String type, |
| XRSessionEventInit eventInitDict, |
| ); |
| } |
| |
| extension XRSessionEventExtension on XRSessionEvent { |
| external XRSession get session; |
| } |
| |
| @JS() |
| @staticInterop |
| @anonymous |
| class XRSessionEventInit implements EventInit { |
| external factory XRSessionEventInit({required XRSession session}); |
| } |
| |
| extension XRSessionEventInitExtension on XRSessionEventInit { |
| external set session(XRSession value); |
| external XRSession get session; |
| } |
| |
| @JS('XRInputSourceEvent') |
| @staticInterop |
| class XRInputSourceEvent implements Event { |
| external factory XRInputSourceEvent( |
| String type, |
| XRInputSourceEventInit eventInitDict, |
| ); |
| } |
| |
| extension XRInputSourceEventExtension on XRInputSourceEvent { |
| external XRFrame get frame; |
| external XRInputSource get inputSource; |
| } |
| |
| @JS() |
| @staticInterop |
| @anonymous |
| class XRInputSourceEventInit implements EventInit { |
| external factory XRInputSourceEventInit({ |
| required XRFrame frame, |
| required XRInputSource inputSource, |
| }); |
| } |
| |
| extension XRInputSourceEventInitExtension on XRInputSourceEventInit { |
| external set frame(XRFrame value); |
| external XRFrame get frame; |
| external set inputSource(XRInputSource value); |
| external XRInputSource get inputSource; |
| } |
| |
| @JS('XRInputSourcesChangeEvent') |
| @staticInterop |
| class XRInputSourcesChangeEvent implements Event { |
| external factory XRInputSourcesChangeEvent( |
| String type, |
| XRInputSourcesChangeEventInit eventInitDict, |
| ); |
| } |
| |
| extension XRInputSourcesChangeEventExtension on XRInputSourcesChangeEvent { |
| external XRSession get session; |
| external JSArray get added; |
| external JSArray get removed; |
| } |
| |
| @JS() |
| @staticInterop |
| @anonymous |
| class XRInputSourcesChangeEventInit implements EventInit { |
| external factory XRInputSourcesChangeEventInit({ |
| required XRSession session, |
| required JSArray added, |
| required JSArray removed, |
| }); |
| } |
| |
| extension XRInputSourcesChangeEventInitExtension |
| on XRInputSourcesChangeEventInit { |
| external set session(XRSession value); |
| external XRSession get session; |
| external set added(JSArray value); |
| external JSArray get added; |
| external set removed(JSArray value); |
| external JSArray get removed; |
| } |
| |
| @JS('XRReferenceSpaceEvent') |
| @staticInterop |
| class XRReferenceSpaceEvent implements Event { |
| external factory XRReferenceSpaceEvent( |
| String type, |
| XRReferenceSpaceEventInit eventInitDict, |
| ); |
| } |
| |
| extension XRReferenceSpaceEventExtension on XRReferenceSpaceEvent { |
| external XRReferenceSpace get referenceSpace; |
| external XRRigidTransform? get transform; |
| } |
| |
| @JS() |
| @staticInterop |
| @anonymous |
| class XRReferenceSpaceEventInit implements EventInit { |
| external factory XRReferenceSpaceEventInit({ |
| required XRReferenceSpace referenceSpace, |
| XRRigidTransform? transform, |
| }); |
| } |
| |
| extension XRReferenceSpaceEventInitExtension on XRReferenceSpaceEventInit { |
| external set referenceSpace(XRReferenceSpace value); |
| external XRReferenceSpace get referenceSpace; |
| external set transform(XRRigidTransform? value); |
| external XRRigidTransform? get transform; |
| } |
| |
| @JS() |
| @staticInterop |
| @anonymous |
| class XRSessionSupportedPermissionDescriptor implements PermissionDescriptor { |
| external factory XRSessionSupportedPermissionDescriptor({XRSessionMode mode}); |
| } |
| |
| extension XRSessionSupportedPermissionDescriptorExtension |
| on XRSessionSupportedPermissionDescriptor { |
| external set mode(XRSessionMode value); |
| external XRSessionMode get mode; |
| } |
| |
| @JS() |
| @staticInterop |
| @anonymous |
| class XRPermissionDescriptor implements PermissionDescriptor { |
| external factory XRPermissionDescriptor({ |
| XRSessionMode mode, |
| JSArray requiredFeatures, |
| JSArray optionalFeatures, |
| }); |
| } |
| |
| extension XRPermissionDescriptorExtension on XRPermissionDescriptor { |
| external set mode(XRSessionMode value); |
| external XRSessionMode get mode; |
| external set requiredFeatures(JSArray value); |
| external JSArray get requiredFeatures; |
| external set optionalFeatures(JSArray value); |
| external JSArray get optionalFeatures; |
| } |
| |
| @JS('XRPermissionStatus') |
| @staticInterop |
| class XRPermissionStatus implements PermissionStatus {} |
| |
| extension XRPermissionStatusExtension on XRPermissionStatus { |
| external set granted(JSArray value); |
| external JSArray get granted; |
| } |