@weasel-js/core 1.9.4 → 1.10.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +918 -0
- package/README.md +38 -3
- package/dist/WeaselProvider.js +5 -7
- package/dist/WeaselProvider.js.map +1 -1
- package/dist/affordances/composeAffordanceLayer.js +92 -84
- package/dist/affordances/composeAffordanceLayer.js.map +1 -1
- package/dist/affordances/cornerResize.js +3 -2
- package/dist/affordances/cornerResize.js.map +1 -1
- package/dist/affordances/hitAffordanceRegions.js +71 -101
- package/dist/affordances/hitAffordanceRegions.js.map +1 -1
- package/dist/affordances/pathAnchors.js +50 -28
- package/dist/affordances/pathAnchors.js.map +1 -1
- package/dist/affordances/rotateCursor.js +12 -0
- package/dist/affordances/rotateCursor.js.map +1 -0
- package/dist/affordances/rotationHandle.js +44 -46
- package/dist/affordances/rotationHandle.js.map +1 -1
- package/dist/animation/behaviors/coast.js +21 -0
- package/dist/animation/behaviors/coast.js.map +1 -0
- package/dist/animation/behaviors/coastByWrite.js +107 -0
- package/dist/animation/behaviors/coastByWrite.js.map +1 -0
- package/dist/animation/behaviors/coastOnTargets.js +94 -0
- package/dist/animation/behaviors/coastOnTargets.js.map +1 -0
- package/dist/animation/behaviors/momentum.js +48 -136
- package/dist/animation/behaviors/momentum.js.map +1 -1
- package/dist/animation/clipTargets.js +12 -0
- package/dist/animation/clipTargets.js.map +1 -0
- package/dist/animation/index.js +15 -20
- package/dist/animation/poseHelpers.js +112 -33
- package/dist/animation/poseHelpers.js.map +1 -1
- package/dist/animation/poseTarget.js +115 -0
- package/dist/animation/poseTarget.js.map +1 -0
- package/dist/animation/reflow.js +113 -83
- package/dist/animation/reflow.js.map +1 -1
- package/dist/animation/rewind.js +66 -0
- package/dist/animation/rewind.js.map +1 -0
- package/dist/animation/rig/bindRig.js +85 -53
- package/dist/animation/rig/bindRig.js.map +1 -1
- package/dist/animation/rig/rigNode.js +99 -0
- package/dist/animation/rig/rigNode.js.map +1 -0
- package/dist/animation/rig/rigSeat.js +59 -0
- package/dist/animation/rig/rigSeat.js.map +1 -0
- package/dist/animation/rig/skinBinding.js +64 -0
- package/dist/animation/rig/skinBinding.js.map +1 -0
- package/dist/animation/rig/useRig.js +31 -16
- package/dist/animation/rig/useRig.js.map +1 -1
- package/dist/animation/wrappers/animateLifecycle.js +8 -7
- package/dist/animation/wrappers/animateLifecycle.js.map +1 -1
- package/dist/animation/wrappers/animateOnSetPose.js +31 -31
- package/dist/animation/wrappers/animateOnSetPose.js.map +1 -1
- package/dist/animation/wrappers/instantPose.js.map +1 -1
- package/dist/animation/writtenPoseTarget.js +33 -0
- package/dist/animation/writtenPoseTarget.js.map +1 -0
- package/dist/autoPoseDescriptor-DHg5KqaJ.d.ts +27 -0
- package/dist/barrel/canvas.js +32 -0
- package/dist/barrel/chrome.js +10 -10
- package/dist/barrel/input.js +16 -17
- package/dist/barrel/interactions.js +34 -37
- package/dist/barrel/paint.js +11 -18
- package/dist/barrel/paths.js +13 -19
- package/dist/barrel/renderer.js +14 -20
- package/dist/barrel/routing.js +54 -47
- package/dist/barrel/scene.js +37 -0
- package/dist/barrel/text.js +9 -18
- package/dist/barrel/viewport.js +44 -51
- package/dist/canvas/Canvas.js +270 -475
- package/dist/canvas/Canvas.js.map +1 -1
- package/dist/canvas/CanvasView.js +168 -190
- package/dist/canvas/CanvasView.js.map +1 -1
- package/dist/canvas/CursorCoordsHud.js +24 -25
- package/dist/canvas/CursorCoordsHud.js.map +1 -1
- package/dist/canvas/DrawCanvas.js +39 -56
- package/dist/canvas/DrawCanvas.js.map +1 -1
- package/dist/canvas/ModalityHud.js.map +1 -1
- package/dist/canvas/NodeShape.js +28 -29
- package/dist/canvas/NodeShape.js.map +1 -1
- package/dist/canvas/PickHud.js.map +1 -1
- package/dist/canvas/SceneCanvas/DevHuds.js +40 -0
- package/dist/canvas/SceneCanvas/DevHuds.js.map +1 -0
- package/dist/canvas/SceneCanvas/GestureDispatcherMounter.js +66 -107
- package/dist/canvas/SceneCanvas/GestureDispatcherMounter.js.map +1 -1
- package/dist/canvas/SceneCanvas/PointerProviderIfRoot.js +33 -36
- package/dist/canvas/SceneCanvas/PointerProviderIfRoot.js.map +1 -1
- package/dist/canvas/SceneCanvas/StandardActionsRegistrar.js +38 -50
- package/dist/canvas/SceneCanvas/StandardActionsRegistrar.js.map +1 -1
- package/dist/canvas/SceneCanvas/ToolKeybindingsMounter.js +3 -3
- package/dist/canvas/SceneCanvas/ToolKeybindingsMounter.js.map +1 -1
- package/dist/canvas/SceneCanvas/coordTrace.js +37 -1
- package/dist/canvas/SceneCanvas/coordTrace.js.map +1 -1
- package/dist/canvas/SceneCanvas/defaultNodeProperties.js +319 -270
- package/dist/canvas/SceneCanvas/defaultNodeProperties.js.map +1 -1
- package/dist/canvas/SceneCanvas/defaultNodeRouting.js +1 -1
- package/dist/canvas/SceneCanvas/defaultNodeRouting.js.map +1 -1
- package/dist/canvas/SceneCanvas/dispatcherGestureBounds.js.map +1 -1
- package/dist/canvas/SceneCanvas/features.js +71 -62
- package/dist/canvas/SceneCanvas/features.js.map +1 -1
- package/dist/canvas/SceneCanvas/insertPreviewCommands.js +97 -0
- package/dist/canvas/SceneCanvas/insertPreviewCommands.js.map +1 -0
- package/dist/canvas/SceneCanvas/isDev.js.map +1 -1
- package/dist/canvas/SceneCanvas/poseGeometry.js +33 -37
- package/dist/canvas/SceneCanvas/poseGeometry.js.map +1 -1
- package/dist/canvas/SceneCanvas/props.js +15 -14
- package/dist/canvas/SceneCanvas/props.js.map +1 -1
- package/dist/canvas/SceneCanvas/scenePointQuery.js +50 -0
- package/dist/canvas/SceneCanvas/scenePointQuery.js.map +1 -0
- package/dist/canvas/SceneCanvas/shapeGeneratorProperties.js +52 -0
- package/dist/canvas/SceneCanvas/shapeGeneratorProperties.js.map +1 -0
- package/dist/canvas/SceneCanvas/toolRegistry.js +23 -0
- package/dist/canvas/SceneCanvas/toolRegistry.js.map +1 -0
- package/dist/canvas/SceneCanvas/useActionTunings.js +17 -0
- package/dist/canvas/SceneCanvas/useActionTunings.js.map +1 -0
- package/dist/canvas/SceneCanvas/useActionsPropResolver.js +6 -1
- package/dist/canvas/SceneCanvas/useActionsPropResolver.js.map +1 -1
- package/dist/canvas/SceneCanvas/useBuiltinShapeTools.js.map +1 -1
- package/dist/canvas/SceneCanvas/useBuiltinTools.js +21 -0
- package/dist/canvas/SceneCanvas/useBuiltinTools.js.map +1 -0
- package/dist/canvas/SceneCanvas/useCanvasCamera.js +46 -0
- package/dist/canvas/SceneCanvas/useCanvasCamera.js.map +1 -0
- package/dist/canvas/SceneCanvas/useCanvasDispatcher.js +20 -0
- package/dist/canvas/SceneCanvas/useCanvasDispatcher.js.map +1 -0
- package/dist/canvas/SceneCanvas/useCanvasSelection.js +16 -0
- package/dist/canvas/SceneCanvas/useCanvasSelection.js.map +1 -0
- package/dist/canvas/SceneCanvas/useCanvasTools.js +67 -0
- package/dist/canvas/SceneCanvas/useCanvasTools.js.map +1 -0
- package/dist/canvas/SceneCanvas/useDispatcherOverlayLayer.js +49 -113
- package/dist/canvas/SceneCanvas/useDispatcherOverlayLayer.js.map +1 -1
- package/dist/canvas/SceneCanvas/useHeldModifiers.js +20 -0
- package/dist/canvas/SceneCanvas/useHeldModifiers.js.map +1 -0
- package/dist/canvas/SceneCanvas/useNodeAtPoint.js +26 -0
- package/dist/canvas/SceneCanvas/useNodeAtPoint.js.map +1 -0
- package/dist/canvas/SceneCanvas/useNodeKinds.js +26 -0
- package/dist/canvas/SceneCanvas/useNodeKinds.js.map +1 -0
- package/dist/canvas/SceneCanvas/usePreviewGhostLayer.js +51 -41
- package/dist/canvas/SceneCanvas/usePreviewGhostLayer.js.map +1 -1
- package/dist/canvas/SceneCanvas/useSceneCanvasHandle.js +47 -0
- package/dist/canvas/SceneCanvas/useSceneCanvasHandle.js.map +1 -0
- package/dist/canvas/SceneCanvas/useSceneCanvasLayers.js +66 -0
- package/dist/canvas/SceneCanvas/useSceneCanvasLayers.js.map +1 -0
- package/dist/canvas/SceneCanvas/useSceneChrome.js +59 -0
- package/dist/canvas/SceneCanvas/useSceneChrome.js.map +1 -0
- package/dist/canvas/SceneCanvas/useSceneRedrawSources.js +23 -0
- package/dist/canvas/SceneCanvas/useSceneRedrawSources.js.map +1 -0
- package/dist/canvas/SceneCanvas/useSceneSelectTool.js +65 -101
- package/dist/canvas/SceneCanvas/useSceneSelectTool.js.map +1 -1
- package/dist/canvas/SceneCanvas/useSceneSlotLayers.js +37 -0
- package/dist/canvas/SceneCanvas/useSceneSlotLayers.js.map +1 -0
- package/dist/canvas/SceneCanvas/useSelectionOverlayLayer.js +38 -0
- package/dist/canvas/SceneCanvas/useSelectionOverlayLayer.js.map +1 -0
- package/dist/canvas/SceneCanvas/useViewLayerGate.js +20 -0
- package/dist/canvas/SceneCanvas/useViewLayerGate.js.map +1 -0
- package/dist/canvas/SceneCanvas/useViewportActions.js +9 -1
- package/dist/canvas/SceneCanvas/useViewportActions.js.map +1 -1
- package/dist/canvas/SceneCanvas/worldPointAt.js +8 -0
- package/dist/canvas/SceneCanvas/worldPointAt.js.map +1 -0
- package/dist/canvas/SceneCanvas.js +301 -708
- package/dist/canvas/SceneCanvas.js.map +1 -1
- package/dist/canvas/SceneViewCanvas.js +41 -47
- package/dist/canvas/SceneViewCanvas.js.map +1 -1
- package/dist/canvas/SurfaceCanvas.js +40 -0
- package/dist/canvas/SurfaceCanvas.js.map +1 -0
- package/dist/canvas/adapterDerivedPath.js +26 -0
- package/dist/canvas/adapterDerivedPath.js.map +1 -0
- package/dist/canvas/adapterPickSource.js +34 -0
- package/dist/canvas/adapterPickSource.js.map +1 -0
- package/dist/canvas/affordanceAt.js +12 -2
- package/dist/canvas/affordanceAt.js.map +1 -1
- package/dist/canvas/buildSceneLayer.js +81 -61
- package/dist/canvas/buildSceneLayer.js.map +1 -1
- package/dist/canvas/buildSceneTree.js +56 -34
- package/dist/canvas/buildSceneTree.js.map +1 -1
- package/dist/canvas/canvasRenderer.js +40 -44
- package/dist/canvas/canvasRenderer.js.map +1 -1
- package/dist/canvas/colorOverrides.js.map +1 -1
- package/dist/canvas/copiesAbove.js +27 -0
- package/dist/canvas/copiesAbove.js.map +1 -0
- package/dist/canvas/defaultDrawOne.js +25 -24
- package/dist/canvas/defaultDrawOne.js.map +1 -1
- package/dist/canvas/deps/areaSelect.js +4 -4
- package/dist/canvas/deps/areaSelect.js.map +1 -1
- package/dist/canvas/deps/debug.js.map +1 -1
- package/dist/canvas/deps/editAnchors.js +47 -71
- package/dist/canvas/deps/editAnchors.js.map +1 -1
- package/dist/canvas/deps/geometryProjection.js.map +1 -1
- package/dist/canvas/deps/hitTestArea.js +45 -25
- package/dist/canvas/deps/hitTestArea.js.map +1 -1
- package/dist/canvas/deps/insert.js +149 -104
- package/dist/canvas/deps/insert.js.map +1 -1
- package/dist/canvas/deps/lassoSelect.js +5 -5
- package/dist/canvas/deps/lassoSelect.js.map +1 -1
- package/dist/canvas/deps/layout.js +9 -15
- package/dist/canvas/deps/layout.js.map +1 -1
- package/dist/canvas/deps/poseDescriptor.js +1 -1
- package/dist/canvas/deps/poseDescriptor.js.map +1 -1
- package/dist/canvas/deps/resizePolicy.js.map +1 -1
- package/dist/canvas/deps/slice.js +44 -45
- package/dist/canvas/deps/slice.js.map +1 -1
- package/dist/canvas/deps/textEdit.js +8 -8
- package/dist/canvas/deps/textEdit.js.map +1 -1
- package/dist/canvas/deps/view.js.map +1 -1
- package/dist/canvas/derivedPath.js +69 -43
- package/dist/canvas/derivedPath.js.map +1 -1
- package/dist/canvas/drawEnvelope.js +8 -4
- package/dist/canvas/drawEnvelope.js.map +1 -1
- package/dist/canvas/getNodeAtPoint.js +2 -6
- package/dist/canvas/getNodeAtPoint.js.map +1 -1
- package/dist/canvas/hud.module.js.map +1 -1
- package/dist/canvas/insertPreviewExtent.js +33 -31
- package/dist/canvas/insertPreviewExtent.js.map +1 -1
- package/dist/canvas/layerOrder.js.map +1 -1
- package/dist/canvas/layerSlots.js +6 -1
- package/dist/canvas/layerSlots.js.map +1 -1
- package/dist/canvas/nodeShapes/derivedPainter.js +12 -12
- package/dist/canvas/nodeShapes/derivedPainter.js.map +1 -1
- package/dist/canvas/nodeShapes/imagePainter.js +10 -10
- package/dist/canvas/nodeShapes/imagePainter.js.map +1 -1
- package/dist/canvas/nodeShapes/memo.js.map +1 -1
- package/dist/canvas/nodeShapes/nodePaint.js +34 -23
- package/dist/canvas/nodeShapes/nodePaint.js.map +1 -1
- package/dist/canvas/nodeShapes/pathPainter.js +23 -22
- package/dist/canvas/nodeShapes/pathPainter.js.map +1 -1
- package/dist/canvas/nodeShapes/poseBox.js +6 -6
- package/dist/canvas/nodeShapes/poseBox.js.map +1 -1
- package/dist/canvas/nodeShapes/rectFallbackPainter.js +8 -8
- package/dist/canvas/nodeShapes/rectFallbackPainter.js.map +1 -1
- package/dist/canvas/nodeShapes/shapePainter.js +16 -16
- package/dist/canvas/nodeShapes/shapePainter.js.map +1 -1
- package/dist/canvas/nodeShapes/textPainter.js +1 -1
- package/dist/canvas/nodeShapes/textPainter.js.map +1 -1
- package/dist/canvas/overChildren.js +29 -0
- package/dist/canvas/overChildren.js.map +1 -0
- package/dist/canvas/overlayRoleStrokes.js.map +1 -1
- package/dist/canvas/paintCull.js +6 -8
- package/dist/canvas/paintCull.js.map +1 -1
- package/dist/{features/cursor → canvas}/paintedCursorLayer.js +2 -2
- package/dist/canvas/paintedCursorLayer.js.map +1 -0
- package/dist/canvas/pickReach.js +23 -0
- package/dist/canvas/pickReach.js.map +1 -0
- package/dist/canvas/pickWalk.js +43 -70
- package/dist/canvas/pickWalk.js.map +1 -1
- package/dist/canvas/planeClips.js +18 -19
- package/dist/canvas/planeClips.js.map +1 -1
- package/dist/canvas/poseCascade.js +41 -0
- package/dist/canvas/poseCascade.js.map +1 -0
- package/dist/canvas/poseRotation.js +1 -3
- package/dist/canvas/poseRotation.js.map +1 -1
- package/dist/canvas/rasterReadback.js +22 -0
- package/dist/canvas/rasterReadback.js.map +1 -0
- package/dist/canvas/renderDebugSnapshot.js +12 -12
- package/dist/canvas/renderDebugSnapshot.js.map +1 -1
- package/dist/canvas/renderNeeds.js +3 -3
- package/dist/canvas/renderNeeds.js.map +1 -1
- package/dist/canvas/renderSceneToPixels.js +64 -83
- package/dist/canvas/renderSceneToPixels.js.map +1 -1
- package/dist/canvas/sceneAdapter.js +59 -144
- package/dist/canvas/sceneAdapter.js.map +1 -1
- package/dist/canvas/sceneClipboard.js +1 -1
- package/dist/canvas/sceneClipboard.js.map +1 -1
- package/dist/canvas/sceneLayerPaint.js +4 -4
- package/dist/canvas/sceneLayerPaint.js.map +1 -1
- package/dist/canvas/sceneSlotWiring.js +10 -9
- package/dist/canvas/sceneSlotWiring.js.map +1 -1
- package/dist/canvas/sceneViewRender.js +37 -42
- package/dist/canvas/sceneViewRender.js.map +1 -1
- package/dist/canvas/slopsDebugLayer.js +4 -4
- package/dist/canvas/slopsDebugLayer.js.map +1 -1
- package/dist/canvas/useCanvasRenderer.js +23 -11
- package/dist/canvas/useCanvasRenderer.js.map +1 -1
- package/dist/canvas/useCanvasSurface.js +31 -0
- package/dist/canvas/useCanvasSurface.js.map +1 -0
- package/dist/canvas/useCanvasView.js +51 -44
- package/dist/canvas/useCanvasView.js.map +1 -1
- package/dist/canvas/useFrameLoop.js +11 -12
- package/dist/canvas/useFrameLoop.js.map +1 -1
- package/dist/canvas/useHostAnchor.js +35 -33
- package/dist/canvas/useHostAnchor.js.map +1 -1
- package/dist/canvas/useLateContentRedraw.js +8 -8
- package/dist/canvas/useLateContentRedraw.js.map +1 -1
- package/dist/canvas/useSceneAdapter.js +22 -0
- package/dist/canvas/useSceneAdapter.js.map +1 -0
- package/dist/canvas/useSceneLayerList.js +4 -14
- package/dist/canvas/useSceneLayerList.js.map +1 -1
- package/dist/canvas/useSurfaceInput.js +39 -0
- package/dist/canvas/useSurfaceInput.js.map +1 -0
- package/dist/canvas/useToolCursor.js +29 -0
- package/dist/canvas/useToolCursor.js.map +1 -0
- package/dist/canvas/useViewHelpers.js +46 -85
- package/dist/canvas/useViewHelpers.js.map +1 -1
- package/dist/canvas/viewInputs.js.map +1 -1
- package/dist/canvas/viewRegistry.js +40 -34
- package/dist/canvas/viewRegistry.js.map +1 -1
- package/dist/canvas/watchElementMove.js +43 -0
- package/dist/canvas/watchElementMove.js.map +1 -0
- package/dist/canvas/wrapNodeOutput.js +7 -2
- package/dist/canvas/wrapNodeOutput.js.map +1 -1
- package/dist/clipboard.d.ts +7 -14
- package/dist/{types-B4iJRHC3.d.ts → clone-C0eADtS0.d.ts} +129 -84
- package/dist/clone.d.ts +4 -8
- package/dist/clone.js +0 -2
- package/dist/core/device/targets.js.map +1 -1
- package/dist/core/device/useDeviceProfile.js +13 -13
- package/dist/core/device/useDeviceProfile.js.map +1 -1
- package/dist/{interactions/actions/resize → core/geometry}/autoPoseDescriptor.js +8 -7
- package/dist/core/geometry/autoPoseDescriptor.js.map +1 -0
- package/dist/core/geometry/pathPoseDescriptor.js +88 -0
- package/dist/core/geometry/pathPoseDescriptor.js.map +1 -0
- package/dist/core/geometry/poseDescriptor.js +102 -29
- package/dist/core/geometry/poseDescriptor.js.map +1 -1
- package/dist/core/geometry/regionHit.js +35 -37
- package/dist/core/geometry/regionHit.js.map +1 -1
- package/dist/core/geometry/targetFrame.js +94 -0
- package/dist/core/geometry/targetFrame.js.map +1 -0
- package/dist/core/geometry/unionBounds.js +4 -5
- package/dist/core/geometry/unionBounds.js.map +1 -1
- package/dist/core/layers/backgroundFill.js +31 -0
- package/dist/core/layers/backgroundFill.js.map +1 -0
- package/dist/{features/groups → core/layers}/children.js +2 -4
- package/dist/core/layers/children.js.map +1 -0
- package/dist/{features/focus → core/layers}/gateLayer.js +2 -2
- package/dist/core/layers/gateLayer.js.map +1 -0
- package/dist/core/layers/layerGroup.js +40 -0
- package/dist/core/layers/layerGroup.js.map +1 -0
- package/dist/core/layers/render.js +50 -76
- package/dist/core/layers/render.js.map +1 -1
- package/dist/core/ops/create.js +2 -2
- package/dist/core/ops/create.js.map +1 -1
- package/dist/core/ops/createHistory.js +9 -9
- package/dist/core/ops/createHistory.js.map +1 -1
- package/dist/core/ops/delete.js +19 -23
- package/dist/core/ops/delete.js.map +1 -1
- package/dist/core/ops/reorder/index.js +3 -7
- package/dist/core/ops/reorder/index.js.map +1 -1
- package/dist/core/ops/reorder/setChildOrder.js +2 -4
- package/dist/core/ops/reorder/setChildOrder.js.map +1 -1
- package/dist/core/ops/reparent.js +0 -1
- package/dist/core/ops/reparent.js.map +1 -1
- package/dist/core/ops/slot.js +3 -6
- package/dist/core/ops/slot.js.map +1 -1
- package/dist/core/pages/fitViewToPage.js +15 -0
- package/dist/core/pages/fitViewToPage.js.map +1 -0
- package/dist/core/pages/pages.js +65 -0
- package/dist/core/pages/pages.js.map +1 -0
- package/dist/core/pages/pagesLayer.js +27 -0
- package/dist/core/pages/pagesLayer.js.map +1 -0
- package/dist/core/paint/meshKind.js +16 -0
- package/dist/core/paint/meshKind.js.map +1 -0
- package/dist/{features/meshPaint/lazyKind.js → core/paint/meshKindLazy.js} +104 -93
- package/dist/core/paint/meshKindLazy.js.map +1 -0
- package/dist/core/paint/paintKindEntry.js +8 -0
- package/dist/core/paint/paintKindEntry.js.map +1 -0
- package/dist/core/paint/paintKinds.js +144 -0
- package/dist/core/paint/paintKinds.js.map +1 -0
- package/dist/core/paint/registerMesh.js +7 -0
- package/dist/core/paint/registerMesh.js.map +1 -0
- package/dist/core/scene/NodeProperties.js.map +1 -1
- package/dist/core/scene/NodeRouting.js.map +1 -1
- package/dist/core/scene/arrivalWindow.js +65 -64
- package/dist/core/scene/arrivalWindow.js.map +1 -1
- package/dist/core/scene/boundOps.js +40 -0
- package/dist/core/scene/boundOps.js.map +1 -0
- package/dist/core/scene/composeFrame.js +9 -6
- package/dist/core/scene/composeFrame.js.map +1 -1
- package/dist/core/scene/composePose.js +105 -0
- package/dist/core/scene/composePose.js.map +1 -0
- package/dist/core/scene/depMemo.js +31 -6
- package/dist/core/scene/depMemo.js.map +1 -1
- package/dist/core/scene/derivedPath.js +19 -20
- package/dist/core/scene/derivedPath.js.map +1 -1
- package/dist/core/scene/editMode.js +26 -0
- package/dist/core/scene/editMode.js.map +1 -0
- package/dist/core/scene/effectivePose.js +42 -39
- package/dist/core/scene/effectivePose.js.map +1 -1
- package/dist/core/scene/fieldEdits.js +98 -0
- package/dist/core/scene/fieldEdits.js.map +1 -0
- package/dist/core/scene/historyFacade.js +122 -70
- package/dist/core/scene/historyFacade.js.map +1 -1
- package/dist/core/scene/historyForm.js +6 -0
- package/dist/core/scene/historyForm.js.map +1 -0
- package/dist/core/scene/kitOps.js +83 -71
- package/dist/core/scene/kitOps.js.map +1 -1
- package/dist/core/scene/kitRegistry.js.map +1 -1
- package/dist/core/scene/layerStack.js +105 -12
- package/dist/core/scene/layerStack.js.map +1 -1
- package/dist/core/scene/layoutPass.js +58 -59
- package/dist/core/scene/layoutPass.js.map +1 -1
- package/dist/{features/groups → core/scene}/nestedHit.js +3 -3
- package/dist/core/scene/nestedHit.js.map +1 -0
- package/dist/core/scene/nodeFnFields.js +16 -9
- package/dist/core/scene/nodeFnFields.js.map +1 -1
- package/dist/core/scene/nodeMemo.js.map +1 -1
- package/dist/core/scene/nodeStore.js +72 -71
- package/dist/core/scene/nodeStore.js.map +1 -1
- package/dist/core/scene/notifier.js +37 -0
- package/dist/core/scene/notifier.js.map +1 -0
- package/dist/core/scene/opTable.js +50 -0
- package/dist/core/scene/opTable.js.map +1 -0
- package/dist/core/scene/outerOps.js +67 -0
- package/dist/core/scene/outerOps.js.map +1 -0
- package/dist/core/scene/poseHold.js +39 -0
- package/dist/core/scene/poseHold.js.map +1 -0
- package/dist/core/scene/poseOverrides.js +44 -36
- package/dist/core/scene/poseOverrides.js.map +1 -1
- package/dist/core/scene/poseSnapshot.js.map +1 -1
- package/dist/core/scene/reconcileSpecs.js +4 -3
- package/dist/core/scene/reconcileSpecs.js.map +1 -1
- package/dist/core/scene/recorder.js +86 -0
- package/dist/core/scene/recorder.js.map +1 -0
- package/dist/core/scene/renderOrder.js.map +1 -1
- package/dist/core/scene/scene.js +81 -690
- package/dist/core/scene/scene.js.map +1 -1
- package/dist/core/scene/sceneEdits.js +58 -0
- package/dist/core/scene/sceneEdits.js.map +1 -0
- package/dist/core/scene/sceneMutators.js +49 -0
- package/dist/core/scene/sceneMutators.js.map +1 -0
- package/dist/core/scene/scenePoseAdapter.js +16 -0
- package/dist/core/scene/scenePoseAdapter.js.map +1 -0
- package/dist/core/scene/sceneRecording.js +91 -0
- package/dist/core/scene/sceneRecording.js.map +1 -0
- package/dist/core/scene/sceneSelection.js +28 -0
- package/dist/core/scene/sceneSelection.js.map +1 -0
- package/dist/core/scene/sceneState.js +49 -0
- package/dist/core/scene/sceneState.js.map +1 -0
- package/dist/core/scene/serialization.js +8 -5
- package/dist/core/scene/serialization.js.map +1 -1
- package/dist/core/scene/staleReplay.js +51 -0
- package/dist/core/scene/staleReplay.js.map +1 -0
- package/dist/core/scene/statedFields.js +9 -0
- package/dist/core/scene/statedFields.js.map +1 -0
- package/dist/core/scene/treeEdits.js +127 -0
- package/dist/core/scene/treeEdits.js.map +1 -0
- package/dist/core/scene/treeReads.js +26 -0
- package/dist/core/scene/treeReads.js.map +1 -0
- package/dist/core/scene/types.js.map +1 -1
- package/dist/{features/groups → core/scene}/unionOfChildren.js +3 -3
- package/dist/core/scene/unionOfChildren.js.map +1 -0
- package/dist/core/scene/unitScopes.js +13 -0
- package/dist/core/scene/unitScopes.js.map +1 -0
- package/dist/core/scene/useScene.js.map +1 -1
- package/dist/core/selection/readOnlySelection.js +32 -0
- package/dist/core/selection/readOnlySelection.js.map +1 -0
- package/dist/core/selection/usePublishSceneSelection.js +26 -0
- package/dist/core/selection/usePublishSceneSelection.js.map +1 -0
- package/dist/core/selection/useSelection.js +34 -25
- package/dist/core/selection/useSelection.js.map +1 -1
- package/dist/core/shapeKinds.js.map +1 -1
- package/dist/core/stylus/stylus.js.map +1 -1
- package/dist/core/stylus/usePointerStylus.js.map +1 -1
- package/dist/core/usePaintKinds.js +1 -1
- package/dist/core/usePaintKinds.js.map +1 -1
- package/dist/core/viewport/clientToWorld.js.map +1 -1
- package/dist/core/viewport/fitViewToBounds.js.map +1 -1
- package/dist/core/viewport/parallax.js.map +1 -1
- package/dist/core/viewport/screenSlop.js +11 -11
- package/dist/core/viewport/screenSlop.js.map +1 -1
- package/dist/core/viewport/useCanvasSize.js.map +1 -1
- package/dist/core/viewport/useDecayLoop.js +31 -33
- package/dist/core/viewport/useDecayLoop.js.map +1 -1
- package/dist/core/viewport/useNodeOverlayFrame.js +84 -0
- package/dist/core/viewport/useNodeOverlayFrame.js.map +1 -0
- package/dist/core/viewport/useViewAnimation.js +113 -53
- package/dist/core/viewport/useViewAnimation.js.map +1 -1
- package/dist/core/viewport/view.js +14 -11
- package/dist/core/viewport/view.js.map +1 -1
- package/dist/core/viewport/wheelHandler.js.map +1 -1
- package/dist/core/viewport/zoomAt.js +11 -2
- package/dist/core/viewport/zoomAt.js.map +1 -1
- package/dist/{cornerHandles-CtCb8a3G.d.ts → cornerHandles-BSKbyuvQ.d.ts} +11 -24
- package/dist/debug/createDebugOverlayLayer.js +100 -100
- package/dist/debug/createDebugOverlayLayer.js.map +1 -1
- package/dist/debug/createDebugSink.js.map +1 -1
- package/dist/debug/frameStats.js.map +1 -1
- package/dist/debug/useDebugSink.js +52 -0
- package/dist/debug/useDebugSink.js.map +1 -0
- package/dist/features/chrome-caps/buildChromeCtx.js.map +1 -1
- package/dist/features/chrome-caps/conditions.js.map +1 -1
- package/dist/features/chrome-caps/defaults.js.map +1 -1
- package/dist/features/chrome-caps/resolve.js.map +1 -1
- package/dist/features/chrome-caps/useChromeCaps.js +54 -0
- package/dist/features/chrome-caps/useChromeCaps.js.map +1 -0
- package/dist/features/chrome-caps/useHoverTracking.js.map +1 -1
- package/dist/features/ingestion/contentHandlers.js +25 -19
- package/dist/features/ingestion/contentHandlers.js.map +1 -1
- package/dist/features/ingestion/imageHandler.js +21 -24
- package/dist/features/ingestion/imageHandler.js.map +1 -1
- package/dist/features/ingestion/openFilePicker.js.map +1 -1
- package/dist/features/ingestion/placement.js +16 -0
- package/dist/features/ingestion/placement.js.map +1 -0
- package/dist/features/ingestion/svgHandler.js +5 -0
- package/dist/features/ingestion/svgHandler.js.map +1 -1
- package/dist/features/ingestion/textHandler.js +28 -0
- package/dist/features/ingestion/textHandler.js.map +1 -0
- package/dist/features/ingestion/useCanvasIngestion.js +48 -0
- package/dist/features/ingestion/useCanvasIngestion.js.map +1 -0
- package/dist/features/ingestion/weaselJsonHandler.js +5 -0
- package/dist/features/ingestion/weaselJsonHandler.js.map +1 -1
- package/dist/features/longPress/longPressFeedback.js.map +1 -1
- package/dist/features/modes/modeLayers.js +7 -7
- package/dist/features/modes/modeLayers.js.map +1 -1
- package/dist/features/paths/editablePath.js +63 -0
- package/dist/features/paths/editablePath.js.map +1 -0
- package/dist/features/paths/index.js +9 -16
- package/dist/features/paths/pathEditState.js +41 -0
- package/dist/features/paths/pathEditState.js.map +1 -0
- package/dist/features/paths/pathEditingOverlayLayer.js +36 -38
- package/dist/features/paths/pathEditingOverlayLayer.js.map +1 -1
- package/dist/features/paths/pathLayer.js +3 -2
- package/dist/features/paths/pathLayer.js.map +1 -1
- package/dist/features/paths/penPreviewLayer.js +86 -88
- package/dist/features/paths/penPreviewLayer.js.map +1 -1
- package/dist/features/paths/shapeGenerator.js +89 -0
- package/dist/features/paths/shapeGenerator.js.map +1 -0
- package/dist/features/paths/usePathEdit.js +34 -0
- package/dist/features/paths/usePathEdit.js.map +1 -0
- package/dist/features/poseRun/usePoseRun.js +44 -57
- package/dist/features/poseRun/usePoseRun.js.map +1 -1
- package/dist/features/selection/overlay.js +170 -178
- package/dist/features/selection/overlay.js.map +1 -1
- package/dist/features/text/index.js +6 -0
- package/dist/features/text/textLayer.js +1 -1
- package/dist/features/text/textLayer.js.map +1 -1
- package/dist/features/text/useSceneTextEdit.js +119 -88
- package/dist/features/text/useSceneTextEdit.js.map +1 -1
- package/dist/features/viewports/viewResolver.js +28 -24
- package/dist/features/viewports/viewResolver.js.map +1 -1
- package/dist/features/viewports/viewportLayer.js +25 -36
- package/dist/features/viewports/viewportLayer.js.map +1 -1
- package/dist/icons/SliceIcon.js +24 -0
- package/dist/icons/SliceIcon.js.map +1 -0
- package/dist/index.d.ts +5200 -8777
- package/dist/index.js +284 -320
- package/dist/input/keyState.js +14 -14
- package/dist/interactions/actions/actionShortcuts.js.map +1 -1
- package/dist/interactions/actions/{defaults/align.js → align/action.js} +15 -16
- package/dist/interactions/actions/align/action.js.map +1 -0
- package/dist/interactions/actions/align/align.js +24 -24
- package/dist/interactions/actions/align/align.js.map +1 -1
- package/dist/interactions/actions/booleans/action.js +65 -0
- package/dist/interactions/actions/booleans/action.js.map +1 -0
- package/dist/interactions/actions/booleans/booleans.js +74 -83
- package/dist/interactions/actions/booleans/booleans.js.map +1 -1
- package/dist/interactions/actions/booleans/operands.js +40 -0
- package/dist/interactions/actions/booleans/operands.js.map +1 -0
- package/dist/interactions/actions/booleans/pieces.js +45 -0
- package/dist/interactions/actions/booleans/pieces.js.map +1 -0
- package/dist/interactions/actions/booleans/placement.js +24 -0
- package/dist/interactions/actions/booleans/placement.js.map +1 -0
- package/dist/interactions/actions/booleans/useBooleans.js +11 -9
- package/dist/interactions/actions/booleans/useBooleans.js.map +1 -1
- package/dist/interactions/actions/booleans/useBooleansAdapter.js.map +1 -1
- package/dist/interactions/actions/{defaults/clipboard.js → clipboard/action.js} +19 -19
- package/dist/interactions/actions/clipboard/action.js.map +1 -0
- package/dist/interactions/actions/clipboard/clipboardOps.js +15 -15
- package/dist/interactions/actions/clipboard/clipboardOps.js.map +1 -1
- package/dist/interactions/actions/clipboard/wireFormat.js.map +1 -1
- package/dist/interactions/actions/clone/action.js +103 -0
- package/dist/interactions/actions/clone/action.js.map +1 -0
- package/dist/interactions/actions/clone/behaviors.js +52 -0
- package/dist/interactions/actions/clone/behaviors.js.map +1 -0
- package/dist/interactions/actions/defaultCommitAdapter.js +10 -37
- package/dist/interactions/actions/defaultCommitAdapter.js.map +1 -1
- package/dist/interactions/actions/defaults/anchorEditing.js +69 -74
- package/dist/interactions/actions/defaults/anchorEditing.js.map +1 -1
- package/dist/interactions/actions/defaults/anchorHandles.js +42 -0
- package/dist/interactions/actions/defaults/anchorHandles.js.map +1 -0
- package/dist/interactions/actions/defaults/anchorJoin.js +92 -0
- package/dist/interactions/actions/defaults/anchorJoin.js.map +1 -0
- package/dist/interactions/actions/defaults/areaSelect.js.map +1 -1
- package/dist/interactions/actions/defaults/bendSegment.js +46 -0
- package/dist/interactions/actions/defaults/bendSegment.js.map +1 -0
- package/dist/interactions/actions/defaults/cancelGesture.js.map +1 -1
- package/dist/interactions/actions/defaults/clearSelection.js.map +1 -1
- package/dist/interactions/actions/defaults/copySubtree.js +1 -1
- package/dist/interactions/actions/defaults/copySubtree.js.map +1 -1
- package/dist/interactions/actions/defaults/createPaintAction.js.map +1 -1
- package/dist/interactions/actions/defaults/delete.js.map +1 -1
- package/dist/interactions/actions/defaults/duplicate.js +36 -21
- package/dist/interactions/actions/defaults/duplicate.js.map +1 -1
- package/dist/interactions/actions/defaults/enterPathEdit.js +19 -7
- package/dist/interactions/actions/defaults/enterPathEdit.js.map +1 -1
- package/dist/interactions/actions/defaults/enterTextEdit.js.map +1 -1
- package/dist/interactions/actions/defaults/group.js +35 -40
- package/dist/interactions/actions/defaults/group.js.map +1 -1
- package/dist/interactions/actions/defaults/icons/anchorIcons.js +75 -0
- package/dist/interactions/actions/defaults/icons/anchorIcons.js.map +1 -0
- package/dist/interactions/actions/defaults/icons/booleanIcons.js +24 -1
- package/dist/interactions/actions/defaults/icons/booleanIcons.js.map +1 -1
- package/dist/interactions/actions/defaults/icons/editIcons.js +35 -8
- package/dist/interactions/actions/defaults/icons/editIcons.js.map +1 -1
- package/dist/interactions/actions/defaults/icons/outlineIcons.js +39 -1
- package/dist/interactions/actions/defaults/icons/outlineIcons.js.map +1 -1
- package/dist/interactions/actions/defaults/ingest.js +19 -15
- package/dist/interactions/actions/defaults/ingest.js.map +1 -1
- package/dist/interactions/actions/defaults/insertPathAnchor.js +18 -34
- package/dist/interactions/actions/defaults/insertPathAnchor.js.map +1 -1
- package/dist/interactions/actions/defaults/nudge.js +43 -39
- package/dist/interactions/actions/defaults/nudge.js.map +1 -1
- package/dist/interactions/actions/defaults/pinchZoom.js +29 -29
- package/dist/interactions/actions/defaults/pinchZoom.js.map +1 -1
- package/dist/interactions/actions/defaults/requiresSelection.js.map +1 -1
- package/dist/interactions/actions/defaults/segmentUnder.js +22 -0
- package/dist/interactions/actions/defaults/segmentUnder.js.map +1 -0
- package/dist/interactions/actions/defaults/setFill.js +9 -3
- package/dist/interactions/actions/defaults/setFill.js.map +1 -1
- package/dist/interactions/actions/defaults/setFillOpacity.js +4 -1
- package/dist/interactions/actions/defaults/setFillOpacity.js.map +1 -1
- package/dist/interactions/actions/defaults/setStroke.js.map +1 -1
- package/dist/interactions/actions/defaults/sliceOps.js +20 -22
- package/dist/interactions/actions/defaults/sliceOps.js.map +1 -1
- package/dist/interactions/actions/defaults/toolActivate.js.map +1 -1
- package/dist/interactions/actions/defaults/toolResetToDefault.js.map +1 -1
- package/dist/interactions/actions/defaults/viewportDragPan.js +1 -1
- package/dist/interactions/actions/defaults/viewportDragPan.js.map +1 -1
- package/dist/interactions/actions/defaults/viewportWheelPan.js.map +1 -1
- package/dist/interactions/actions/defaults/viewportZoom.js +82 -79
- package/dist/interactions/actions/defaults/viewportZoom.js.map +1 -1
- package/dist/interactions/actions/{defaults/distribute.js → distribute/action.js} +18 -19
- package/dist/interactions/actions/distribute/action.js.map +1 -0
- package/dist/interactions/actions/distribute/distribute.js +15 -15
- package/dist/interactions/actions/distribute/distribute.js.map +1 -1
- package/dist/interactions/actions/edit-anchors/action.js +101 -0
- package/dist/interactions/actions/edit-anchors/action.js.map +1 -0
- package/dist/interactions/actions/edit-anchors/geometry.js +2 -4
- package/dist/interactions/actions/edit-anchors/geometry.js.map +1 -1
- package/dist/interactions/actions/edit-anchors/preview.js +26 -0
- package/dist/interactions/actions/edit-anchors/preview.js.map +1 -0
- package/dist/interactions/actions/edit-anchors/symmetry.js +11 -0
- package/dist/interactions/actions/edit-anchors/symmetry.js.map +1 -0
- package/dist/interactions/actions/flip/action.js +124 -0
- package/dist/interactions/actions/flip/action.js.map +1 -0
- package/dist/interactions/actions/flip/helpers.js +1 -1
- package/dist/interactions/actions/flip/helpers.js.map +1 -1
- package/dist/interactions/actions/geometryProjection.js.map +1 -1
- package/dist/interactions/actions/gestureFrames.js +18 -0
- package/dist/interactions/actions/gestureFrames.js.map +1 -0
- package/dist/interactions/actions/gestureLifecycle.js +47 -20
- package/dist/interactions/actions/gestureLifecycle.js.map +1 -1
- package/dist/interactions/actions/insert/action.js +79 -0
- package/dist/interactions/actions/insert/action.js.map +1 -0
- package/dist/interactions/actions/insert/commit.js +28 -0
- package/dist/interactions/actions/insert/commit.js.map +1 -0
- package/dist/interactions/actions/insert/extras.js +65 -0
- package/dist/interactions/actions/insert/extras.js.map +1 -0
- package/dist/interactions/actions/insert/frame.js +55 -0
- package/dist/interactions/actions/insert/frame.js.map +1 -0
- package/dist/interactions/actions/insert/geometry.js +35 -0
- package/dist/interactions/actions/insert/geometry.js.map +1 -0
- package/dist/interactions/actions/insert/repositionAction.js +31 -0
- package/dist/interactions/actions/insert/repositionAction.js.map +1 -0
- package/dist/interactions/actions/insert/rotateAction.js +21 -0
- package/dist/interactions/actions/insert/rotateAction.js.map +1 -0
- package/dist/interactions/actions/insert/session.js +59 -0
- package/dist/interactions/actions/insert/session.js.map +1 -0
- package/dist/interactions/actions/insert/shape.js +34 -0
- package/dist/interactions/actions/insert/shape.js.map +1 -0
- package/dist/interactions/actions/lasso-select/action.js +143 -0
- package/dist/interactions/actions/lasso-select/action.js.map +1 -0
- package/dist/interactions/actions/move/action.js +91 -0
- package/dist/interactions/actions/move/action.js.map +1 -0
- package/dist/interactions/actions/move/behaviors/layoutDrop.js +51 -0
- package/dist/interactions/actions/move/behaviors/layoutDrop.js.map +1 -0
- package/dist/interactions/actions/move/behaviors/reparentOnDrop.js +15 -0
- package/dist/interactions/actions/move/behaviors/reparentOnDrop.js.map +1 -0
- package/dist/interactions/actions/move/behaviors/snapToContainer.js +35 -28
- package/dist/interactions/actions/move/behaviors/snapToContainer.js.map +1 -1
- package/dist/interactions/actions/move/capture.js +108 -0
- package/dist/interactions/actions/move/capture.js.map +1 -0
- package/dist/interactions/actions/move/commit/index.js +41 -0
- package/dist/interactions/actions/move/commit/index.js.map +1 -0
- package/dist/interactions/actions/move/commit/layoutDrop.js +44 -0
- package/dist/interactions/actions/move/commit/layoutDrop.js.map +1 -0
- package/dist/interactions/actions/move/commit/layoutRelease.js +100 -0
- package/dist/interactions/actions/move/commit/layoutRelease.js.map +1 -0
- package/dist/interactions/actions/move/commit/rebase.js +18 -0
- package/dist/interactions/actions/move/commit/rebase.js.map +1 -0
- package/dist/interactions/actions/move/commit/reparent.js +65 -0
- package/dist/interactions/actions/move/commit/reparent.js.map +1 -0
- package/dist/interactions/actions/move/delta.js +51 -0
- package/dist/interactions/actions/move/delta.js.map +1 -0
- package/dist/interactions/actions/move/frame.js +47 -0
- package/dist/interactions/actions/move/frame.js.map +1 -0
- package/dist/interactions/actions/move/gestureAdapter.js +15 -40
- package/dist/interactions/actions/move/gestureAdapter.js.map +1 -1
- package/dist/interactions/actions/move/landedDescendants.js +8 -8
- package/dist/interactions/actions/move/layout/container.js +94 -0
- package/dist/interactions/actions/move/layout/container.js.map +1 -0
- package/dist/interactions/actions/move/layout/dragged.js +58 -0
- package/dist/interactions/actions/move/layout/dragged.js.map +1 -0
- package/dist/interactions/actions/move/layout/dropPass.js +122 -0
- package/dist/interactions/actions/move/layout/dropPass.js.map +1 -0
- package/dist/interactions/actions/move/layout/exits.js +38 -0
- package/dist/interactions/actions/move/layout/exits.js.map +1 -0
- package/dist/interactions/actions/move/layout/glide.js +48 -0
- package/dist/interactions/actions/move/layout/glide.js.map +1 -0
- package/dist/interactions/actions/move/session.js +63 -0
- package/dist/interactions/actions/move/session.js.map +1 -0
- package/dist/interactions/actions/move/translate.js +61 -0
- package/dist/interactions/actions/move/translate.js.map +1 -0
- package/dist/interactions/actions/outlines/createOutlines.js +17 -64
- package/dist/interactions/actions/outlines/createOutlines.js.map +1 -1
- package/dist/interactions/actions/outlines/createOutlinesAction.js +51 -0
- package/dist/interactions/actions/outlines/createOutlinesAction.js.map +1 -0
- package/dist/interactions/actions/outlines/outlineStroke.js +72 -0
- package/dist/interactions/actions/outlines/outlineStroke.js.map +1 -0
- package/dist/interactions/actions/outlines/outlineStrokeAction.js +37 -0
- package/dist/interactions/actions/outlines/outlineStrokeAction.js.map +1 -0
- package/dist/interactions/actions/outlines/replaceWithPaths.js +54 -0
- package/dist/interactions/actions/outlines/replaceWithPaths.js.map +1 -0
- package/dist/interactions/actions/outlines/strokeRegion.js +27 -0
- package/dist/interactions/actions/outlines/strokeRegion.js.map +1 -0
- package/dist/interactions/actions/pathCommands/cutJoin.js +102 -0
- package/dist/interactions/actions/pathCommands/cutJoin.js.map +1 -0
- package/dist/interactions/actions/pathCommands/livePathEdit.js +64 -0
- package/dist/interactions/actions/pathCommands/livePathEdit.js.map +1 -0
- package/dist/interactions/actions/pathCommands/pathNodes.js +99 -0
- package/dist/interactions/actions/pathCommands/pathNodes.js.map +1 -0
- package/dist/interactions/actions/pathCommands/simplifyOffset.js +42 -0
- package/dist/interactions/actions/pathCommands/simplifyOffset.js.map +1 -0
- package/dist/interactions/actions/planeInput.js.map +1 -1
- package/dist/interactions/actions/pointerState.js +12 -0
- package/dist/interactions/actions/pointerState.js.map +1 -0
- package/dist/interactions/actions/poseDescriptorDep.js +1 -1
- package/dist/interactions/actions/poseDescriptorDep.js.map +1 -1
- package/dist/interactions/actions/poseFrame.js +26 -26
- package/dist/interactions/actions/poseFrame.js.map +1 -1
- package/dist/interactions/actions/resize/action.js +66 -0
- package/dist/interactions/actions/resize/action.js.map +1 -0
- package/dist/interactions/actions/resize/behaviors/lockAspect.js.map +1 -1
- package/dist/interactions/actions/resize/boxFrame.js +16 -0
- package/dist/interactions/actions/resize/boxFrame.js.map +1 -0
- package/dist/interactions/actions/resize/capture.js +85 -0
- package/dist/interactions/actions/resize/capture.js.map +1 -0
- package/dist/interactions/actions/resize/commit.js +69 -0
- package/dist/interactions/actions/resize/commit.js.map +1 -0
- package/dist/interactions/actions/resize/frame.js +88 -0
- package/dist/interactions/actions/resize/frame.js.map +1 -0
- package/dist/interactions/actions/resize/pointSnap.js +111 -0
- package/dist/interactions/actions/resize/pointSnap.js.map +1 -0
- package/dist/interactions/actions/resize/replay.js +47 -0
- package/dist/interactions/actions/resize/replay.js.map +1 -0
- package/dist/interactions/actions/resize/ruleBounds.js +9 -0
- package/dist/interactions/actions/resize/ruleBounds.js.map +1 -0
- package/dist/interactions/actions/resize/session.js +63 -0
- package/dist/interactions/actions/resize/session.js.map +1 -0
- package/dist/interactions/actions/resolveOverlays.js +2 -1
- package/dist/interactions/actions/resolveOverlays.js.map +1 -1
- package/dist/interactions/actions/resolvePreviews.js.map +1 -1
- package/dist/interactions/actions/rotate/action.js +71 -0
- package/dist/interactions/actions/rotate/action.js.map +1 -0
- package/dist/interactions/actions/rotate/behaviors/index.js +7 -0
- package/dist/interactions/actions/rotate/behaviors/index.js.map +1 -0
- package/dist/interactions/actions/rotate/behaviors/snapRotation.js +12 -0
- package/dist/interactions/actions/rotate/behaviors/snapRotation.js.map +1 -0
- package/dist/interactions/actions/rotate/commit.js +40 -0
- package/dist/interactions/actions/rotate/commit.js.map +1 -0
- package/dist/interactions/actions/rotate/frame.js +65 -0
- package/dist/interactions/actions/rotate/frame.js.map +1 -0
- package/dist/interactions/actions/rotate/handle.js +12 -12
- package/dist/interactions/actions/rotate/handle.js.map +1 -1
- package/dist/interactions/actions/rotate/replay.js +22 -0
- package/dist/interactions/actions/rotate/replay.js.map +1 -0
- package/dist/interactions/actions/rotate/session.js +102 -0
- package/dist/interactions/actions/rotate/session.js.map +1 -0
- package/dist/interactions/actions/spatialReference.js.map +1 -1
- package/dist/interactions/actions/transform-again/action.js +63 -0
- package/dist/interactions/actions/transform-again/action.js.map +1 -0
- package/dist/interactions/actions/transform-again/memory.js +35 -0
- package/dist/interactions/actions/transform-again/memory.js.map +1 -0
- package/dist/interactions/actions/useStandardActions.js +84 -61
- package/dist/interactions/actions/useStandardActions.js.map +1 -1
- package/dist/interactions/gestures/pointerDrag/pointerDrag.js +61 -42
- package/dist/interactions/gestures/pointerDrag/pointerDrag.js.map +1 -1
- package/dist/interactions/gestures/shared/originProjection.js +1 -1
- package/dist/interactions/gestures/shared/originProjection.js.map +1 -1
- package/dist/interactions/gestures/shared/screenTolerance.js +8 -2
- package/dist/interactions/gestures/shared/screenTolerance.js.map +1 -1
- package/dist/interactions/gestures/shared/snap.js.map +1 -1
- package/dist/math-CYUjoyyU.d.ts +33 -0
- package/dist/math.d.ts +5 -2
- package/dist/math.js +6 -6
- package/dist/mesh.d.ts +4 -268
- package/dist/mesh.js +3 -7
- package/dist/move.d.ts +6 -4
- package/dist/{originProjection-gHnOup4e.d.ts → originProjection-CoNVpITV.d.ts} +1 -1
- package/dist/patterns-builtin.d.ts +1 -118
- package/dist/patterns-builtin.js +2 -3
- package/dist/poseDescriptor-Bqk-11Rl.d.ts +73 -0
- package/dist/renderer.d.ts +1 -92
- package/dist/renderer.js +2 -19
- package/dist/resize.d.ts +11 -22
- package/dist/resize.js +1 -1
- package/dist/style.css +1 -1
- package/dist/test-hook/install.js.map +1 -1
- package/dist/test-hook/useTestHook.js +22 -0
- package/dist/test-hook/useTestHook.js.map +1 -0
- package/dist/test-seams-D0pyV3pR.d.ts +149 -0
- package/dist/test-seams.d.ts +4 -4
- package/dist/test-seams.js +2 -2
- package/dist/tools/builtin/bone/boneActions.js +130 -0
- package/dist/tools/builtin/bone/boneActions.js.map +1 -0
- package/dist/tools/builtin/bone/boneOverlay.js +58 -0
- package/dist/tools/builtin/bone/boneOverlay.js.map +1 -0
- package/dist/tools/builtin/bone/placedRig.js +24 -0
- package/dist/tools/builtin/bone/placedRig.js.map +1 -0
- package/dist/tools/builtin/bone/rigEditState.js +21 -0
- package/dist/tools/builtin/bone/rigEditState.js.map +1 -0
- package/dist/tools/builtin/bone/useBoneTool.js +98 -0
- package/dist/tools/builtin/bone/useBoneTool.js.map +1 -0
- package/dist/tools/builtin/ellipse/useEllipseTool.js +16 -15
- package/dist/tools/builtin/ellipse/useEllipseTool.js.map +1 -1
- package/dist/tools/builtin/eyedropper/useEyedropperTool.js.map +1 -1
- package/dist/tools/builtin/hand/useHandTool.js.map +1 -1
- package/dist/tools/builtin/image/useImageTool.js.map +1 -1
- package/dist/tools/builtin/lasso/useLassoTool.js.map +1 -1
- package/dist/tools/builtin/line/useLineTool.js +16 -15
- package/dist/tools/builtin/line/useLineTool.js.map +1 -1
- package/dist/tools/builtin/pen/usePenTool.js +162 -164
- package/dist/tools/builtin/pen/usePenTool.js.map +1 -1
- package/dist/tools/builtin/pencil/usePencilTool.js.map +1 -1
- package/dist/tools/builtin/pickTopMostHit.js +11 -14
- package/dist/tools/builtin/pickTopMostHit.js.map +1 -1
- package/dist/tools/builtin/polygon/usePolygonTool.js +17 -15
- package/dist/tools/builtin/polygon/usePolygonTool.js.map +1 -1
- package/dist/tools/builtin/rect/useRectTool.js +15 -14
- package/dist/tools/builtin/rect/useRectTool.js.map +1 -1
- package/dist/tools/builtin/select/adapterPointQuery.js +40 -0
- package/dist/tools/builtin/select/adapterPointQuery.js.map +1 -0
- package/dist/tools/builtin/select/selectionContributions.js +5 -5
- package/dist/tools/builtin/select/selectionContributions.js.map +1 -1
- package/dist/tools/builtin/select/useSelectTool.js +44 -71
- package/dist/tools/builtin/select/useSelectTool.js.map +1 -1
- package/dist/tools/builtin/shared/pointerFollower.js.map +1 -1
- package/dist/tools/builtin/slice/useSliceTool.js +69 -72
- package/dist/tools/builtin/slice/useSliceTool.js.map +1 -1
- package/dist/tools/builtin/star/useStarTool.js +18 -16
- package/dist/tools/builtin/star/useStarTool.js.map +1 -1
- package/dist/tools/builtin/text/useTextTool.js +10 -2
- package/dist/tools/builtin/text/useTextTool.js.map +1 -1
- package/dist/tools/builtin/weight/useWeightTool.js +77 -0
- package/dist/tools/builtin/weight/useWeightTool.js.map +1 -0
- package/dist/tools/builtin/weight/weightActions.js +112 -0
- package/dist/tools/builtin/weight/weightActions.js.map +1 -0
- package/dist/tools/builtin/weight/weightOverlay.js +61 -0
- package/dist/tools/builtin/weight/weightOverlay.js.map +1 -0
- package/dist/tools/overlayBinding.js.map +1 -1
- package/dist/tools/useKeybindings.js +20 -14
- package/dist/tools/useKeybindings.js.map +1 -1
- package/dist/{types-k-5Oqh-U.d.ts → types-DBbbCy0i.d.ts} +103 -176
- package/dist/util/paint.js +1 -1
- package/dist/util/paint.js.map +1 -1
- package/dist/version.js +1 -1
- package/package.json +26 -21
- package/dist/animation/colorHelpers.js +0 -135
- package/dist/animation/colorHelpers.js.map +0 -1
- package/dist/animation/colorRegistry.js +0 -37
- package/dist/animation/colorRegistry.js.map +0 -1
- package/dist/animation/engine/axes.js +0 -36
- package/dist/animation/engine/axes.js.map +0 -1
- package/dist/animation/engine/codec.js +0 -170
- package/dist/animation/engine/codec.js.map +0 -1
- package/dist/animation/engine/integrator.js +0 -12
- package/dist/animation/engine/integrator.js.map +0 -1
- package/dist/animation/loop.js +0 -60
- package/dist/animation/loop.js.map +0 -1
- package/dist/animation/observe.js +0 -23
- package/dist/animation/observe.js.map +0 -1
- package/dist/animation/rig/blendPoses.js +0 -43
- package/dist/animation/rig/blendPoses.js.map +0 -1
- package/dist/animation/rig/mirrorPose.js +0 -19
- package/dist/animation/rig/mirrorPose.js.map +0 -1
- package/dist/animation/rig/resolveSkeleton.js +0 -33
- package/dist/animation/rig/resolveSkeleton.js.map +0 -1
- package/dist/animation/rig/solveIk.js +0 -103
- package/dist/animation/rig/solveIk.js.map +0 -1
- package/dist/animation/rig/types.js +0 -12
- package/dist/animation/rig/types.js.map +0 -1
- package/dist/animation/slew.js +0 -27
- package/dist/animation/slew.js.map +0 -1
- package/dist/animation/stagger.js +0 -146
- package/dist/animation/stagger.js.map +0 -1
- package/dist/animation/timeline/booking.js +0 -114
- package/dist/animation/timeline/booking.js.map +0 -1
- package/dist/animation/timeline/createTimeline.js +0 -125
- package/dist/animation/timeline/createTimeline.js.map +0 -1
- package/dist/animation/timeline/sampleTrack.js +0 -79
- package/dist/animation/timeline/sampleTrack.js.map +0 -1
- package/dist/animation/useAnimator.js +0 -388
- package/dist/animation/useAnimator.js.map +0 -1
- package/dist/autoPoseDescriptor-Ct7yqivU.d.ts +0 -108
- package/dist/builtins-DPcdghtB.d.ts +0 -1223
- package/dist/canvas/MinimapCanvas.js +0 -140
- package/dist/canvas/MinimapCanvas.js.map +0 -1
- package/dist/canvas/deps/poseComposition.js +0 -11
- package/dist/canvas/deps/poseComposition.js.map +0 -1
- package/dist/canvas/minimapMath.js +0 -82
- package/dist/canvas/minimapMath.js.map +0 -1
- package/dist/canvas/toolPreview.js +0 -39
- package/dist/canvas/toolPreview.js.map +0 -1
- package/dist/core/adapters/arrayAdapter.js +0 -94
- package/dist/core/adapters/arrayAdapter.js.map +0 -1
- package/dist/core/adapters/useArrayAdapter.js +0 -13
- package/dist/core/adapters/useArrayAdapter.js.map +0 -1
- package/dist/core/fillInPoseFrame.js +0 -102
- package/dist/core/fillInPoseFrame.js.map +0 -1
- package/dist/core/geometry/poseFrame.js +0 -44
- package/dist/core/geometry/poseFrame.js.map +0 -1
- package/dist/core/geometry/poseRotation.js +0 -58
- package/dist/core/geometry/poseRotation.js.map +0 -1
- package/dist/core/gradient.js +0 -136
- package/dist/core/gradient.js.map +0 -1
- package/dist/core/markerInset.js +0 -24
- package/dist/core/markerInset.js.map +0 -1
- package/dist/core/mixed.js +0 -6
- package/dist/core/mixed.js.map +0 -1
- package/dist/core/paintKinds.js +0 -156
- package/dist/core/paintKinds.js.map +0 -1
- package/dist/core/scene/pickability.js +0 -6
- package/dist/core/scene/pickability.js.map +0 -1
- package/dist/core/strokeMarkerShapes.js +0 -139
- package/dist/core/strokeMarkerShapes.js.map +0 -1
- package/dist/core/strokeMarkers.js +0 -28
- package/dist/core/strokeMarkers.js.map +0 -1
- package/dist/core/viewport/meanScale.js +0 -8
- package/dist/core/viewport/meanScale.js.map +0 -1
- package/dist/core/viewport/pxExtent.js +0 -42
- package/dist/core/viewport/pxExtent.js.map +0 -1
- package/dist/features/cursor/paintedCursorLayer.js.map +0 -1
- package/dist/features/focus/gateLayer.js.map +0 -1
- package/dist/features/focus/useCanvasFocus.js +0 -29
- package/dist/features/focus/useCanvasFocus.js.map +0 -1
- package/dist/features/groups/children.js.map +0 -1
- package/dist/features/groups/composePose.js +0 -67
- package/dist/features/groups/composePose.js.map +0 -1
- package/dist/features/groups/nestedHit.js.map +0 -1
- package/dist/features/groups/unionOfChildren.js.map +0 -1
- package/dist/features/images/imageCache.js +0 -104
- package/dist/features/images/imageCache.js.map +0 -1
- package/dist/features/ingestion/index.js +0 -8
- package/dist/features/meshPaint/bake.js +0 -79
- package/dist/features/meshPaint/bake.js.map +0 -1
- package/dist/features/meshPaint/bakeCache.js +0 -59
- package/dist/features/meshPaint/bakeCache.js.map +0 -1
- package/dist/features/meshPaint/handles.js +0 -86
- package/dist/features/meshPaint/handles.js.map +0 -1
- package/dist/features/meshPaint/lazyKind.js.map +0 -1
- package/dist/features/meshPaint/meshPaint.js +0 -239
- package/dist/features/meshPaint/meshPaint.js.map +0 -1
- package/dist/features/meshPaint/meshShader.js +0 -6
- package/dist/features/meshPaint/meshShader.js.map +0 -1
- package/dist/features/meshPaint/register.js +0 -7
- package/dist/features/meshPaint/register.js.map +0 -1
- package/dist/features/meshPaint/surface.js +0 -110
- package/dist/features/meshPaint/surface.js.map +0 -1
- package/dist/features/minimap/actions.js +0 -53
- package/dist/features/minimap/actions.js.map +0 -1
- package/dist/features/minimap/createMinimapContribution.js +0 -96
- package/dist/features/minimap/createMinimapContribution.js.map +0 -1
- package/dist/features/minimap/layers.js +0 -85
- package/dist/features/minimap/layers.js.map +0 -1
- package/dist/features/overlays/useNodeOverlayFrame.js +0 -103
- package/dist/features/overlays/useNodeOverlayFrame.js.map +0 -1
- package/dist/features/parallax/createParallaxLayer.js +0 -26
- package/dist/features/parallax/createParallaxLayer.js.map +0 -1
- package/dist/features/parallax/createParallaxPlane.js +0 -22
- package/dist/features/parallax/createParallaxPlane.js.map +0 -1
- package/dist/features/paths/anchorEdits.js +0 -167
- package/dist/features/paths/anchorEdits.js.map +0 -1
- package/dist/features/paths/anchors.js +0 -159
- package/dist/features/paths/anchors.js.map +0 -1
- package/dist/features/paths/booleans.js +0 -2
- package/dist/features/paths/markerCommands.js +0 -149
- package/dist/features/paths/markerCommands.js.map +0 -1
- package/dist/features/paths/markerSites.js +0 -59
- package/dist/features/paths/markerSites.js.map +0 -1
- package/dist/features/paths/markers.js +0 -95
- package/dist/features/paths/markers.js.map +0 -1
- package/dist/features/paths/nearestAnchor.js +0 -36
- package/dist/features/paths/nearestAnchor.js.map +0 -1
- package/dist/features/paths/pathInWorld.js +0 -41
- package/dist/features/paths/pathInWorld.js.map +0 -1
- package/dist/features/paths/poseDescriptor.js +0 -39
- package/dist/features/paths/poseDescriptor.js.map +0 -1
- package/dist/features/paths/strokeToPath.js +0 -40
- package/dist/features/paths/strokeToPath.js.map +0 -1
- package/dist/features/paths/tessellate/dash.js +0 -52
- package/dist/features/paths/tessellate/dash.js.map +0 -1
- package/dist/features/paths/tessellate/insets.js +0 -32
- package/dist/features/paths/tessellate/insets.js.map +0 -1
- package/dist/features/paths/tessellate/metric.js +0 -72
- package/dist/features/paths/tessellate/metric.js.map +0 -1
- package/dist/features/paths/tessellate/stroke.js +0 -170
- package/dist/features/paths/tessellate/stroke.js.map +0 -1
- package/dist/features/paths/tessellate/vertexWidths.js +0 -32
- package/dist/features/paths/tessellate/vertexWidths.js.map +0 -1
- package/dist/features/patterns/commandPaint.js +0 -18
- package/dist/features/patterns/commandPaint.js.map +0 -1
- package/dist/features/patterns/index.js +0 -11
- package/dist/features/patterns/index.js.map +0 -1
- package/dist/features/patterns/patterns-builtin.js +0 -38
- package/dist/features/patterns/patterns-builtin.js.map +0 -1
- package/dist/features/patterns/rasterizeTile.js +0 -17
- package/dist/features/patterns/rasterizeTile.js.map +0 -1
- package/dist/features/patterns/resolveSpec.js +0 -65
- package/dist/features/patterns/resolveSpec.js.map +0 -1
- package/dist/features/patterns/tileGeometry.js +0 -158
- package/dist/features/patterns/tileGeometry.js.map +0 -1
- package/dist/features/pointer/PointerContext.js +0 -45
- package/dist/features/pointer/PointerContext.js.map +0 -1
- package/dist/features/selection/SelectionContext.js +0 -51
- package/dist/features/selection/SelectionContext.js.map +0 -1
- package/dist/features/simulation/createSimulation.js +0 -61
- package/dist/features/simulation/createSimulation.js.map +0 -1
- package/dist/features/simulation/types.js +0 -6
- package/dist/features/simulation/types.js.map +0 -1
- package/dist/features/simulation/useSimulation.js +0 -74
- package/dist/features/simulation/useSimulation.js.map +0 -1
- package/dist/features/text/domOffsets.js +0 -82
- package/dist/features/text/domOffsets.js.map +0 -1
- package/dist/features/text/domRuns.js +0 -230
- package/dist/features/text/domRuns.js.map +0 -1
- package/dist/features/text/fitTextPose.js +0 -38
- package/dist/features/text/fitTextPose.js.map +0 -1
- package/dist/features/text/hitTest.js +0 -48
- package/dist/features/text/hitTest.js.map +0 -1
- package/dist/features/text/isTextData.js +0 -8
- package/dist/features/text/isTextData.js.map +0 -1
- package/dist/features/text/overlayDirection.js +0 -15
- package/dist/features/text/overlayDirection.js.map +0 -1
- package/dist/features/text/renderLabel.js +0 -14
- package/dist/features/text/renderLabel.js.map +0 -1
- package/dist/features/text/runs/effectiveRangeStyle.js +0 -66
- package/dist/features/text/runs/effectiveRangeStyle.js.map +0 -1
- package/dist/features/text/runs/flagRange.js +0 -53
- package/dist/features/text/runs/flagRange.js.map +0 -1
- package/dist/features/text/runs/rangeStyle.js +0 -133
- package/dist/features/text/runs/rangeStyle.js.map +0 -1
- package/dist/features/text/textCommand.js +0 -60
- package/dist/features/text/textCommand.js.map +0 -1
- package/dist/features/text/textToPath.js +0 -181
- package/dist/features/text/textToPath.js.map +0 -1
- package/dist/features/text/useTextEdit.js +0 -491
- package/dist/features/text/useTextEdit.js.map +0 -1
- package/dist/features/tiling/createTiledLayer.js +0 -65
- package/dist/features/tiling/createTiledLayer.js.map +0 -1
- package/dist/features/tiling/tiledProject.js +0 -14
- package/dist/features/tiling/tiledProject.js.map +0 -1
- package/dist/interactions/actions/clone/behaviors/cloneByAltDrag.js +0 -26
- package/dist/interactions/actions/clone/behaviors/cloneByAltDrag.js.map +0 -1
- package/dist/interactions/actions/defaults/align.js.map +0 -1
- package/dist/interactions/actions/defaults/booleans.js +0 -52
- package/dist/interactions/actions/defaults/booleans.js.map +0 -1
- package/dist/interactions/actions/defaults/clipboard.js.map +0 -1
- package/dist/interactions/actions/defaults/clone.js +0 -91
- package/dist/interactions/actions/defaults/clone.js.map +0 -1
- package/dist/interactions/actions/defaults/createOutlines.js +0 -47
- package/dist/interactions/actions/defaults/createOutlines.js.map +0 -1
- package/dist/interactions/actions/defaults/distribute.js.map +0 -1
- package/dist/interactions/actions/defaults/editAnchors.js +0 -100
- package/dist/interactions/actions/defaults/editAnchors.js.map +0 -1
- package/dist/interactions/actions/defaults/flip.js +0 -125
- package/dist/interactions/actions/defaults/flip.js.map +0 -1
- package/dist/interactions/actions/defaults/insert.js +0 -287
- package/dist/interactions/actions/defaults/insert.js.map +0 -1
- package/dist/interactions/actions/defaults/lassoSelect.js +0 -153
- package/dist/interactions/actions/defaults/lassoSelect.js.map +0 -1
- package/dist/interactions/actions/defaults/move.js +0 -778
- package/dist/interactions/actions/defaults/move.js.map +0 -1
- package/dist/interactions/actions/defaults/resize.js +0 -341
- package/dist/interactions/actions/defaults/resize.js.map +0 -1
- package/dist/interactions/actions/defaults/rotate.js +0 -185
- package/dist/interactions/actions/defaults/rotate.js.map +0 -1
- package/dist/interactions/actions/previewOverrides.js +0 -25
- package/dist/interactions/actions/previewOverrides.js.map +0 -1
- package/dist/interactions/actions/resize/autoPoseDescriptor.js.map +0 -1
- package/dist/layout/arrivals.js +0 -36
- package/dist/layout/arrivals.js.map +0 -1
- package/dist/math-J-ACHyEg.d.ts +0 -159
- package/dist/registerProgram-T9S_PfAX.d.ts +0 -208
- package/dist/renderer/DrawCommand.js +0 -6
- package/dist/renderer/DrawCommand.js.map +0 -1
- package/dist/renderer/WeaselRenderer.js +0 -333
- package/dist/renderer/WeaselRenderer.js.map +0 -1
- package/dist/renderer/batchClip.js +0 -46
- package/dist/renderer/batchClip.js.map +0 -1
- package/dist/renderer/cache/GLImageCache.js +0 -74
- package/dist/renderer/cache/GLImageCache.js.map +0 -1
- package/dist/renderer/cache/GLMeshCache.js +0 -102
- package/dist/renderer/cache/GLMeshCache.js.map +0 -1
- package/dist/renderer/cache/GLTextureCache.js +0 -68
- package/dist/renderer/cache/GLTextureCache.js.map +0 -1
- package/dist/renderer/cache/GradientRampAtlas.js +0 -82
- package/dist/renderer/cache/GradientRampAtlas.js.map +0 -1
- package/dist/renderer/cache/cache.js +0 -13
- package/dist/renderer/cache/cache.js.map +0 -1
- package/dist/renderer/cache/markerCommandCache.js +0 -63
- package/dist/renderer/cache/markerCommandCache.js.map +0 -1
- package/dist/renderer/cache/outlineMeshCache.js +0 -15
- package/dist/renderer/cache/outlineMeshCache.js.map +0 -1
- package/dist/renderer/cache/outlineStrokeMeshCache.js +0 -36
- package/dist/renderer/cache/outlineStrokeMeshCache.js.map +0 -1
- package/dist/renderer/cache/strokeMeshCache.js +0 -55
- package/dist/renderer/cache/strokeMeshCache.js.map +0 -1
- package/dist/renderer/cullDrawCommands.js +0 -90
- package/dist/renderer/cullDrawCommands.js.map +0 -1
- package/dist/renderer/draw/batch.js +0 -133
- package/dist/renderer/draw/batch.js.map +0 -1
- package/dist/renderer/draw/clip.js +0 -89
- package/dist/renderer/draw/clip.js.map +0 -1
- package/dist/renderer/draw/customShader.js +0 -230
- package/dist/renderer/draw/customShader.js.map +0 -1
- package/dist/renderer/draw/drawTriangles.js +0 -8
- package/dist/renderer/draw/drawTriangles.js.map +0 -1
- package/dist/renderer/draw/effects.js +0 -28
- package/dist/renderer/draw/effects.js.map +0 -1
- package/dist/renderer/draw/flushBatch.js +0 -35
- package/dist/renderer/draw/flushBatch.js.map +0 -1
- package/dist/renderer/draw/gradient.js +0 -90
- package/dist/renderer/draw/gradient.js.map +0 -1
- package/dist/renderer/draw/image.js +0 -38
- package/dist/renderer/draw/image.js.map +0 -1
- package/dist/renderer/draw/mesh.js +0 -16
- package/dist/renderer/draw/mesh.js.map +0 -1
- package/dist/renderer/draw/paintBind.js +0 -70
- package/dist/renderer/draw/paintBind.js.map +0 -1
- package/dist/renderer/draw/pathPaint.js +0 -142
- package/dist/renderer/draw/pathPaint.js.map +0 -1
- package/dist/renderer/draw/scratchPass.js +0 -83
- package/dist/renderer/draw/scratchPass.js.map +0 -1
- package/dist/renderer/draw/stencil.js +0 -28
- package/dist/renderer/draw/stencil.js.map +0 -1
- package/dist/renderer/draw/text.js +0 -167
- package/dist/renderer/draw/text.js.map +0 -1
- package/dist/renderer/draw/uniforms.js +0 -77
- package/dist/renderer/draw/uniforms.js.map +0 -1
- package/dist/renderer/draw.js +0 -79
- package/dist/renderer/draw.js.map +0 -1
- package/dist/renderer/drawBatch.js +0 -198
- package/dist/renderer/drawBatch.js.map +0 -1
- package/dist/renderer/effects/EffectTargets.js +0 -48
- package/dist/renderer/effects/EffectTargets.js.map +0 -1
- package/dist/renderer/effects/builtins.js +0 -31
- package/dist/renderer/effects/builtins.js.map +0 -1
- package/dist/renderer/effects/composite.js +0 -11
- package/dist/renderer/effects/composite.js.map +0 -1
- package/dist/renderer/effects/effectPrelude.js +0 -10
- package/dist/renderer/effects/effectPrelude.js.map +0 -1
- package/dist/renderer/effects/types.js +0 -10
- package/dist/renderer/effects/types.js.map +0 -1
- package/dist/renderer/glyphOutlineMesh.js +0 -67
- package/dist/renderer/glyphOutlineMesh.js.map +0 -1
- package/dist/renderer/index.js +0 -20
- package/dist/renderer/math/color.js +0 -321
- package/dist/renderer/math/color.js.map +0 -1
- package/dist/renderer/math/mat3.js +0 -80
- package/dist/renderer/math/mat3.js.map +0 -1
- package/dist/renderer/math/patternSpace.js +0 -22
- package/dist/renderer/math/patternSpace.js.map +0 -1
- package/dist/renderer/math/viewToMat3.js +0 -19
- package/dist/renderer/math/viewToMat3.js.map +0 -1
- package/dist/renderer/paintResources.js +0 -18
- package/dist/renderer/paintResources.js.map +0 -1
- package/dist/renderer/paintScratch.js +0 -37
- package/dist/renderer/paintScratch.js.map +0 -1
- package/dist/renderer/shaders/ShaderProgram.js +0 -74
- package/dist/renderer/shaders/ShaderProgram.js.map +0 -1
- package/dist/renderer/shaders/batchFill.js +0 -119
- package/dist/renderer/shaders/batchFill.js.map +0 -1
- package/dist/renderer/shaders/customPrelude.js +0 -34
- package/dist/renderer/shaders/customPrelude.js.map +0 -1
- package/dist/renderer/shaders/extractUniformNames.js +0 -184
- package/dist/renderer/shaders/extractUniformNames.js.map +0 -1
- package/dist/renderer/shaders/glyphPaint.js +0 -61
- package/dist/renderer/shaders/glyphPaint.js.map +0 -1
- package/dist/renderer/shaders/gradFill.js +0 -31
- package/dist/renderer/shaders/gradFill.js.map +0 -1
- package/dist/renderer/shaders/pathFill.js +0 -14
- package/dist/renderer/shaders/pathFill.js.map +0 -1
- package/dist/renderer/shaders/patternFill.js +0 -25
- package/dist/renderer/shaders/patternFill.js.map +0 -1
- package/dist/renderer/shaders/registerProgram.js +0 -18
- package/dist/renderer/shaders/registerProgram.js.map +0 -1
- package/dist/renderer/spriteSheet.js +0 -14
- package/dist/renderer/spriteSheet.js.map +0 -1
- package/dist/renderer/state/GroupState.js +0 -77
- package/dist/renderer/state/GroupState.js.map +0 -1
- package/dist/renderer/strokeLengths.js +0 -50
- package/dist/renderer/strokeLengths.js.map +0 -1
- package/dist/renderer/syntheticItalic.js +0 -6
- package/dist/renderer/syntheticItalic.js.map +0 -1
- package/dist/renderer/textures/registerTexture.js +0 -34
- package/dist/renderer/textures/registerTexture.js.map +0 -1
- package/dist/scheduling/useVisibleRaf.js +0 -69
- package/dist/scheduling/useVisibleRaf.js.map +0 -1
- package/dist/test-seams-DM2B87-g.d.ts +0 -356
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
import { createPaintResources as e } from "../paintResources.js";
|
|
2
|
-
import { getTexture as t } from "../textures/registerTexture.js";
|
|
3
|
-
import { mat3 as n } from "../math/mat3.js";
|
|
4
|
-
import { setAlphaUniform as r, setColorMatrixUniforms as i, setProjAndModel as a } from "./uniforms.js";
|
|
5
|
-
import { gradientSpaceInverse as o, spaceToDevice as s } from "./gradient.js";
|
|
6
|
-
import { patternTileSpace as c } from "../math/patternSpace.js";
|
|
7
|
-
//#region src/renderer/draw/paintBind.ts
|
|
8
|
-
function l(e) {
|
|
9
|
-
let t = u.get(e);
|
|
10
|
-
if (t) return t;
|
|
11
|
-
let n = {
|
|
12
|
-
gl: e.gl,
|
|
13
|
-
get alpha() {
|
|
14
|
-
return e.state.alpha;
|
|
15
|
-
},
|
|
16
|
-
program: (t) => e.ensureProgram?.(t) ?? e.programRegistry.get(t) ?? null,
|
|
17
|
-
setProjAndModel: (t) => a(e, t),
|
|
18
|
-
spaceInverse: (t) => o(e, t),
|
|
19
|
-
spaceToDevice: (t) => s(e, t),
|
|
20
|
-
get maxTextureSize() {
|
|
21
|
-
return e.imageCache.maxTextureSide;
|
|
22
|
-
},
|
|
23
|
-
resources: e.paintResources ?? f(e.gl),
|
|
24
|
-
bindRamp: (t, n, r) => {
|
|
25
|
-
let i = e.gradRamps.upload(t, r);
|
|
26
|
-
return e.gradRamps.bind(n), e.gradRamps.rowV(i);
|
|
27
|
-
}
|
|
28
|
-
};
|
|
29
|
-
return u.set(e, n), n;
|
|
30
|
-
}
|
|
31
|
-
var u = /* @__PURE__ */ new WeakMap(), d = /* @__PURE__ */ new WeakMap();
|
|
32
|
-
function f(t) {
|
|
33
|
-
let n = d.get(t);
|
|
34
|
-
return n || (n = e(), d.set(t, n)), n;
|
|
35
|
-
}
|
|
36
|
-
function p(e, s, l, u) {
|
|
37
|
-
let d = l.pattern, f = t(d.id);
|
|
38
|
-
if (!f) return (typeof process > "u" || process.env.NODE_ENV !== "production") && console.warn(`weasel: pattern TextureHandle "${d.id}" not registered`), null;
|
|
39
|
-
let p = o(e, l.units);
|
|
40
|
-
if (!p) return null;
|
|
41
|
-
let h = c(p, l.origin ?? {
|
|
42
|
-
x: 0,
|
|
43
|
-
y: 0
|
|
44
|
-
}, l.transform);
|
|
45
|
-
if (!h) return null;
|
|
46
|
-
e.textureCache.uploadRegistered(d.id, f.source, "repeat");
|
|
47
|
-
let g = e.gl;
|
|
48
|
-
g.useProgram(s.handle), a(e, s, u), i(e, s), g.uniformMatrix3fv(s.uniform("u_worldInv"), !1, n.toUniform(h));
|
|
49
|
-
let [_, v] = m(f.source);
|
|
50
|
-
return g.uniform2f(s.uniform("u_tileSize"), _, v), e.textureCache.bind(d.id, 0), g.uniform1i(s.uniform("u_sampler"), 0), g.uniform1f(s.uniform("u_opacity"), l.opacity ?? 1), r(e, s, e.state.alpha), s;
|
|
51
|
-
}
|
|
52
|
-
function m(e) {
|
|
53
|
-
let t = "naturalWidth" in e ? e.naturalWidth : e.width, n = "naturalHeight" in e ? e.naturalHeight : e.height;
|
|
54
|
-
return [t || 1, n || 1];
|
|
55
|
-
}
|
|
56
|
-
function h(e, t, s, c) {
|
|
57
|
-
let l = o(e, s.units);
|
|
58
|
-
if (!l) return null;
|
|
59
|
-
let u = e.gl, d = e.gradRamps.upload(s.stops, s.interpolate ?? "rgb");
|
|
60
|
-
if (u.useProgram(t.handle), a(e, t, c), u.uniformMatrix3fv(t.uniform("u_worldInv"), !1, n.toUniform(l)), i(e, t), e.gradRamps.bind(0), u.uniform1i(t.uniform("u_ramp"), 0), u.uniform1f(t.uniform("u_rampV"), e.gradRamps.rowV(d)), r(e, t, e.state.alpha), u.uniform1f(t.uniform("u_opacity"), s.opacity ?? 1), s.fill === "linear-gradient") {
|
|
61
|
-
u.uniform1i(t.uniform("u_gradKind"), 0);
|
|
62
|
-
let e = s.to.x - s.from.x, n = s.to.y - s.from.y, r = Math.hypot(e, n) || 1;
|
|
63
|
-
u.uniform2f(t.uniform("u_gradP0"), s.from.x, s.from.y), u.uniform2f(t.uniform("u_gradDir"), e / r, n / r), u.uniform1f(t.uniform("u_gradLen"), r), u.uniform1f(t.uniform("u_gradRadius"), 0), u.uniform1f(t.uniform("u_gradAngle"), 0);
|
|
64
|
-
} else s.fill === "radial-gradient" ? (u.uniform1i(t.uniform("u_gradKind"), 1), u.uniform2f(t.uniform("u_gradP0"), s.center.x, s.center.y), u.uniform2f(t.uniform("u_gradDir"), 0, 0), u.uniform1f(t.uniform("u_gradLen"), 0), u.uniform1f(t.uniform("u_gradRadius"), s.radius), u.uniform1f(t.uniform("u_gradAngle"), 0)) : (u.uniform1i(t.uniform("u_gradKind"), 2), u.uniform2f(t.uniform("u_gradP0"), s.center.x, s.center.y), u.uniform2f(t.uniform("u_gradDir"), 0, 0), u.uniform1f(t.uniform("u_gradLen"), 0), u.uniform1f(t.uniform("u_gradRadius"), 0), u.uniform1f(t.uniform("u_gradAngle"), s.angle));
|
|
65
|
-
return t;
|
|
66
|
-
}
|
|
67
|
-
//#endregion
|
|
68
|
-
export { h as bindGradient, p as bindPattern, l as paintBindContext };
|
|
69
|
-
|
|
70
|
-
//# sourceMappingURL=paintBind.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"paintBind.js","names":["paintBindContext","cached","BIND_CONTEXTS","ctx","made","id","setProjAndModel","prog","gradientSpaceInverse","units","spaceToDevice","unownedPaintResources","row","stops","space","unit","UNOWNED_RESOURCES","gl","createPaintResources","bindPattern","tex","fill","entry","getTexture","inverse","tileSpace","patternTileSpace","model","setColorMatrixUniforms","mat3","tw","th","textureSize","setAlphaUniform","w","source","h","bindGradient","dx","dy","len"],"sources":["../../../src/renderer/draw/paintBind.ts"],"sourcesContent":["import type { FillStyle } from '@weasel-js/paint';\nimport type { PaintBindContext, PaintResources } from 'core/paintKinds';\nimport { createPaintResources } from '../paintResources';\nimport { getTexture, type TextureHandle } from '../textures/registerTexture';\nimport type { ShaderProgram } from '../shaders/ShaderProgram';\nimport { mat3, type GlMat3 } from '../math/mat3';\nimport { patternTileSpace } from '../math/patternSpace';\nimport type { DrawContext } from './drawContext';\nimport { setAlphaUniform, setColorMatrixUniforms, setProjAndModel } from './uniforms';\nimport { gradientSpaceInverse, spaceToDevice } from './gradient';\n\n/** The narrow renderer surface a registered paint kind binds against, built\n * once per frame context. `DrawContext` is not consumer surface. */\nexport function paintBindContext(ctx: DrawContext): PaintBindContext {\n const cached = BIND_CONTEXTS.get(ctx);\n if (cached) return cached;\n const made: PaintBindContext = {\n gl: ctx.gl,\n get alpha() { return ctx.state.alpha; },\n program: (id) => ctx.ensureProgram?.(id) ?? ctx.programRegistry.get(id) ?? null,\n setProjAndModel: (prog) => setProjAndModel(ctx, prog),\n spaceInverse: (units) => gradientSpaceInverse(ctx, units),\n spaceToDevice: (units) => spaceToDevice(ctx, units),\n get maxTextureSize() { return ctx.imageCache.maxTextureSide; },\n resources: ctx.paintResources ?? unownedPaintResources(ctx.gl),\n bindRamp: (stops, unit, space) => {\n const row = ctx.gradRamps.upload(stops, space);\n ctx.gradRamps.bind(unit);\n return ctx.gradRamps.rowV(row);\n },\n };\n BIND_CONTEXTS.set(ctx, made);\n return made;\n}\n\nconst BIND_CONTEXTS = new WeakMap<DrawContext, PaintBindContext>();\n\nconst UNOWNED_RESOURCES = new WeakMap<WebGL2RenderingContext, PaintResources>();\n\nfunction unownedPaintResources(gl: WebGL2RenderingContext): PaintResources {\n let made = UNOWNED_RESOURCES.get(gl);\n if (!made) {\n made = createPaintResources();\n UNOWNED_RESOURCES.set(gl, made);\n }\n return made;\n}\n\n/** Bind `prog` — the path program or the glyph one, which share every paint\n * uniform — to draw `fill` under `model`. */\nexport function bindPattern(\n ctx: DrawContext,\n prog: ShaderProgram,\n fill: Extract<FillStyle, { fill: 'pattern' }>,\n model: GlMat3,\n): ShaderProgram | null {\n const tex = fill.pattern as TextureHandle;\n const entry = getTexture(tex.id);\n if (!entry) {\n const isDev = typeof process !== 'undefined' ? process.env.NODE_ENV !== 'production' : true;\n if (isDev) console.warn(`weasel: pattern TextureHandle \"${tex.id}\" not registered`);\n return null;\n }\n const inverse = gradientSpaceInverse(ctx, fill.units);\n if (!inverse) return null;\n const tileSpace = patternTileSpace(inverse, fill.origin ?? { x: 0, y: 0 }, fill.transform);\n if (!tileSpace) return null;\n ctx.textureCache.uploadRegistered(tex.id, entry.source, 'repeat');\n\n // A path fill mesh carries a_position only, so the tile coordinate is\n // recovered per fragment from the screen position — the same route\n // gradients take through `u_worldInv`, and the reason this can't reuse\n // the image-fill shader, whose a_uv such a mesh leaves unbound.\n const gl = ctx.gl;\n gl.useProgram(prog.handle);\n setProjAndModel(ctx, prog, model);\n setColorMatrixUniforms(ctx, prog);\n gl.uniformMatrix3fv(prog.uniform('u_worldInv')!, false, mat3.toUniform(tileSpace));\n const [tw, th] = textureSize(entry.source);\n gl.uniform2f(prog.uniform('u_tileSize')!, tw, th);\n ctx.textureCache.bind(tex.id, 0);\n gl.uniform1i(prog.uniform('u_sampler')!, 0);\n gl.uniform1f(prog.uniform('u_opacity')!, fill.opacity ?? 1);\n setAlphaUniform(ctx, prog, ctx.state.alpha);\n return prog;\n}\n\n/** Tile extent in paint-space units — one tile spans this many units of\n * whatever space `units` names. */\nfunction textureSize(source: HTMLImageElement | ImageBitmap): [number, number] {\n const w = 'naturalWidth' in source ? source.naturalWidth : source.width;\n const h = 'naturalHeight' in source ? source.naturalHeight : source.height;\n return [w || 1, h || 1];\n}\n\n/** The gradient counterpart of `bindPattern`. */\nexport function bindGradient(\n ctx: DrawContext,\n prog: ShaderProgram,\n fill: Extract<FillStyle, { fill: 'linear-gradient' | 'radial-gradient' | 'conic-gradient' }>,\n model: GlMat3,\n): ShaderProgram | null {\n const inverse = gradientSpaceInverse(ctx, fill.units);\n if (!inverse) return null;\n const gl = ctx.gl;\n const row = ctx.gradRamps.upload(fill.stops, fill.interpolate ?? 'rgb');\n\n gl.useProgram(prog.handle);\n setProjAndModel(ctx, prog, model);\n\n gl.uniformMatrix3fv(prog.uniform('u_worldInv')!, false, mat3.toUniform(inverse));\n setColorMatrixUniforms(ctx, prog);\n\n ctx.gradRamps.bind(0);\n gl.uniform1i(prog.uniform('u_ramp')!, 0);\n gl.uniform1f(prog.uniform('u_rampV')!, ctx.gradRamps.rowV(row));\n setAlphaUniform(ctx, prog, ctx.state.alpha);\n gl.uniform1f(prog.uniform('u_opacity')!, fill.opacity ?? 1);\n\n if (fill.fill === 'linear-gradient') {\n gl.uniform1i(prog.uniform('u_gradKind')!, 0);\n const dx = fill.to.x - fill.from.x;\n const dy = fill.to.y - fill.from.y;\n const len = Math.hypot(dx, dy) || 1;\n gl.uniform2f(prog.uniform('u_gradP0')!, fill.from.x, fill.from.y);\n gl.uniform2f(prog.uniform('u_gradDir')!, dx / len, dy / len);\n gl.uniform1f(prog.uniform('u_gradLen')!, len);\n gl.uniform1f(prog.uniform('u_gradRadius')!, 0);\n gl.uniform1f(prog.uniform('u_gradAngle')!, 0);\n } else if (fill.fill === 'radial-gradient') {\n gl.uniform1i(prog.uniform('u_gradKind')!, 1);\n gl.uniform2f(prog.uniform('u_gradP0')!, fill.center.x, fill.center.y);\n gl.uniform2f(prog.uniform('u_gradDir')!, 0, 0);\n gl.uniform1f(prog.uniform('u_gradLen')!, 0);\n gl.uniform1f(prog.uniform('u_gradRadius')!, fill.radius);\n gl.uniform1f(prog.uniform('u_gradAngle')!, 0);\n } else {\n // conic\n gl.uniform1i(prog.uniform('u_gradKind')!, 2);\n gl.uniform2f(prog.uniform('u_gradP0')!, fill.center.x, fill.center.y);\n gl.uniform2f(prog.uniform('u_gradDir')!, 0, 0);\n gl.uniform1f(prog.uniform('u_gradLen')!, 0);\n gl.uniform1f(prog.uniform('u_gradRadius')!, 0);\n gl.uniform1f(prog.uniform('u_gradAngle')!, fill.angle);\n }\n\n return prog;\n}\n"],"mappings":"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"}
|
|
@@ -1,142 +0,0 @@
|
|
|
1
|
-
import { drawTriangles as e } from "./drawTriangles.js";
|
|
2
|
-
import { ancestorMask as t, applyClipTest as n, beginParityMask as r, endParityMask as i } from "./stencil.js";
|
|
3
|
-
import { setColorMatrixUniforms as a, setProjAndModel as o, setSolidPaintUniforms as s } from "./uniforms.js";
|
|
4
|
-
import { fillMesh as c, fillMeshHandle as l, meshHandle as u } from "./mesh.js";
|
|
5
|
-
import { flushForOwnDraw as d } from "./clip.js";
|
|
6
|
-
import { getPaintKind as f } from "../../core/paintKinds.js";
|
|
7
|
-
import { metricKeepsRects as p } from "../../features/paths/tessellate/metric.js";
|
|
8
|
-
import { resolveStrokeWidth as m } from "../../features/paths/tessellate/stroke.js";
|
|
9
|
-
import { strokeMesh as h } from "../cache/strokeMeshCache.js";
|
|
10
|
-
import { resolveStrokeLengths as g } from "../strokeLengths.js";
|
|
11
|
-
import { cachedMarkerCommands as _ } from "../cache/markerCommandCache.js";
|
|
12
|
-
import { batchPaint as v } from "./gradient.js";
|
|
13
|
-
import { pushRampRect as y, pushRect as b, tryStageFill as x } from "./batch.js";
|
|
14
|
-
import { bindGradient as S, bindPattern as C, paintBindContext as w } from "./paintBind.js";
|
|
15
|
-
//#region src/renderer/draw/pathPaint.ts
|
|
16
|
-
function T(e, t) {
|
|
17
|
-
t.fill && E(e, t), t.stroke?.paint && L(e, t);
|
|
18
|
-
}
|
|
19
|
-
function E(e, t) {
|
|
20
|
-
let n = t.fill, r = n.fill === void 0 || n.fill === "solid", i = !!(t.vertexColors && t.vertexColors.length > 0), a = n, o = v(e, n, i);
|
|
21
|
-
if (o === null) return;
|
|
22
|
-
if (o !== void 0 && t.path.kind === "rect") {
|
|
23
|
-
o.kind === "ramp" ? y(e, t.path, o) : b(e, t.path, o);
|
|
24
|
-
return;
|
|
25
|
-
}
|
|
26
|
-
let s = c(e, t.path);
|
|
27
|
-
if (x(e, s, o)) return;
|
|
28
|
-
let l = u(e, s);
|
|
29
|
-
r && i ? A(e, t, a, l) : l.requiresStencil ? I(e, n, l) : M(e, n, l);
|
|
30
|
-
}
|
|
31
|
-
function D(e, t, n, r) {
|
|
32
|
-
let i = e.createBuffer();
|
|
33
|
-
if (!i) throw Error("attachVertexColors: createBuffer returned null");
|
|
34
|
-
e.bindBuffer(e.ARRAY_BUFFER, i), e.bufferData(e.ARRAY_BUFFER, k(n, r), e.DYNAMIC_DRAW);
|
|
35
|
-
let a = t.attribute("a_vertexColor");
|
|
36
|
-
return a !== void 0 && (e.enableVertexAttribArray(a), e.vertexAttribPointer(a, 4, e.FLOAT, !1, 0, 0)), {
|
|
37
|
-
vbo: i,
|
|
38
|
-
location: a
|
|
39
|
-
};
|
|
40
|
-
}
|
|
41
|
-
function O(e, { vbo: t, location: n }) {
|
|
42
|
-
n !== void 0 && e.disableVertexAttribArray(n), e.deleteBuffer(t);
|
|
43
|
-
}
|
|
44
|
-
function k(e, t) {
|
|
45
|
-
let n = t.anchorA, r = t.anchorB, i = t.anchorT;
|
|
46
|
-
if (!n || !r || !i) return new Float32Array(e);
|
|
47
|
-
let a = n.length, o = new Float32Array(a * 4);
|
|
48
|
-
for (let t = 0; t < a; t++) {
|
|
49
|
-
let a = n[t] * 4, s = r[t] * 4, c = i[t];
|
|
50
|
-
o[t * 4 + 0] = e[a + 0] + (e[s + 0] - e[a + 0]) * c, o[t * 4 + 1] = e[a + 1] + (e[s + 1] - e[a + 1]) * c, o[t * 4 + 2] = e[a + 2] + (e[s + 2] - e[a + 2]) * c, o[t * 4 + 3] = e[a + 3] + (e[s + 3] - e[a + 3]) * c;
|
|
51
|
-
}
|
|
52
|
-
return o;
|
|
53
|
-
}
|
|
54
|
-
function A(t, c, l, u) {
|
|
55
|
-
let d = t.gl, f = t.pathFillVColor;
|
|
56
|
-
d.useProgram(f.handle), d.bindVertexArray(u.vao), o(t, f), s(t, f, l.color, l.opacity), a(t, f);
|
|
57
|
-
let p = D(d, f, c.vertexColors, u);
|
|
58
|
-
u.requiresStencil ? (r(t, u.indexCount), e(t, u.indexCount, t.gl.UNSIGNED_INT), i(t)) : (n(t), e(t, u.indexCount, t.gl.UNSIGNED_INT)), O(d, p), d.bindVertexArray(null);
|
|
59
|
-
}
|
|
60
|
-
function j(e, t) {
|
|
61
|
-
let n = t.fill ?? "solid";
|
|
62
|
-
if (n === "solid") return N(e, t);
|
|
63
|
-
if (n === "pattern") return P(e, t);
|
|
64
|
-
if (n === "linear-gradient" || n === "radial-gradient" || n === "conic-gradient") return F(e, t);
|
|
65
|
-
let r = f(n)?.bind;
|
|
66
|
-
return r ? r(w(e), t) : null;
|
|
67
|
-
}
|
|
68
|
-
function M(t, r, i) {
|
|
69
|
-
if (!j(t, r)) return;
|
|
70
|
-
let a = t.gl;
|
|
71
|
-
a.bindVertexArray(i.vao), n(t), e(t, i.indexCount, t.gl.UNSIGNED_INT), a.bindVertexArray(null);
|
|
72
|
-
}
|
|
73
|
-
function N(e, t) {
|
|
74
|
-
let n = e.pathFill;
|
|
75
|
-
return e.gl.useProgram(n.handle), o(e, n), s(e, n, t.color, t.opacity), a(e, n), n;
|
|
76
|
-
}
|
|
77
|
-
function P(e, t) {
|
|
78
|
-
return C(e, e.patternFill, t, e.state.transform);
|
|
79
|
-
}
|
|
80
|
-
function F(e, t) {
|
|
81
|
-
return S(e, e.gradFill, t, e.state.transform);
|
|
82
|
-
}
|
|
83
|
-
function I(t, n, a) {
|
|
84
|
-
let s = t.gl;
|
|
85
|
-
s.useProgram(t.pathFill.handle), s.bindVertexArray(a.vao), o(t, t.pathFill), r(t, a.indexCount), j(t, n) && e(t, a.indexCount, t.gl.UNSIGNED_INT), i(t), s.bindVertexArray(null);
|
|
86
|
-
}
|
|
87
|
-
function L(e, t) {
|
|
88
|
-
let { cmd: n, spaces: r } = g(e.state.transform, t), i = n.stroke, a = i.align ?? "center", o = r.ribbon?.metric;
|
|
89
|
-
(n.path.kind === "polygon" || o !== void 0 && !p(o)) && a !== "center" ? (d(e), V(e, n, a, r)) : R(e, n, r);
|
|
90
|
-
let s = m(i.width ?? 1, 1), c = _(n.path, t.stroke, i, s, e.flattenTolerance, r);
|
|
91
|
-
for (let t of c) T(e, t);
|
|
92
|
-
}
|
|
93
|
-
function R(t, r, i) {
|
|
94
|
-
let c = r.stroke, l = c.paint, u = l.fill === void 0 || l.fill === "solid", d = l, f = h(r.path, c, t.flattenTolerance, i);
|
|
95
|
-
if (f.indices.length === 0) return;
|
|
96
|
-
let p = !!(c.vertexColors && c.vertexColors.length > 0), m = v(t, l, p);
|
|
97
|
-
if (m === null || x(t, f, m)) return;
|
|
98
|
-
let g = p ? t.meshCache.uploadTransient(f) : t.meshCache.uploadRecurring(f);
|
|
99
|
-
if (!u && !p) {
|
|
100
|
-
M(t, l, g);
|
|
101
|
-
return;
|
|
102
|
-
}
|
|
103
|
-
let _ = t.gl;
|
|
104
|
-
if (p) {
|
|
105
|
-
let r = t.pathFillVColor;
|
|
106
|
-
_.useProgram(r.handle), _.bindVertexArray(g.vao), o(t, r), s(t, r, u ? d.color : "#ffffff", l.opacity), a(t, r);
|
|
107
|
-
let i = D(_, r, c.vertexColors, g);
|
|
108
|
-
n(t), e(t, g.indexCount, t.gl.UNSIGNED_INT), O(_, i), _.bindVertexArray(null);
|
|
109
|
-
return;
|
|
110
|
-
}
|
|
111
|
-
_.useProgram(t.pathFill.handle), _.bindVertexArray(g.vao), o(t, t.pathFill), s(t, t.pathFill, d.color, d.opacity), a(t, t.pathFill), n(t), e(t, g.indexCount, t.gl.UNSIGNED_INT), _.bindVertexArray(null);
|
|
112
|
-
}
|
|
113
|
-
var z = /* @__PURE__ */ new WeakMap();
|
|
114
|
-
function B(e) {
|
|
115
|
-
let t = z.get(e);
|
|
116
|
-
return t === void 0 && (t = e.map((e) => e * 2), z.set(e, t)), t;
|
|
117
|
-
}
|
|
118
|
-
function V(n, r, i, c) {
|
|
119
|
-
let u = r.stroke, d = u.paint, f = d.fill === void 0 || d.fill === "solid", p = d, g = {
|
|
120
|
-
...u,
|
|
121
|
-
width: m(u.width ?? 1, 1) * 2,
|
|
122
|
-
...u.vertexWidths ? { vertexWidths: B(u.vertexWidths) } : {},
|
|
123
|
-
align: "center"
|
|
124
|
-
}, _ = !!(u.vertexColors && u.vertexColors.length > 0), v = l(n, r.path), y = h(r.path, g, n.flattenTolerance, c);
|
|
125
|
-
if (y.indices.length === 0) return;
|
|
126
|
-
let b = _ ? n.meshCache.uploadTransient(y) : n.meshCache.uploadRecurring(y), x = n.gl, S = _ ? n.pathFillVColor : n.pathFill;
|
|
127
|
-
x.useProgram(S.handle), o(n, S), x.enable(x.STENCIL_TEST), x.colorMask(!1, !1, !1, !1), x.stencilMask(1), x.stencilFunc(x.ALWAYS, 1, 1), x.stencilOp(x.KEEP, x.KEEP, v.requiresStencil ? x.INVERT : x.REPLACE), x.bindVertexArray(v.vao), e(n, v.indexCount, n.gl.UNSIGNED_INT);
|
|
128
|
-
let C = t(n.clipDepth);
|
|
129
|
-
x.colorMask(!0, !0, !0, !0), i === "inner" ? x.stencilFunc(x.EQUAL, C | 1, C | 1) : x.stencilFunc(x.EQUAL, C, C | 1), x.stencilOp(x.KEEP, x.KEEP, x.KEEP);
|
|
130
|
-
let w = S;
|
|
131
|
-
if (_ ? (s(n, S, f ? p.color : "#ffffff", d.opacity), a(n, S)) : w = j(n, d), !w) {
|
|
132
|
-
x.stencilMask(1), x.clear(x.STENCIL_BUFFER_BIT), x.disable(x.STENCIL_TEST), x.bindVertexArray(null);
|
|
133
|
-
return;
|
|
134
|
-
}
|
|
135
|
-
x.bindVertexArray(b.vao);
|
|
136
|
-
let T = _ ? D(x, w, u.vertexColors, b) : null;
|
|
137
|
-
e(n, b.indexCount, n.gl.UNSIGNED_INT), x.stencilMask(1), x.clear(x.STENCIL_BUFFER_BIT), x.disable(x.STENCIL_TEST), T && O(x, T), x.bindVertexArray(null);
|
|
138
|
-
}
|
|
139
|
-
//#endregion
|
|
140
|
-
export { T as drawPath, M as drawPathFillByKind };
|
|
141
|
-
|
|
142
|
-
//# sourceMappingURL=pathPaint.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"pathPaint.js","names":["drawPath","cmd","drawPathFill","ctx","drawPathStroke","fill","isSolid","hasVColors","solid","paint","batchPaint","pushRampRect","pushRect","mesh","fillMesh","tryStageFill","handle","meshHandle","drawPathFillVColor","drawPathFillStencil","drawPathFillByKind","attachVertexColors","vbo","gl","expandAnchorColors","perAnchor","location","prog","detachVertexColors","aA","aB","aT","n","out","i","a4","b4","t","setProjAndModel","setSolidPaintUniforms","setColorMatrixUniforms","colors","beginParityMask","drawTriangles","endParityMask","applyClipTest","bindPathFillByKind","kind","bindPathFillSolid","bindPathFillPattern","bindPathFillGradient","bind","getPaintKind","paintBindContext","bindPattern","bindGradient","resolveStrokeLengths","rawCmd","stroke","align","metric","spaces","metricKeepsRects","flushForOwnDraw","drawPathStrokeStenciled","drawPathStrokeUnclipped","width","resolveStrokeWidth","heads","cachedMarkerCommands","marker","strokeMesh","batched","DOUBLED_VERTEX_WIDTHS","doubledVertexWidths","doubled","widths","w","widerStroke","useVColor","fillHandle","fillMeshHandle","ribbonMesh","ribbonHandle","clipMask","ancestorMask","ribbonProg"],"sources":["../../../src/renderer/draw/pathPaint.ts"],"sourcesContent":["import type { Stroke, FillStyle } from '@weasel-js/paint';\nimport { getPaintKind } from 'core/paintKinds';\nimport type { PathDrawCommand } from '../DrawCommand';\nimport type { GLMeshHandle } from '../cache/GLMeshCache';\nimport type { ShaderProgram } from '../shaders/ShaderProgram';\nimport { resolveStrokeWidth } from 'features/paths/tessellate/stroke';\nimport { strokeMesh } from '../cache/strokeMeshCache';\nimport { resolveStrokeLengths, type StrokedPathCommand } from '../strokeLengths';\nimport { metricKeepsRects, type StrokeSpaces } from 'features/paths/tessellate/metric';\nimport { cachedMarkerCommands } from '../cache/markerCommandCache';\nimport type { DrawContext } from './drawContext';\nimport { drawTriangles } from './drawTriangles';\nimport { fillMesh, meshHandle, fillMeshHandle } from './mesh';\nimport { setColorMatrixUniforms, setProjAndModel, setSolidPaintUniforms } from './uniforms';\nimport { applyClipTest, ancestorMask, beginParityMask, endParityMask } from './stencil';\nimport { flushForOwnDraw } from './clip';\nimport { pushRect, pushRampRect, tryStageFill } from './batch';\nimport { batchPaint } from './gradient';\nimport { paintBindContext, bindPattern, bindGradient } from './paintBind';\n\nexport function drawPath(ctx: DrawContext, cmd: PathDrawCommand): void {\n if (cmd.fill) drawPathFill(ctx, cmd);\n // A stroke with no `paint` paints nothing, the way a node's `fill: null`\n // does. Commands arriving from a consumer painter or overlay can carry one.\n if (cmd.stroke?.paint) drawPathStroke(ctx, cmd as StrokedPathCommand);\n}\n\nfunction drawPathFill(ctx: DrawContext, cmd: PathDrawCommand): void {\n const fill = cmd.fill!;\n // Batchable: see `batchPaint`. A rect skips tessellation entirely; anything\n // else stages its mesh. Both also keep animated demos that mint a fresh Path\n // every frame from allocating a GL buffer per frame.\n const isSolid = fill.fill === undefined || fill.fill === 'solid';\n const hasVColors = !!(cmd.vertexColors && cmd.vertexColors.length > 0);\n const solid = fill as { color: string; opacity?: number };\n const paint = batchPaint(ctx, fill, hasVColors);\n if (paint === null) return;\n\n if (paint !== undefined && cmd.path.kind === 'rect') {\n if (paint.kind === 'ramp') pushRampRect(ctx, cmd.path, paint);\n else pushRect(ctx, cmd.path, paint);\n return;\n }\n\n const mesh = fillMesh(ctx, cmd.path);\n if (tryStageFill(ctx, mesh, paint)) return;\n\n const handle = meshHandle(ctx, mesh);\n if (isSolid && hasVColors) {\n drawPathFillVColor(ctx, cmd, solid, handle);\n } else if (handle.requiresStencil) {\n drawPathFillStencil(ctx, fill, handle);\n } else {\n drawPathFillByKind(ctx, fill, handle);\n }\n}\n\ninterface VertexColorBinding { vbo: WebGLBuffer; location: number | undefined }\n\n/** Point the bound mesh VAO's a_vertexColor at a fresh buffer of per-vertex\n * colors. Pair with `detachVertexColors` before the VAO is unbound. */\nfunction attachVertexColors(\n gl: WebGL2RenderingContext, prog: ShaderProgram, perAnchor: number[], handle: GLMeshHandle,\n): VertexColorBinding {\n const vbo = gl.createBuffer();\n if (!vbo) throw new Error('attachVertexColors: createBuffer returned null');\n gl.bindBuffer(gl.ARRAY_BUFFER, vbo);\n gl.bufferData(gl.ARRAY_BUFFER, expandAnchorColors(perAnchor, handle), gl.DYNAMIC_DRAW);\n const location = prog.attribute('a_vertexColor');\n if (location !== undefined) {\n gl.enableVertexAttribArray(location);\n gl.vertexAttribPointer(location, 4, gl.FLOAT, false, 0, 0);\n }\n return { vbo, location };\n}\n\n// Order matters: a buffer deleted after its VAO is unbound stays attached to\n// that VAO and is not freed until the mesh is, and one deleted while its\n// attribute is still enabled leaves the VAO unable to draw.\nfunction detachVertexColors(gl: WebGL2RenderingContext, { vbo, location }: VertexColorBinding): void {\n if (location !== undefined) gl.disableVertexAttribArray(location);\n gl.deleteBuffer(vbo);\n}\n\nfunction expandAnchorColors(perAnchor: number[], handle: GLMeshHandle): Float32Array {\n const aA = handle.anchorA;\n const aB = handle.anchorB;\n const aT = handle.anchorT;\n if (!aA || !aB || !aT) {\n // Legacy fallback: mesh lacks anchor params (e.g. non-path mesh). Treat\n // the caller-provided array as already per-vertex.\n return new Float32Array(perAnchor);\n }\n const n = aA.length;\n const out = new Float32Array(n * 4);\n for (let i = 0; i < n; i++) {\n const a4 = aA[i] * 4;\n const b4 = aB[i] * 4;\n const t = aT[i];\n out[i * 4 + 0] = perAnchor[a4 + 0] + (perAnchor[b4 + 0] - perAnchor[a4 + 0]) * t;\n out[i * 4 + 1] = perAnchor[a4 + 1] + (perAnchor[b4 + 1] - perAnchor[a4 + 1]) * t;\n out[i * 4 + 2] = perAnchor[a4 + 2] + (perAnchor[b4 + 2] - perAnchor[a4 + 2]) * t;\n out[i * 4 + 3] = perAnchor[a4 + 3] + (perAnchor[b4 + 3] - perAnchor[a4 + 3]) * t;\n }\n return out;\n}\n\nfunction drawPathFillVColor(\n ctx: DrawContext,\n cmd: PathDrawCommand,\n fill: { color: string; opacity?: number },\n handle: GLMeshHandle,\n): void {\n const gl = ctx.gl;\n const prog = ctx.pathFillVColor;\n gl.useProgram(prog.handle);\n gl.bindVertexArray(handle.vao);\n setProjAndModel(ctx, prog);\n setSolidPaintUniforms(ctx, prog, fill.color, fill.opacity);\n setColorMatrixUniforms(ctx, prog);\n\n const colors = attachVertexColors(gl, prog, cmd.vertexColors!, handle);\n\n if (handle.requiresStencil) {\n beginParityMask(ctx, handle.indexCount);\n drawTriangles(ctx, handle.indexCount, ctx.gl.UNSIGNED_INT);\n endParityMask(ctx);\n } else {\n applyClipTest(ctx);\n drawTriangles(ctx, handle.indexCount, ctx.gl.UNSIGNED_INT);\n }\n detachVertexColors(gl, colors);\n gl.bindVertexArray(null);\n}\n\n/**\n * Bind the program, uniforms and textures for `fill`, and return the program.\n *\n * Split from the draw so a caller owning its own stencil state can paint\n * without `applyClipTest` clobbering it — `drawPathStrokeStenciled` clips a\n * doubled ribbon to one side of the silhouette, and `applyClipTest` at depth 0\n * disables the stencil test outright.\n */\nfunction bindPathFillByKind(ctx: DrawContext, fill: FillStyle): ShaderProgram | null {\n const kind = fill.fill ?? 'solid';\n if (kind === 'solid') return bindPathFillSolid(ctx, fill as { color: string; opacity?: number });\n if (kind === 'pattern') return bindPathFillPattern(ctx, fill as Extract<FillStyle, { fill: 'pattern' }>);\n if (kind === 'linear-gradient' || kind === 'radial-gradient' || kind === 'conic-gradient') {\n return bindPathFillGradient(ctx, fill as Extract<FillStyle, { fill: 'linear-gradient' | 'radial-gradient' | 'conic-gradient' }>);\n }\n const bind = getPaintKind(kind)?.bind;\n return bind ? bind(paintBindContext(ctx), fill) : null;\n}\n\nexport function drawPathFillByKind(ctx: DrawContext, fill: FillStyle, handle: GLMeshHandle): void {\n const prog = bindPathFillByKind(ctx, fill);\n if (!prog) return;\n const gl = ctx.gl;\n gl.bindVertexArray(handle.vao);\n applyClipTest(ctx);\n drawTriangles(ctx, handle.indexCount, ctx.gl.UNSIGNED_INT);\n gl.bindVertexArray(null);\n}\n\nfunction bindPathFillSolid(\n ctx: DrawContext,\n fill: { color: string; opacity?: number },\n): ShaderProgram {\n const prog = ctx.pathFill;\n ctx.gl.useProgram(prog.handle);\n setProjAndModel(ctx, prog);\n setSolidPaintUniforms(ctx, prog, fill.color, fill.opacity);\n setColorMatrixUniforms(ctx, prog);\n return prog;\n}\n\nfunction bindPathFillPattern(\n ctx: DrawContext,\n fill: Extract<FillStyle, { fill: 'pattern' }>,\n): ShaderProgram | null {\n return bindPattern(ctx, ctx.patternFill, fill, ctx.state.transform);\n}\n\nfunction bindPathFillGradient(\n ctx: DrawContext,\n fill: Extract<FillStyle, { fill: 'linear-gradient' | 'radial-gradient' | 'conic-gradient' }>,\n): ShaderProgram | null {\n return bindGradient(ctx, ctx.gradFill, fill, ctx.state.transform);\n}\n\nfunction drawPathFillStencil(ctx: DrawContext, fill: FillStyle, handle: GLMeshHandle): void {\n const gl = ctx.gl;\n gl.useProgram(ctx.pathFill.handle);\n gl.bindVertexArray(handle.vao);\n setProjAndModel(ctx, ctx.pathFill);\n\n beginParityMask(ctx, handle.indexCount);\n // The paint binds here, not above: pass 1 runs under a false colorMask, so a\n // uniform missed here renders black while the GL-recorder tests still pass.\n // Not `drawPathFillByKind` — its `applyClipTest` would disable this stencil.\n if (bindPathFillByKind(ctx, fill)) {\n drawTriangles(ctx, handle.indexCount, ctx.gl.UNSIGNED_INT);\n }\n\n endParityMask(ctx);\n gl.bindVertexArray(null);\n}\n\nfunction drawPathStroke(ctx: DrawContext, rawCmd: StrokedPathCommand): void {\n const { cmd, spaces } = resolveStrokeLengths(ctx.state.transform, rawCmd);\n const stroke = cmd.stroke;\n const align = stroke.align ?? 'center';\n const metric = spaces.ribbon?.metric;\n // A rect the metric turns is no longer a rect in the space its ribbon is\n // built in, so it aligns through the stencil like any polygon.\n const stenciled = cmd.path.kind === 'polygon' || (metric !== undefined && !metricKeepsRects(metric));\n if (stenciled && align !== 'center') {\n flushForOwnDraw(ctx);\n drawPathStrokeStenciled(ctx, cmd, align, spaces);\n } else {\n drawPathStrokeUnclipped(ctx, cmd, spaces);\n }\n // After the ribbon, so a head sits on top of the line it caps.\n const width = resolveStrokeWidth(stroke.width ?? 1, 1);\n const heads = cachedMarkerCommands(cmd.path, rawCmd.stroke, stroke, width, ctx.flattenTolerance, spaces);\n for (const marker of heads) drawPath(ctx, marker);\n}\n\nfunction drawPathStrokeUnclipped(ctx: DrawContext, cmd: StrokedPathCommand, spaces: StrokeSpaces): void {\n const stroke = cmd.stroke;\n const paint = stroke.paint;\n const isSolid = paint.fill === undefined || paint.fill === 'solid';\n const solid = paint as { color: string; opacity?: number };\n const mesh = strokeMesh(cmd.path, stroke, ctx.flattenTolerance, spaces);\n if (mesh.indices.length === 0) return;\n\n // Staged, a ribbon allocates nothing and joins the fill it sits on.\n const hasVColors = !!(stroke.vertexColors && stroke.vertexColors.length > 0);\n const batched = batchPaint(ctx, paint, hasVColors);\n if (batched === null) return;\n if (tryStageFill(ctx, mesh, batched)) return;\n\n // The VAO records the per-draw color attribute, so a vertex-colored draw\n // cannot share a persistent one with a draw that has no vertex colors.\n const handle = hasVColors\n ? ctx.meshCache.uploadTransient(mesh)\n : ctx.meshCache.uploadRecurring(mesh);\n\n if (!isSolid && !hasVColors) {\n drawPathFillByKind(ctx, paint, handle);\n return;\n }\n\n const gl = ctx.gl;\n if (hasVColors) {\n const prog = ctx.pathFillVColor;\n gl.useProgram(prog.handle);\n gl.bindVertexArray(handle.vao);\n setProjAndModel(ctx, prog);\n // Per-vertex colors are the paint here; a non-solid base has no single\n // color to multiply by, so white leaves the vertex colors unmodified.\n setSolidPaintUniforms(ctx, prog, isSolid ? solid.color : '#ffffff', paint.opacity);\n setColorMatrixUniforms(ctx, prog);\n\n const colors = attachVertexColors(gl, prog, stroke.vertexColors!, handle);\n applyClipTest(ctx);\n drawTriangles(ctx, handle.indexCount, ctx.gl.UNSIGNED_INT);\n detachVertexColors(gl, colors);\n gl.bindVertexArray(null);\n return;\n }\n\n gl.useProgram(ctx.pathFill.handle);\n gl.bindVertexArray(handle.vao);\n setProjAndModel(ctx, ctx.pathFill);\n setSolidPaintUniforms(ctx, ctx.pathFill, solid.color, solid.opacity);\n setColorMatrixUniforms(ctx, ctx.pathFill);\n applyClipTest(ctx);\n drawTriangles(ctx, handle.indexCount, ctx.gl.UNSIGNED_INT);\n gl.bindVertexArray(null);\n}\n\n/** The ribbon cache compares `vertexWidths` by reference, so the doubled copy\n * has to be the same array on every frame the source array is. */\nconst DOUBLED_VERTEX_WIDTHS = new WeakMap<number[], number[]>();\n\nfunction doubledVertexWidths(widths: number[]): number[] {\n let doubled = DOUBLED_VERTEX_WIDTHS.get(widths);\n if (doubled === undefined) {\n doubled = widths.map((w) => w * 2);\n DOUBLED_VERTEX_WIDTHS.set(widths, doubled);\n }\n return doubled;\n}\n\nfunction drawPathStrokeStenciled(\n ctx: DrawContext,\n cmd: StrokedPathCommand,\n align: 'inner' | 'outer',\n spaces: StrokeSpaces,\n): void {\n const stroke = cmd.stroke;\n const paint = stroke.paint;\n const isSolid = paint.fill === undefined || paint.fill === 'solid';\n const solid = paint as { color: string; opacity?: number };\n const widerStroke: Stroke = {\n ...stroke,\n width: resolveStrokeWidth(stroke.width ?? 1, 1) * 2,\n ...(stroke.vertexWidths ? { vertexWidths: doubledVertexWidths(stroke.vertexWidths) } : {}),\n align: 'center',\n };\n\n const useVColor = !!(stroke.vertexColors && stroke.vertexColors.length > 0);\n\n const fillHandle = fillMeshHandle(ctx, cmd.path);\n const ribbonMesh = strokeMesh(cmd.path, widerStroke, ctx.flattenTolerance, spaces);\n if (ribbonMesh.indices.length === 0) return;\n // The VAO records the per-draw color attribute, so a vertex-colored draw\n // cannot share a persistent one with a draw that has no vertex colors.\n const ribbonHandle = useVColor\n ? ctx.meshCache.uploadTransient(ribbonMesh)\n : ctx.meshCache.uploadRecurring(ribbonMesh);\n\n const gl = ctx.gl;\n const prog = useVColor ? ctx.pathFillVColor : ctx.pathFill;\n gl.useProgram(prog.handle);\n setProjAndModel(ctx, prog);\n\n gl.enable(gl.STENCIL_TEST);\n gl.colorMask(false, false, false, false);\n gl.stencilMask(0x01);\n gl.stencilFunc(gl.ALWAYS, 1, 0x01);\n // An even-odd fill is one fan per contour, and only parity cuts its holes.\n gl.stencilOp(gl.KEEP, gl.KEEP, fillHandle.requiresStencil ? gl.INVERT : gl.REPLACE);\n gl.bindVertexArray(fillHandle.vao);\n drawTriangles(ctx, fillHandle.indexCount, ctx.gl.UNSIGNED_INT);\n\n const clipMask = ancestorMask(ctx.clipDepth);\n gl.colorMask(true, true, true, true);\n if (align === 'inner') {\n gl.stencilFunc(gl.EQUAL, clipMask | 0x01, clipMask | 0x01);\n } else {\n gl.stencilFunc(gl.EQUAL, clipMask, clipMask | 0x01);\n }\n gl.stencilOp(gl.KEEP, gl.KEEP, gl.KEEP);\n // Bind the paint here rather than through `drawPathFillByKind`: that calls\n // `applyClipTest`, which at clip depth 0 disables the stencil test this\n // function just set up to clip the ribbon to one side.\n let ribbonProg: ShaderProgram | null = prog;\n if (useVColor) {\n // Per-vertex colors are the paint here; a non-solid base has no single\n // color to multiply by, so white leaves the vertex colors unmodified.\n setSolidPaintUniforms(ctx, prog, isSolid ? solid.color : '#ffffff', paint.opacity);\n setColorMatrixUniforms(ctx, prog);\n } else {\n ribbonProg = bindPathFillByKind(ctx, paint);\n }\n if (!ribbonProg) {\n gl.stencilMask(0x01);\n gl.clear(gl.STENCIL_BUFFER_BIT);\n gl.disable(gl.STENCIL_TEST);\n gl.bindVertexArray(null);\n return;\n }\n gl.bindVertexArray(ribbonHandle.vao);\n\n const colors = useVColor\n ? attachVertexColors(gl, ribbonProg, stroke.vertexColors!, ribbonHandle)\n : null;\n\n drawTriangles(ctx, ribbonHandle.indexCount, ctx.gl.UNSIGNED_INT);\n\n // Narrow to bit 0 first: clear only zeroes bits the mask enables, and\n // pushClip owns bits 1-7.\n gl.stencilMask(0x01);\n gl.clear(gl.STENCIL_BUFFER_BIT);\n gl.disable(gl.STENCIL_TEST);\n if (colors) detachVertexColors(gl, colors);\n gl.bindVertexArray(null);\n}\n"],"mappings":";;;;;;;;;;;;;;;AAoBA,SAAgBA,EAAS,GAAkB,GAA4B;CAIrE,AAHIC,EAAI,QAAMC,EAAaC,GAAKF,CAAG,GAG/BA,EAAI,QAAQ,SAAOG,EAAeD,GAAKF,CAAyB;AACtE;AAEA,SAASC,EAAa,GAAkB,GAA4B;CAClE,IAAMG,IAAOJ,EAAI,MAIXK,IAAUD,EAAK,SAAS,KAAA,KAAaA,EAAK,SAAS,SACnDE,IAAa,CAAC,EAAEN,EAAI,gBAAgBA,EAAI,aAAa,SAAS,IAC9DO,IAAQH,GACRI,IAAQC,EAAWP,GAAKE,GAAME,CAAU;CAC9C,IAAIE,MAAU,MAAM;CAEpB,IAAIA,MAAU,KAAA,KAAaR,EAAI,KAAK,SAAS,QAAQ;EACnD,AAAIQ,EAAM,SAAS,SAAQE,EAAaR,GAAKF,EAAI,MAAMQ,CAAK,IACvDG,EAAST,GAAKF,EAAI,MAAMQ,CAAK;EAClC;CACF;CAEA,IAAMI,IAAOC,EAASX,GAAKF,EAAI,IAAI;CACnC,IAAIc,EAAaZ,GAAKU,GAAMJ,CAAK,GAAG;CAEpC,IAAMO,IAASC,EAAWd,GAAKU,CAAI;CACnC,AAAIP,KAAWC,IACbW,EAAmBf,GAAKF,GAAKO,GAAOQ,CAAM,IACjCA,EAAO,kBAChBG,EAAoBhB,GAAKE,GAAMW,CAAM,IAErCI,EAAmBjB,GAAKE,GAAMW,CAAM;AAExC;AAMA,SAASK,EACP,GAA4B,GAAqB,GAAqB,GAClD;CACpB,IAAMC,IAAMC,EAAG,aAAa;CAC5B,IAAI,CAACD,GAAK,MAAU,MAAM,gDAAgD;CAE1E,AADAC,EAAG,WAAWA,EAAG,cAAcD,CAAG,GAClCC,EAAG,WAAWA,EAAG,cAAcC,EAAmBC,GAAWT,CAAM,GAAGO,EAAG,YAAY;CACrF,IAAMG,IAAWC,EAAK,UAAU,eAAe;CAK/C,OAJID,MAAa,KAAA,MACfH,EAAG,wBAAwBG,CAAQ,GACnCH,EAAG,oBAAoBG,GAAU,GAAGH,EAAG,OAAO,IAAO,GAAG,CAAC,IAEpD;EAAE;EAAK;CAAS;AACzB;AAKA,SAASK,EAAmB,GAA4B,EAAE,QAAK,eAAsC;CAEnG,AADIF,MAAa,KAAA,KAAWH,EAAG,yBAAyBG,CAAQ,GAChEH,EAAG,aAAaD,CAAG;AACrB;AAEA,SAASE,EAAmB,GAAqB,GAAoC;CACnF,IAAMK,IAAKb,EAAO,SACZc,IAAKd,EAAO,SACZe,IAAKf,EAAO;CAClB,IAAI,CAACa,KAAM,CAACC,KAAM,CAACC,GAGjB,OAAO,IAAI,aAAaN,CAAS;CAEnC,IAAMO,IAAIH,EAAG,QACPI,IAAM,IAAI,aAAaD,IAAI,CAAC;CAClC,KAAK,IAAIE,IAAI,GAAGA,IAAIF,GAAG,KAAK;EAC1B,IAAMG,IAAKN,EAAGK,KAAK,GACbE,IAAKN,EAAGI,KAAK,GACbG,IAAIN,EAAGG;EAIb,AAHA,EAAIA,IAAI,IAAI,KAAKT,EAAUU,IAAK,MAAMV,EAAUW,IAAK,KAAKX,EAAUU,IAAK,MAAME,GAC/E,EAAIH,IAAI,IAAI,KAAKT,EAAUU,IAAK,MAAMV,EAAUW,IAAK,KAAKX,EAAUU,IAAK,MAAME,GAC/E,EAAIH,IAAI,IAAI,KAAKT,EAAUU,IAAK,MAAMV,EAAUW,IAAK,KAAKX,EAAUU,IAAK,MAAME,GAC/E,EAAIH,IAAI,IAAI,KAAKT,EAAUU,IAAK,MAAMV,EAAUW,IAAK,KAAKX,EAAUU,IAAK,MAAME;CACjF;CACA,OAAOJ;AACT;AAEA,SAASf,EACP,GACA,GACA,GACA,GACM;CACN,IAAMK,IAAKpB,EAAI,IACTwB,IAAOxB,EAAI;CAKjB,AAJAoB,EAAG,WAAWI,EAAK,MAAM,GACzBJ,EAAG,gBAAgBP,EAAO,GAAG,GAC7BsB,EAAgBnC,GAAKwB,CAAI,GACzBY,EAAsBpC,GAAKwB,GAAMtB,EAAK,OAAOA,EAAK,OAAO,GACzDmC,EAAuBrC,GAAKwB,CAAI;CAEhC,IAAMc,IAASpB,EAAmBE,GAAII,GAAM1B,EAAI,cAAee,CAAM;CAWrE,AATIA,EAAO,mBACT0B,EAAgBvC,GAAKa,EAAO,UAAU,GACtC2B,EAAcxC,GAAKa,EAAO,YAAYb,EAAI,GAAG,YAAY,GACzDyC,EAAczC,CAAG,MAEjB0C,EAAc1C,CAAG,GACjBwC,EAAcxC,GAAKa,EAAO,YAAYb,EAAI,GAAG,YAAY,IAE3DyB,EAAmBL,GAAIkB,CAAM,GAC7BlB,EAAG,gBAAgB,IAAI;AACzB;AAUA,SAASuB,EAAmB,GAAkB,GAAuC;CACnF,IAAMC,IAAO1C,EAAK,QAAQ;CAC1B,IAAI0C,MAAS,SAAS,OAAOC,EAAkB7C,GAAKE,CAA2C;CAC/F,IAAI0C,MAAS,WAAW,OAAOE,EAAoB9C,GAAKE,CAA+C;CACvG,IAAI0C,MAAS,qBAAqBA,MAAS,qBAAqBA,MAAS,kBACvE,OAAOG,EAAqB/C,GAAKE,CAA8F;CAEjI,IAAM8C,IAAOC,EAAaL,CAAI,CAAC,EAAE;CACjC,OAAOI,IAAOA,EAAKE,EAAiBlD,CAAG,GAAGE,CAAI,IAAI;AACpD;AAEA,SAAgBe,EAAmB,GAAkB,GAAiB,GAA4B;CAEhG,IAAI,CADS0B,EAAmB3C,GAAKE,CAChC,GAAM;CACX,IAAMkB,IAAKpB,EAAI;CAIf,AAHAoB,EAAG,gBAAgBP,EAAO,GAAG,GAC7B6B,EAAc1C,CAAG,GACjBwC,EAAcxC,GAAKa,EAAO,YAAYb,EAAI,GAAG,YAAY,GACzDoB,EAAG,gBAAgB,IAAI;AACzB;AAEA,SAASyB,EACP,GACA,GACe;CACf,IAAMrB,IAAOxB,EAAI;CAKjB,OAJAA,EAAI,GAAG,WAAWwB,EAAK,MAAM,GAC7BW,EAAgBnC,GAAKwB,CAAI,GACzBY,EAAsBpC,GAAKwB,GAAMtB,EAAK,OAAOA,EAAK,OAAO,GACzDmC,EAAuBrC,GAAKwB,CAAI,GACzBA;AACT;AAEA,SAASsB,EACP,GACA,GACsB;CACtB,OAAOK,EAAYnD,GAAKA,EAAI,aAAaE,GAAMF,EAAI,MAAM,SAAS;AACpE;AAEA,SAAS+C,EACP,GACA,GACsB;CACtB,OAAOK,EAAapD,GAAKA,EAAI,UAAUE,GAAMF,EAAI,MAAM,SAAS;AAClE;AAEA,SAASgB,EAAoB,GAAkB,GAAiB,GAA4B;CAC1F,IAAMI,IAAKpB,EAAI;CAcf,AAbAoB,EAAG,WAAWpB,EAAI,SAAS,MAAM,GACjCoB,EAAG,gBAAgBP,EAAO,GAAG,GAC7BsB,EAAgBnC,GAAKA,EAAI,QAAQ,GAEjCuC,EAAgBvC,GAAKa,EAAO,UAAU,GAIlC8B,EAAmB3C,GAAKE,CAAI,KAC9BsC,EAAcxC,GAAKa,EAAO,YAAYb,EAAI,GAAG,YAAY,GAG3DyC,EAAczC,CAAG,GACjBoB,EAAG,gBAAgB,IAAI;AACzB;AAEA,SAASnB,EAAe,GAAkB,GAAkC;CAC1E,IAAM,EAAE,QAAK,cAAWoD,EAAqBrD,EAAI,MAAM,WAAWsD,CAAM,GAClEC,IAASzD,EAAI,QACb0D,IAAQD,EAAO,SAAS,UACxBE,IAASC,EAAO,QAAQ;CAI9B,CADkB5D,EAAI,KAAK,SAAS,aAAc2D,MAAW,KAAA,KAAa,CAACE,EAAiBF,CAAM,MACjFD,MAAU,YACzBI,EAAgB5D,CAAG,GACnB6D,EAAwB7D,GAAKF,GAAK0D,GAAOE,CAAM,KAE/CI,EAAwB9D,GAAKF,GAAK4D,CAAM;CAG1C,IAAMK,IAAQC,EAAmBT,EAAO,SAAS,GAAG,CAAC,GAC/CU,IAAQC,EAAqBpE,EAAI,MAAMwD,EAAO,QAAQC,GAAQQ,GAAO/D,EAAI,kBAAkB0D,CAAM;CACvG,KAAK,IAAMS,KAAUF,GAAO,EAASjE,GAAKmE,CAAM;AAClD;AAEA,SAASL,EAAwB,GAAkB,GAAyB,GAA4B;CACtG,IAAMP,IAASzD,EAAI,QACbQ,IAAQiD,EAAO,OACfpD,IAAUG,EAAM,SAAS,KAAA,KAAaA,EAAM,SAAS,SACrDD,IAAQC,GACRI,IAAO0D,EAAWtE,EAAI,MAAMyD,GAAQvD,EAAI,kBAAkB0D,CAAM;CACtE,IAAIhD,EAAK,QAAQ,WAAW,GAAG;CAG/B,IAAMN,IAAa,CAAC,EAAEmD,EAAO,gBAAgBA,EAAO,aAAa,SAAS,IACpEc,IAAU9D,EAAWP,GAAKM,GAAOF,CAAU;CAEjD,IADIiE,MAAY,QACZzD,EAAaZ,GAAKU,GAAM2D,CAAO,GAAG;CAItC,IAAMxD,IAAST,IACXJ,EAAI,UAAU,gBAAgBU,CAAI,IAClCV,EAAI,UAAU,gBAAgBU,CAAI;CAEtC,IAAI,CAACP,KAAW,CAACC,GAAY;EAC3B,EAAmBJ,GAAKM,GAAOO,CAAM;EACrC;CACF;CAEA,IAAMO,IAAKpB,EAAI;CACf,IAAII,GAAY;EACd,IAAMoB,IAAOxB,EAAI;EAOjB,AANAoB,EAAG,WAAWI,EAAK,MAAM,GACzBJ,EAAG,gBAAgBP,EAAO,GAAG,GAC7BsB,EAAgBnC,GAAKwB,CAAI,GAGzBY,EAAsBpC,GAAKwB,GAAMrB,IAAUE,EAAM,QAAQ,WAAWC,EAAM,OAAO,GACjF+B,EAAuBrC,GAAKwB,CAAI;EAEhC,IAAMc,IAASpB,EAAmBE,GAAII,GAAM+B,EAAO,cAAe1C,CAAM;EAIxE,AAHA6B,EAAc1C,CAAG,GACjBwC,EAAcxC,GAAKa,EAAO,YAAYb,EAAI,GAAG,YAAY,GACzDyB,EAAmBL,GAAIkB,CAAM,GAC7BlB,EAAG,gBAAgB,IAAI;EACvB;CACF;CASA,AAPAA,EAAG,WAAWpB,EAAI,SAAS,MAAM,GACjCoB,EAAG,gBAAgBP,EAAO,GAAG,GAC7BsB,EAAgBnC,GAAKA,EAAI,QAAQ,GACjCoC,EAAsBpC,GAAKA,EAAI,UAAUK,EAAM,OAAOA,EAAM,OAAO,GACnEgC,EAAuBrC,GAAKA,EAAI,QAAQ,GACxC0C,EAAc1C,CAAG,GACjBwC,EAAcxC,GAAKa,EAAO,YAAYb,EAAI,GAAG,YAAY,GACzDoB,EAAG,gBAAgB,IAAI;AACzB;AAIA,IAAMkD,oBAAwB,IAAI,QAA4B;AAE9D,SAASC,EAAoB,GAA4B;CACvD,IAAIC,IAAUF,EAAsB,IAAIG,CAAM;CAK9C,OAJID,MAAY,KAAA,MACd,IAAUC,EAAO,KAAK,MAAMC,IAAI,CAAC,GACjCJ,EAAsB,IAAIG,GAAQD,CAAO,IAEpCA;AACT;AAEA,SAASX,EACP,GACA,GACA,GACA,GACM;CACN,IAAMN,IAASzD,EAAI,QACbQ,IAAQiD,EAAO,OACfpD,IAAUG,EAAM,SAAS,KAAA,KAAaA,EAAM,SAAS,SACrDD,IAAQC,GACRqE,IAAsB;EAC1B,GAAGpB;EACH,OAAOS,EAAmBT,EAAO,SAAS,GAAG,CAAC,IAAI;EAClD,GAAIA,EAAO,eAAe,EAAE,cAAcgB,EAAoBhB,EAAO,YAAY,EAAE,IAAI,CAAC;EACxF,OAAO;CACT,GAEMqB,IAAY,CAAC,EAAErB,EAAO,gBAAgBA,EAAO,aAAa,SAAS,IAEnEsB,IAAaC,EAAe9E,GAAKF,EAAI,IAAI,GACzCiF,IAAaX,EAAWtE,EAAI,MAAM6E,GAAa3E,EAAI,kBAAkB0D,CAAM;CACjF,IAAIqB,EAAW,QAAQ,WAAW,GAAG;CAGrC,IAAMC,IAAeJ,IACjB5E,EAAI,UAAU,gBAAgB+E,CAAU,IACxC/E,EAAI,UAAU,gBAAgB+E,CAAU,GAEtC3D,IAAKpB,EAAI,IACTwB,IAAOoD,IAAY5E,EAAI,iBAAiBA,EAAI;CAWlD,AAVAoB,EAAG,WAAWI,EAAK,MAAM,GACzBW,EAAgBnC,GAAKwB,CAAI,GAEzBJ,EAAG,OAAOA,EAAG,YAAY,GACzBA,EAAG,UAAU,IAAO,IAAO,IAAO,EAAK,GACvCA,EAAG,YAAY,CAAI,GACnBA,EAAG,YAAYA,EAAG,QAAQ,GAAG,CAAI,GAEjCA,EAAG,UAAUA,EAAG,MAAMA,EAAG,MAAMyD,EAAW,kBAAkBzD,EAAG,SAASA,EAAG,OAAO,GAClFA,EAAG,gBAAgByD,EAAW,GAAG,GACjCrC,EAAcxC,GAAK6E,EAAW,YAAY7E,EAAI,GAAG,YAAY;CAE7D,IAAMiF,IAAWC,EAAalF,EAAI,SAAS;CAO3C,AANAoB,EAAG,UAAU,IAAM,IAAM,IAAM,EAAI,GAC/BoC,MAAU,UACZpC,EAAG,YAAYA,EAAG,OAAO6D,IAAW,GAAMA,IAAW,CAAI,IAEzD7D,EAAG,YAAYA,EAAG,OAAO6D,GAAUA,IAAW,CAAI,GAEpD7D,EAAG,UAAUA,EAAG,MAAMA,EAAG,MAAMA,EAAG,IAAI;CAItC,IAAI+D,IAAmC3D;CASvC,IARIoD,KAGFxC,EAAsBpC,GAAKwB,GAAMrB,IAAUE,EAAM,QAAQ,WAAWC,EAAM,OAAO,GACjF+B,EAAuBrC,GAAKwB,CAAI,KAEhC,IAAamB,EAAmB3C,GAAKM,CAAK,GAExC,CAAC6E,GAAY;EAIf,AAHA/D,EAAG,YAAY,CAAI,GACnBA,EAAG,MAAMA,EAAG,kBAAkB,GAC9BA,EAAG,QAAQA,EAAG,YAAY,GAC1BA,EAAG,gBAAgB,IAAI;EACvB;CACF;CACA,EAAG,gBAAgB4D,EAAa,GAAG;CAEnC,IAAM1C,IAASsC,IACX1D,EAAmBE,GAAI+D,GAAY5B,EAAO,cAAeyB,CAAY,IACrE;CAUJ,AARAxC,EAAcxC,GAAKgF,EAAa,YAAYhF,EAAI,GAAG,YAAY,GAI/DoB,EAAG,YAAY,CAAI,GACnBA,EAAG,MAAMA,EAAG,kBAAkB,GAC9BA,EAAG,QAAQA,EAAG,YAAY,GACtBkB,KAAQb,EAAmBL,GAAIkB,CAAM,GACzClB,EAAG,gBAAgB,IAAI;AACzB"}
|
|
@@ -1,83 +0,0 @@
|
|
|
1
|
-
import { drawTriangles as e } from "./drawTriangles.js";
|
|
2
|
-
import { setProjAndModel as t } from "./uniforms.js";
|
|
3
|
-
import { returnToRenderTarget as n } from "./effects.js";
|
|
4
|
-
import { BATCH_MODEL as r } from "./flushBatch.js";
|
|
5
|
-
import { getPaintKind as i } from "../../core/paintKinds.js";
|
|
6
|
-
import { paintBindContext as a } from "./paintBind.js";
|
|
7
|
-
//#region src/renderer/draw/scratchPass.ts
|
|
8
|
-
var o = {
|
|
9
|
-
vertices: new Float32Array([
|
|
10
|
-
0,
|
|
11
|
-
0,
|
|
12
|
-
1,
|
|
13
|
-
0,
|
|
14
|
-
1,
|
|
15
|
-
1,
|
|
16
|
-
0,
|
|
17
|
-
1
|
|
18
|
-
]),
|
|
19
|
-
indices: new Uint32Array([
|
|
20
|
-
0,
|
|
21
|
-
1,
|
|
22
|
-
2,
|
|
23
|
-
0,
|
|
24
|
-
2,
|
|
25
|
-
3
|
|
26
|
-
])
|
|
27
|
-
};
|
|
28
|
-
function s(r, s, c) {
|
|
29
|
-
let l = r.paintScratch, u = i(s.fill)?.bind;
|
|
30
|
-
if (!l || !u) return null;
|
|
31
|
-
let d = r.deviceWidth && r.widthCss > 0 ? r.deviceWidth / r.widthCss : 1, f = r.deviceWidth ?? Math.round(r.widthCss), p = r.deviceHeight ?? Math.round(r.heightCss), m = Math.max(0, Math.floor(c.x0 * d)), h = Math.max(0, Math.floor(c.y0 * d)), g = r.imageCache.maxTextureSide, _ = Math.min(g, Math.min(f, Math.ceil(c.x1 * d)) - m), v = Math.min(g, Math.min(p, Math.ceil(c.y1 * d)) - h);
|
|
32
|
-
if (!(_ > 0 && v > 0)) return null;
|
|
33
|
-
let y = m / d, b = h / d, x = _ / d, S = v / d, C = new Float32Array([
|
|
34
|
-
x,
|
|
35
|
-
0,
|
|
36
|
-
0,
|
|
37
|
-
0,
|
|
38
|
-
S,
|
|
39
|
-
0,
|
|
40
|
-
y,
|
|
41
|
-
b,
|
|
42
|
-
1
|
|
43
|
-
]), w = new Float32Array([
|
|
44
|
-
2 / x,
|
|
45
|
-
0,
|
|
46
|
-
0,
|
|
47
|
-
0,
|
|
48
|
-
2 / S,
|
|
49
|
-
0,
|
|
50
|
-
-1 - 2 * y / x,
|
|
51
|
-
-1 - 2 * b / S,
|
|
52
|
-
1
|
|
53
|
-
]), T = a(r), E = {
|
|
54
|
-
...T,
|
|
55
|
-
alpha: r.state.alpha,
|
|
56
|
-
maxTextureSize: T.maxTextureSize,
|
|
57
|
-
setProjAndModel: (e) => t(r, e, C, w)
|
|
58
|
-
}, D = r.gl, O = l.acquire(_, v), k = D.isEnabled(D.SCISSOR_TEST);
|
|
59
|
-
D.activeTexture(D.TEXTURE0), D.bindTexture(D.TEXTURE_2D, null), D.bindFramebuffer(D.FRAMEBUFFER, O.fbo), D.viewport(0, 0, _, v), D.disable(D.SCISSOR_TEST), D.disable(D.STENCIL_TEST), D.clear(D.COLOR_BUFFER_BIT), D.disable(D.BLEND);
|
|
60
|
-
let A = u(E, s);
|
|
61
|
-
return A && (D.bindVertexArray(r.meshCache.uploadRecurring(o).vao), e(r, o.indices.length, D.UNSIGNED_INT), D.bindVertexArray(null)), D.enable(D.BLEND), n(r, f, p, k), A ? {
|
|
62
|
-
texture: O.texture,
|
|
63
|
-
uvFromScreen: new Float32Array([
|
|
64
|
-
d / O.width,
|
|
65
|
-
0,
|
|
66
|
-
0,
|
|
67
|
-
0,
|
|
68
|
-
d / O.height,
|
|
69
|
-
0,
|
|
70
|
-
-m / O.width,
|
|
71
|
-
-h / O.height,
|
|
72
|
-
1
|
|
73
|
-
])
|
|
74
|
-
} : null;
|
|
75
|
-
}
|
|
76
|
-
function c(e, n, i) {
|
|
77
|
-
let a = e.gl;
|
|
78
|
-
return a.useProgram(n.handle), t(e, n, r), a.uniformMatrix3fv(n.uniform("u_worldInv"), !1, i.uvFromScreen), a.activeTexture(a.TEXTURE0), a.bindTexture(a.TEXTURE_2D, i.texture), a.uniform1i(n.uniform("u_sampler"), 0), n;
|
|
79
|
-
}
|
|
80
|
-
//#endregion
|
|
81
|
-
export { c as bindScratchPaint, s as renderPaintToScratch };
|
|
82
|
-
|
|
83
|
-
//# sourceMappingURL=scratchPass.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scratchPass.js","names":["UNIT_QUAD","renderPaintToScratch","scratch","ctx","bind","getPaintKind","fill","ratio","deviceW","deviceH","px0","rect","py0","maxSide","pw","ph","x0","y0","w","h","model","proj","base","paintBindContext","bindCtx","setProjAndModel","prog","gl","target","scissorWasOn","drawTriangles","returnToRenderTarget","bindScratchPaint","BATCH_MODEL","painted"],"sources":["../../../src/renderer/draw/scratchPass.ts"],"sourcesContent":["import type { FillStyle } from '@weasel-js/paint';\nimport { getPaintKind, type PaintBindContext } from 'core/paintKinds';\nimport type { ShaderProgram } from '../shaders/ShaderProgram';\nimport type { GlMat3 } from '../math/mat3';\nimport type { Mesh } from '@weasel-js/geom/tessellate';\nimport type { DrawContext } from './drawContext';\nimport { drawTriangles } from './drawTriangles';\nimport { setProjAndModel } from './uniforms';\nimport { returnToRenderTarget } from './effects';\nimport { BATCH_MODEL } from './flushBatch';\nimport { paintBindContext } from './paintBind';\n\nexport interface ScreenRect { x0: number; y0: number; x1: number; y1: number }\n\n/** The unit square, stretched over the region a scratch paint covers. */\nconst UNIT_QUAD: Mesh = {\n vertices: new Float32Array([0, 0, 1, 0, 1, 1, 0, 1]),\n indices: new Uint32Array([0, 1, 2, 0, 2, 3]),\n};\n\ninterface ScratchPaint {\n texture: WebGLTexture;\n /** Screen position → the texture coordinate the paint landed at there. */\n uvFromScreen: GlMat3;\n}\n\n/**\n * Render a registered kind's paint over `rect` (screen px) into the renderer's\n * scratch buffer, through the kind's own `bind` — so any kind that paints a\n * path paints this, with nothing asked of it beyond what a path asks.\n *\n * The region is snapped out to the device-pixel grid and clamped to the\n * drawing buffer, so each texel is one device pixel of the target and a glyph\n * fragment reads its own. The kind sees the same transform, alpha and paint\n * space it would for a path here; only the projection differs, aimed at the\n * scratch buffer instead of the target. No clip and no scissor apply inside:\n * the glyphs that sample the result are drawn under both.\n *\n * `null` when there is no scratch buffer, the region is empty, or the kind\n * declines the paint — and the glyphs then draw nothing, as the outline tier\n * does for a paint no kind binds.\n */\nexport function renderPaintToScratch(ctx: DrawContext, fill: FillStyle, rect: ScreenRect): ScratchPaint | null {\n const scratch = ctx.paintScratch;\n const bind = getPaintKind(fill.fill)?.bind;\n if (!scratch || !bind) return null;\n const ratio = ctx.deviceWidth && ctx.widthCss > 0 ? ctx.deviceWidth / ctx.widthCss : 1;\n const deviceW = ctx.deviceWidth ?? Math.round(ctx.widthCss);\n const deviceH = ctx.deviceHeight ?? Math.round(ctx.heightCss);\n const px0 = Math.max(0, Math.floor(rect.x0 * ratio));\n const py0 = Math.max(0, Math.floor(rect.y0 * ratio));\n const maxSide = ctx.imageCache.maxTextureSide;\n const pw = Math.min(maxSide, Math.min(deviceW, Math.ceil(rect.x1 * ratio)) - px0);\n const ph = Math.min(maxSide, Math.min(deviceH, Math.ceil(rect.y1 * ratio)) - py0);\n if (!(pw > 0 && ph > 0)) return null;\n\n // The region in screen px, and the two matrices a kind's vertex stage\n // multiplies: the unit quad onto it, and it onto the whole of clip space.\n const x0 = px0 / ratio, y0 = py0 / ratio, w = pw / ratio, h = ph / ratio;\n const model = new Float32Array([w, 0, 0, 0, h, 0, x0, y0, 1]);\n const proj = new Float32Array([2 / w, 0, 0, 0, 2 / h, 0, -1 - (2 * x0) / w, -1 - (2 * y0) / h, 1]);\n const base = paintBindContext(ctx);\n const bindCtx: PaintBindContext = {\n ...base,\n alpha: ctx.state.alpha,\n maxTextureSize: base.maxTextureSize,\n setProjAndModel: (prog) => setProjAndModel(ctx, prog, model, proj),\n };\n\n const gl = ctx.gl;\n const target = scratch.acquire(pw, ph);\n const scissorWasOn = gl.isEnabled(gl.SCISSOR_TEST);\n // The last glyph pass left this texture bound to unit 0; a kind sampling a\n // unit it never binds would read the buffer it is drawing into.\n gl.activeTexture(gl.TEXTURE0);\n gl.bindTexture(gl.TEXTURE_2D, null);\n gl.bindFramebuffer(gl.FRAMEBUFFER, target.fbo);\n gl.viewport(0, 0, pw, ph);\n gl.disable(gl.SCISSOR_TEST);\n gl.disable(gl.STENCIL_TEST);\n gl.clear(gl.COLOR_BUFFER_BIT);\n gl.disable(gl.BLEND);\n\n const prog = bind(bindCtx, fill);\n if (prog) {\n gl.bindVertexArray(ctx.meshCache.uploadRecurring(UNIT_QUAD).vao);\n drawTriangles(ctx, UNIT_QUAD.indices.length, gl.UNSIGNED_INT);\n gl.bindVertexArray(null);\n }\n\n gl.enable(gl.BLEND);\n returnToRenderTarget(ctx, deviceW, deviceH, scissorWasOn);\n if (!prog) return null;\n return {\n texture: target.texture,\n uvFromScreen: new Float32Array([\n ratio / target.width, 0, 0,\n 0, ratio / target.height, 0,\n -px0 / target.width, -py0 / target.height, 1,\n ]),\n };\n}\n\n/** Bind the glyph program to sample `painted` as its paint. */\nexport function bindScratchPaint(ctx: DrawContext, prog: ShaderProgram, painted: ScratchPaint): ShaderProgram {\n const gl = ctx.gl;\n gl.useProgram(prog.handle);\n setProjAndModel(ctx, prog, BATCH_MODEL);\n gl.uniformMatrix3fv(prog.uniform('u_worldInv')!, false, painted.uvFromScreen);\n gl.activeTexture(gl.TEXTURE0);\n gl.bindTexture(gl.TEXTURE_2D, painted.texture);\n gl.uniform1i(prog.uniform('u_sampler')!, 0);\n return prog;\n}\n"],"mappings":"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"}
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { drawTriangles as e } from "./drawTriangles.js";
|
|
2
|
-
//#region src/renderer/draw/stencil.ts
|
|
3
|
-
function t(e, t = e.clipDepth) {
|
|
4
|
-
let r = e.gl;
|
|
5
|
-
if (t === 0) {
|
|
6
|
-
r.disable(r.STENCIL_TEST);
|
|
7
|
-
return;
|
|
8
|
-
}
|
|
9
|
-
let i = n(t);
|
|
10
|
-
r.enable(r.STENCIL_TEST), r.stencilFunc(r.EQUAL, i, i), r.stencilOp(r.KEEP, r.KEEP, r.KEEP);
|
|
11
|
-
}
|
|
12
|
-
function n(e) {
|
|
13
|
-
return e === 0 ? 0 : (1 << e + 1) - 1 & 254;
|
|
14
|
-
}
|
|
15
|
-
function r(t, r) {
|
|
16
|
-
let i = t.gl;
|
|
17
|
-
i.enable(i.STENCIL_TEST), i.colorMask(!1, !1, !1, !1), i.stencilMask(1), i.stencilFunc(i.ALWAYS, 0, 1), i.stencilOp(i.KEEP, i.KEEP, i.INVERT), e(t, r, t.gl.UNSIGNED_INT);
|
|
18
|
-
let a = n(t.clipDepth);
|
|
19
|
-
i.colorMask(!0, !0, !0, !0), i.stencilFunc(i.EQUAL, a | 1, a | 1), i.stencilOp(i.KEEP, i.KEEP, i.KEEP);
|
|
20
|
-
}
|
|
21
|
-
function i(e) {
|
|
22
|
-
let t = e.gl;
|
|
23
|
-
t.stencilMask(1), t.clear(t.STENCIL_BUFFER_BIT), t.disable(t.STENCIL_TEST);
|
|
24
|
-
}
|
|
25
|
-
//#endregion
|
|
26
|
-
export { n as ancestorMask, t as applyClipTest, r as beginParityMask, i as endParityMask };
|
|
27
|
-
|
|
28
|
-
//# sourceMappingURL=stencil.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"stencil.js","names":["applyClipTest","ctx","gl","depth","mask","ancestorMask","beginParityMask","drawTriangles","indexCount","clipMask","endParityMask"],"sources":["../../../src/renderer/draw/stencil.ts"],"sourcesContent":["import type { DrawContext } from './drawContext';\nimport { drawTriangles } from './drawTriangles';\n\n// ─── Per-fragment clip test ───────────────────────────────────────────────────\n\n/**\n * Set the stencil test for the current clip depth. Called by every\n * fragment-producing draw before its drawElements call when clipDepth > 0.\n * At clipDepth = 0, disables STENCIL_TEST (zero-overhead common case).\n *\n * Note: not called by drawPathFillStencil / drawPathStrokeStenciled, which\n * manage their own stencil state (evenodd / inner-outer stencil). Those paths\n * coexist with clip bits because they use bit 0 exclusively while clip levels\n * occupy bits 1-7.\n */\nexport function applyClipTest(ctx: DrawContext, depth: number = ctx.clipDepth): void {\n const gl = ctx.gl;\n if (depth === 0) {\n gl.disable(gl.STENCIL_TEST);\n return;\n }\n const mask = ancestorMask(depth);\n gl.enable(gl.STENCIL_TEST);\n gl.stencilFunc(gl.EQUAL, mask, mask);\n gl.stencilOp(gl.KEEP, gl.KEEP, gl.KEEP);\n}\n\n// ─── Clip-stencil helpers ────────────────────────────────────────────────────\n\n/**\n * Bit-mask for ancestor clip levels.\n * Returns bits 1..depth (inclusive).\n * depth=0 → 0x00; depth=1 → 0x02; depth=3 → 0x0E.\n */\nexport function ancestorMask(depth: number): number {\n return depth === 0 ? 0 : ((1 << (depth + 1)) - 1) & 0xFE;\n}\n\n/**\n * Write the bound even-odd mesh's parity to stencil bit 0, then leave the\n * test passing where that parity is odd and every enclosing clip holds. The\n * program, VAO, and model are the caller's, already bound.\n */\nexport function beginParityMask(ctx: DrawContext, indexCount: number): void {\n const gl = ctx.gl;\n gl.enable(gl.STENCIL_TEST);\n gl.colorMask(false, false, false, false);\n gl.stencilMask(0x01);\n gl.stencilFunc(gl.ALWAYS, 0, 0x01);\n gl.stencilOp(gl.KEEP, gl.KEEP, gl.INVERT);\n drawTriangles(ctx, indexCount, ctx.gl.UNSIGNED_INT);\n\n const clipMask = ancestorMask(ctx.clipDepth);\n gl.colorMask(true, true, true, true);\n gl.stencilFunc(gl.EQUAL, clipMask | 0x01, clipMask | 0x01);\n gl.stencilOp(gl.KEEP, gl.KEEP, gl.KEEP);\n}\n\nexport function endParityMask(ctx: DrawContext): void {\n const gl = ctx.gl;\n // Narrow to bit 0 first: clear only zeroes bits the mask enables, and\n // pushClip owns bits 1-7.\n gl.stencilMask(0x01);\n gl.clear(gl.STENCIL_BUFFER_BIT);\n gl.disable(gl.STENCIL_TEST);\n}\n"],"mappings":";;AAeA,SAAgBA,EAAc,GAAkB,IAAgBC,EAAI,WAAiB;CACnF,IAAMC,IAAKD,EAAI;CACf,IAAIE,MAAU,GAAG;EACf,EAAG,QAAQD,EAAG,YAAY;EAC1B;CACF;CACA,IAAME,IAAOC,EAAaF,CAAK;CAG/B,AAFAD,EAAG,OAAOA,EAAG,YAAY,GACzBA,EAAG,YAAYA,EAAG,OAAOE,GAAMA,CAAI,GACnCF,EAAG,UAAUA,EAAG,MAAMA,EAAG,MAAMA,EAAG,IAAI;AACxC;AASA,SAAgBG,EAAa,GAAuB;CAClD,OAAOF,MAAU,IAAI,KAAM,KAAMA,IAAQ,KAAM,IAAK;AACtD;AAOA,SAAgBG,EAAgB,GAAkB,GAA0B;CAC1E,IAAMJ,IAAKD,EAAI;CAMf,AALAC,EAAG,OAAOA,EAAG,YAAY,GACzBA,EAAG,UAAU,IAAO,IAAO,IAAO,EAAK,GACvCA,EAAG,YAAY,CAAI,GACnBA,EAAG,YAAYA,EAAG,QAAQ,GAAG,CAAI,GACjCA,EAAG,UAAUA,EAAG,MAAMA,EAAG,MAAMA,EAAG,MAAM,GACxCK,EAAcN,GAAKO,GAAYP,EAAI,GAAG,YAAY;CAElD,IAAMQ,IAAWJ,EAAaJ,EAAI,SAAS;CAG3C,AAFAC,EAAG,UAAU,IAAM,IAAM,IAAM,EAAI,GACnCA,EAAG,YAAYA,EAAG,OAAOO,IAAW,GAAMA,IAAW,CAAI,GACzDP,EAAG,UAAUA,EAAG,MAAMA,EAAG,MAAMA,EAAG,IAAI;AACxC;AAEA,SAAgBQ,EAAc,GAAwB;CACpD,IAAMR,IAAKD,EAAI;CAKf,AAFAC,EAAG,YAAY,CAAI,GACnBA,EAAG,MAAMA,EAAG,kBAAkB,GAC9BA,EAAG,QAAQA,EAAG,YAAY;AAC5B"}
|
|
@@ -1,167 +0,0 @@
|
|
|
1
|
-
import { resolveColor as e } from "../math/color.js";
|
|
2
|
-
import { drawTriangles as t } from "./drawTriangles.js";
|
|
3
|
-
import { applyClipTest as n } from "./stencil.js";
|
|
4
|
-
import { BATCH_MODEL as r, flushBatch as i } from "./flushBatch.js";
|
|
5
|
-
import { enterUncut as a, flushForOwnDraw as o, leaveUncut as s } from "./clip.js";
|
|
6
|
-
import { batchPaint as c } from "./gradient.js";
|
|
7
|
-
import { stageGlyphs as l, stageSolid as u, tryStageFill as d } from "./batch.js";
|
|
8
|
-
import { bindGradient as f, bindPattern as p } from "./paintBind.js";
|
|
9
|
-
import { drawPathFillByKind as m } from "./pathPaint.js";
|
|
10
|
-
import { SYNTHETIC_ITALIC_RADIANS as h } from "../syntheticItalic.js";
|
|
11
|
-
import { outlineGroupMesh as g, outlineGroupStrokeMesh as _ } from "../glyphOutlineMesh.js";
|
|
12
|
-
import { bindScratchPaint as v, renderPaintToScratch as y } from "./scratchPass.js";
|
|
13
|
-
import { GLYPH_MODE_MSDF as b, GLYPH_MODE_R8 as x, dynamicPageTextureId as S, ensureFontTexture as C, glyphFieldScale as w, syncDynamicPageTexture as T, textureCacheKey as E } from "@weasel-js/font";
|
|
14
|
-
import { cachedLayoutRuns as D, resolveTextStyle as O, verticalAlignOffset as k } from "@weasel-js/text";
|
|
15
|
-
//#region src/renderer/draw/text.ts
|
|
16
|
-
var A = 48;
|
|
17
|
-
function j(e) {
|
|
18
|
-
let t = Math.hypot(e[0], e[1]), n = Math.hypot(e[3], e[4]);
|
|
19
|
-
return Math.sqrt(t * n) || 1;
|
|
20
|
-
}
|
|
21
|
-
function M(e, t) {
|
|
22
|
-
let n = O(t.style), r = n.lineHeight, i = t.align ?? n.align, a = t.direction ?? n.direction, o = t.maxWidth ?? Infinity, s = e.textOutlineMinScreenSize ?? A, c = Number.isFinite(s) ? s / j(e.state.transform) : void 0, l = D(t.runs, {
|
|
23
|
-
maxWidth: o,
|
|
24
|
-
alignWidth: t.width,
|
|
25
|
-
lineHeight: r,
|
|
26
|
-
align: i,
|
|
27
|
-
direction: a,
|
|
28
|
-
tabSize: n.tabSize,
|
|
29
|
-
justify: t.justify,
|
|
30
|
-
outlineMinSize: c
|
|
31
|
-
});
|
|
32
|
-
if (l.groups.length === 0 && l.decorations.length === 0) return;
|
|
33
|
-
let u = t.x, d = t.y + k(t.verticalAlign, t.height, l.bounds.height);
|
|
34
|
-
for (let t of l.groups) t.source === "outline" ? N(e, t, u, d) : R(e, t, u, d);
|
|
35
|
-
F(e, l.decorations, u, d);
|
|
36
|
-
}
|
|
37
|
-
function N(e, t, n, r) {
|
|
38
|
-
let i = t.fill;
|
|
39
|
-
if (i !== null) {
|
|
40
|
-
let a = g(t, n, r);
|
|
41
|
-
a && P(e, i, a);
|
|
42
|
-
}
|
|
43
|
-
let a = t.stroke?.paint;
|
|
44
|
-
if (!a) return;
|
|
45
|
-
let o = _(t, n, r, e.state.transform);
|
|
46
|
-
o && P(e, a, o);
|
|
47
|
-
}
|
|
48
|
-
function P(e, t, n) {
|
|
49
|
-
let r = c(e, t, !1);
|
|
50
|
-
r !== null && (d(e, n, r) || m(e, t, e.meshCache.uploadTransient(n)));
|
|
51
|
-
}
|
|
52
|
-
function F(t, n, r, i) {
|
|
53
|
-
for (let o of n) {
|
|
54
|
-
if (z(o.fill) !== null) {
|
|
55
|
-
P(t, o.fill, I(o.x0 + r, o.y0 + i, o.x1 + r, o.y1 + i));
|
|
56
|
-
continue;
|
|
57
|
-
}
|
|
58
|
-
let [n, c, l, d] = "color" in o.fill ? e(o.fill.color) : [
|
|
59
|
-
0,
|
|
60
|
-
0,
|
|
61
|
-
0,
|
|
62
|
-
1
|
|
63
|
-
], f;
|
|
64
|
-
for (;;) {
|
|
65
|
-
let e = u(t, 4);
|
|
66
|
-
if (t.drawBatch.pushRect(o.x0 + r, o.y0 + i, o.x1 - o.x0, o.y1 - o.y0, t.state.transform, n, c, l, d * (e.foldsAlpha ? t.state.alpha : 1))) break;
|
|
67
|
-
f = a(t);
|
|
68
|
-
}
|
|
69
|
-
f !== void 0 && s(t, f);
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
function I(e, t, n, r) {
|
|
73
|
-
return {
|
|
74
|
-
vertices: new Float32Array([
|
|
75
|
-
e,
|
|
76
|
-
t,
|
|
77
|
-
n,
|
|
78
|
-
t,
|
|
79
|
-
n,
|
|
80
|
-
r,
|
|
81
|
-
e,
|
|
82
|
-
r
|
|
83
|
-
]),
|
|
84
|
-
indices: new Uint32Array([
|
|
85
|
-
0,
|
|
86
|
-
1,
|
|
87
|
-
2,
|
|
88
|
-
0,
|
|
89
|
-
2,
|
|
90
|
-
3
|
|
91
|
-
])
|
|
92
|
-
};
|
|
93
|
-
}
|
|
94
|
-
var L = .08;
|
|
95
|
-
function R(t, n, r, o) {
|
|
96
|
-
if (n.source === "canvas") {
|
|
97
|
-
if (!T(t.textureCache, n.page)) return;
|
|
98
|
-
} else if (!C(n.family, n.weight, n.style, t.textureCache)) return;
|
|
99
|
-
if (n.quads.length === 0) return;
|
|
100
|
-
let c = n.source === "canvas" ? S(n.page) : E(n.family, n.weight, n.style), u = n.source === "canvas" ? x : b, d = w(n.source === "canvas" ? "canvas" : "atlas", n.family, n.weight, n.style);
|
|
101
|
-
if (!d) return;
|
|
102
|
-
let f = n.synthetic.bold ? L : 0, p = n.synthetic.italic ? Math.tan(h) : 0, m = z(n.fill);
|
|
103
|
-
if (m !== null) {
|
|
104
|
-
V(t, n, r, o, m, c, u, f, p, d);
|
|
105
|
-
return;
|
|
106
|
-
}
|
|
107
|
-
let g = n.fill !== null && "color" in n.fill ? e(n.fill.color) : [
|
|
108
|
-
0,
|
|
109
|
-
0,
|
|
110
|
-
0,
|
|
111
|
-
1
|
|
112
|
-
], _ = t.drawBatch, v = t.state.transform, { staged: y, slot: D } = l(t, c, d, f), O = g[3] * (y.foldsAlpha ? t.state.alpha : 1);
|
|
113
|
-
for (let e of n.quads) {
|
|
114
|
-
_.wouldOverflow(4) && (i(t), {staged: y, slot: D} = l(t, c, d, f), O = g[3] * (y.foldsAlpha ? t.state.alpha : 1));
|
|
115
|
-
let n;
|
|
116
|
-
for (; !_.pushGlyph(e.x0 + r, e.y0 + o, e.x1 + r, e.y1 + o, e.baselineY + o, p, v, e.u0, e.v0, e.u1, e.v1, g[0], g[1], g[2], O, D, u);) n = a(t), {staged: y, slot: D} = l(t, c, d, f), O = g[3] * (y.foldsAlpha ? t.state.alpha : 1);
|
|
117
|
-
n !== void 0 && (s(t, n), {staged: y, slot: D} = l(t, c, d, f), O = g[3] * (y.foldsAlpha ? t.state.alpha : 1));
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
function z(e) {
|
|
121
|
-
let t = e?.fill ?? "solid";
|
|
122
|
-
return t === "pattern" ? "pattern" : t === "linear-gradient" || t === "radial-gradient" || t === "conic-gradient" ? "gradient" : t === "solid" ? null : "texture";
|
|
123
|
-
}
|
|
124
|
-
var B = 1;
|
|
125
|
-
function V(e, t, i, a, s, c, l, u, d, m) {
|
|
126
|
-
let h = e.glyphPaintProgram?.(s);
|
|
127
|
-
if (!h) return;
|
|
128
|
-
o(e);
|
|
129
|
-
let g = t.fill, _ = e.state.transform, b;
|
|
130
|
-
if (s === "pattern") b = p(e, h, g, r);
|
|
131
|
-
else if (s === "gradient") b = f(e, h, g, r);
|
|
132
|
-
else {
|
|
133
|
-
let n = y(e, g, U(t, i, a, d, _));
|
|
134
|
-
b = n && v(e, h, n);
|
|
135
|
-
}
|
|
136
|
-
if (!b) return;
|
|
137
|
-
let x = e.gl;
|
|
138
|
-
e.textureCache.bind(c, B), x.uniform1i(h.uniform("u_atlas"), B), x.uniform1f(h.uniform("u_synthBold"), u), x.uniform2f(h.uniform("u_fieldScale"), m[0], m[1]), n(e);
|
|
139
|
-
let S = e.drawBatch, C = S.clip;
|
|
140
|
-
S.clip = null;
|
|
141
|
-
for (let n of t.quads) S.wouldOverflow(4) && H(e), S.pushGlyph(n.x0 + i, n.y0 + a, n.x1 + i, n.y1 + a, n.baselineY + a, d, _, n.u0, n.v0, n.u1, n.v1, 1, 1, 1, 1, B, l);
|
|
142
|
-
H(e), S.clip = C, x.activeTexture(x.TEXTURE0), x.bindVertexArray(null);
|
|
143
|
-
}
|
|
144
|
-
function H(e) {
|
|
145
|
-
let n = e.drawBatch;
|
|
146
|
-
n.length !== 0 && (t(e, n.uploadAndBind(), e.gl.UNSIGNED_INT), n.reset());
|
|
147
|
-
}
|
|
148
|
-
function U(e, t, n, r, i) {
|
|
149
|
-
let a = {
|
|
150
|
-
x0: Infinity,
|
|
151
|
-
y0: Infinity,
|
|
152
|
-
x1: -Infinity,
|
|
153
|
-
y1: -Infinity
|
|
154
|
-
}, o = (e, t) => {
|
|
155
|
-
let n = i[0] * e + i[3] * t + i[6], r = i[1] * e + i[4] * t + i[7];
|
|
156
|
-
n < a.x0 && (a.x0 = n), n > a.x1 && (a.x1 = n), r < a.y0 && (a.y0 = r), r > a.y1 && (a.y1 = r);
|
|
157
|
-
};
|
|
158
|
-
for (let i of e.quads) {
|
|
159
|
-
let e = i.x0 + t, a = i.x1 + t, s = i.y0 + n, c = i.y1 + n, l = i.baselineY + n, u = (l - s) * r, d = (l - c) * r;
|
|
160
|
-
o(e + u, s), o(a + u, s), o(a + d, c), o(e + d, c);
|
|
161
|
-
}
|
|
162
|
-
return a;
|
|
163
|
-
}
|
|
164
|
-
//#endregion
|
|
165
|
-
export { A as OUTLINE_MIN_SCREEN_PX, M as drawText };
|
|
166
|
-
|
|
167
|
-
//# sourceMappingURL=text.js.map
|