@motion-script/web 0.1.0
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/README.md +47 -0
- package/dist/audio/player.d.ts +43 -0
- package/dist/audio/player.d.ts.map +1 -0
- package/dist/audio/player.js +165 -0
- package/dist/audio/player.js.map +1 -0
- package/dist/effects/bloom.d.ts +19 -0
- package/dist/effects/bloom.d.ts.map +1 -0
- package/dist/effects/bloom.js +64 -0
- package/dist/effects/bloom.js.map +1 -0
- package/dist/effects/blur.d.ts +8 -0
- package/dist/effects/blur.d.ts.map +1 -0
- package/dist/effects/blur.js +12 -0
- package/dist/effects/blur.js.map +1 -0
- package/dist/effects/bulge-pinch.d.ts +20 -0
- package/dist/effects/bulge-pinch.d.ts.map +1 -0
- package/dist/effects/bulge-pinch.js +86 -0
- package/dist/effects/bulge-pinch.js.map +1 -0
- package/dist/effects/chromatic-aberration.d.ts +19 -0
- package/dist/effects/chromatic-aberration.d.ts.map +1 -0
- package/dist/effects/chromatic-aberration.js +59 -0
- package/dist/effects/chromatic-aberration.js.map +1 -0
- package/dist/effects/effect.d.ts +32 -0
- package/dist/effects/effect.d.ts.map +1 -0
- package/dist/effects/effect.js +22 -0
- package/dist/effects/effect.js.map +1 -0
- package/dist/effects/grayscale.d.ts +12 -0
- package/dist/effects/grayscale.d.ts.map +1 -0
- package/dist/effects/grayscale.js +31 -0
- package/dist/effects/grayscale.js.map +1 -0
- package/dist/effects/index.d.ts +13 -0
- package/dist/effects/index.d.ts.map +1 -0
- package/dist/effects/index.js +13 -0
- package/dist/effects/index.js.map +1 -0
- package/dist/effects/pixelate.d.ts +23 -0
- package/dist/effects/pixelate.d.ts.map +1 -0
- package/dist/effects/pixelate.js +37 -0
- package/dist/effects/pixelate.js.map +1 -0
- package/dist/effects/registry.d.ts +17 -0
- package/dist/effects/registry.d.ts.map +1 -0
- package/dist/effects/registry.js +56 -0
- package/dist/effects/registry.js.map +1 -0
- package/dist/effects/sksl-cache.d.ts +6 -0
- package/dist/effects/sksl-cache.d.ts.map +1 -0
- package/dist/effects/sksl-cache.js +21 -0
- package/dist/effects/sksl-cache.js.map +1 -0
- package/dist/effects/sksl-layer.d.ts +30 -0
- package/dist/effects/sksl-layer.d.ts.map +1 -0
- package/dist/effects/sksl-layer.js +82 -0
- package/dist/effects/sksl-layer.js.map +1 -0
- package/dist/effects/texture.d.ts +31 -0
- package/dist/effects/texture.d.ts.map +1 -0
- package/dist/effects/texture.js +66 -0
- package/dist/effects/texture.js.map +1 -0
- package/dist/effects/vintage.d.ts +20 -0
- package/dist/effects/vintage.d.ts.map +1 -0
- package/dist/effects/vintage.js +47 -0
- package/dist/effects/vintage.js.map +1 -0
- package/dist/effects/zoom.d.ts +20 -0
- package/dist/effects/zoom.d.ts.map +1 -0
- package/dist/effects/zoom.js +65 -0
- package/dist/effects/zoom.js.map +1 -0
- package/dist/exporter.d.ts +24 -0
- package/dist/exporter.d.ts.map +1 -0
- package/dist/exporter.js +177 -0
- package/dist/exporter.js.map +1 -0
- package/dist/fills/conic-gradient.d.ts +12 -0
- package/dist/fills/conic-gradient.d.ts.map +1 -0
- package/dist/fills/conic-gradient.js +44 -0
- package/dist/fills/conic-gradient.js.map +1 -0
- package/dist/fills/filters/alpha.d.ts +9 -0
- package/dist/fills/filters/alpha.d.ts.map +1 -0
- package/dist/fills/filters/alpha.js +21 -0
- package/dist/fills/filters/alpha.js.map +1 -0
- package/dist/fills/filters/blur.d.ts +9 -0
- package/dist/fills/filters/blur.d.ts.map +1 -0
- package/dist/fills/filters/blur.js +12 -0
- package/dist/fills/filters/blur.js.map +1 -0
- package/dist/fills/filters/color-adjustment.d.ts +14 -0
- package/dist/fills/filters/color-adjustment.d.ts.map +1 -0
- package/dist/fills/filters/color-adjustment.js +147 -0
- package/dist/fills/filters/color-adjustment.js.map +1 -0
- package/dist/fills/filters/color-matrix.d.ts +9 -0
- package/dist/fills/filters/color-matrix.d.ts.map +1 -0
- package/dist/fills/filters/color-matrix.js +14 -0
- package/dist/fills/filters/color-matrix.js.map +1 -0
- package/dist/fills/filters/curves.d.ts +9 -0
- package/dist/fills/filters/curves.d.ts.map +1 -0
- package/dist/fills/filters/curves.js +89 -0
- package/dist/fills/filters/curves.js.map +1 -0
- package/dist/fills/filters/exposure.d.ts +9 -0
- package/dist/fills/filters/exposure.d.ts.map +1 -0
- package/dist/fills/filters/exposure.js +22 -0
- package/dist/fills/filters/exposure.js.map +1 -0
- package/dist/fills/filters/filter.d.ts +17 -0
- package/dist/fills/filters/filter.d.ts.map +1 -0
- package/dist/fills/filters/filter.js +16 -0
- package/dist/fills/filters/filter.js.map +1 -0
- package/dist/fills/filters/grayscale.d.ts +9 -0
- package/dist/fills/filters/grayscale.d.ts.map +1 -0
- package/dist/fills/filters/grayscale.js +25 -0
- package/dist/fills/filters/grayscale.js.map +1 -0
- package/dist/fills/filters/registry.d.ts +16 -0
- package/dist/fills/filters/registry.d.ts.map +1 -0
- package/dist/fills/filters/registry.js +50 -0
- package/dist/fills/filters/registry.js.map +1 -0
- package/dist/fills/gradient-cache.d.ts +29 -0
- package/dist/fills/gradient-cache.d.ts.map +1 -0
- package/dist/fills/gradient-cache.js +57 -0
- package/dist/fills/gradient-cache.js.map +1 -0
- package/dist/fills/handler.d.ts +49 -0
- package/dist/fills/handler.d.ts.map +1 -0
- package/dist/fills/handler.js +172 -0
- package/dist/fills/handler.js.map +1 -0
- package/dist/fills/image.d.ts +34 -0
- package/dist/fills/image.d.ts.map +1 -0
- package/dist/fills/image.js +91 -0
- package/dist/fills/image.js.map +1 -0
- package/dist/fills/linear-gradient.d.ts +12 -0
- package/dist/fills/linear-gradient.d.ts.map +1 -0
- package/dist/fills/linear-gradient.js +48 -0
- package/dist/fills/linear-gradient.js.map +1 -0
- package/dist/fills/noise.d.ts +11 -0
- package/dist/fills/noise.d.ts.map +1 -0
- package/dist/fills/noise.js +82 -0
- package/dist/fills/noise.js.map +1 -0
- package/dist/fills/radial-gradient.d.ts +9 -0
- package/dist/fills/radial-gradient.d.ts.map +1 -0
- package/dist/fills/radial-gradient.js +43 -0
- package/dist/fills/radial-gradient.js.map +1 -0
- package/dist/fills/registry.d.ts +10 -0
- package/dist/fills/registry.d.ts.map +1 -0
- package/dist/fills/registry.js +34 -0
- package/dist/fills/registry.js.map +1 -0
- package/dist/fills/renderer.d.ts +24 -0
- package/dist/fills/renderer.d.ts.map +1 -0
- package/dist/fills/renderer.js +5 -0
- package/dist/fills/renderer.js.map +1 -0
- package/dist/fills/solid.d.ts +7 -0
- package/dist/fills/solid.d.ts.map +1 -0
- package/dist/fills/solid.js +13 -0
- package/dist/fills/solid.js.map +1 -0
- package/dist/fills/stripe.d.ts +7 -0
- package/dist/fills/stripe.d.ts.map +1 -0
- package/dist/fills/stripe.js +85 -0
- package/dist/fills/stripe.js.map +1 -0
- package/dist/fills/video.d.ts +6 -0
- package/dist/fills/video.d.ts.map +1 -0
- package/dist/fills/video.js +14 -0
- package/dist/fills/video.js.map +1 -0
- package/dist/font-style.d.ts +23 -0
- package/dist/font-style.d.ts.map +1 -0
- package/dist/font-style.js +34 -0
- package/dist/font-style.js.map +1 -0
- package/dist/getter.d.ts +9 -0
- package/dist/getter.d.ts.map +1 -0
- package/dist/getter.js +26 -0
- package/dist/getter.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +11 -0
- package/dist/index.js.map +1 -0
- package/dist/master-clock.d.ts +42 -0
- package/dist/master-clock.d.ts.map +1 -0
- package/dist/master-clock.js +134 -0
- package/dist/master-clock.js.map +1 -0
- package/dist/measure-scope.d.ts +14 -0
- package/dist/measure-scope.d.ts.map +1 -0
- package/dist/measure-scope.js +29 -0
- package/dist/measure-scope.js.map +1 -0
- package/dist/render-context.d.ts +107 -0
- package/dist/render-context.d.ts.map +1 -0
- package/dist/render-context.js +940 -0
- package/dist/render-context.js.map +1 -0
- package/dist/shapes/alpha-contour.d.ts +27 -0
- package/dist/shapes/alpha-contour.d.ts.map +1 -0
- package/dist/shapes/alpha-contour.js +330 -0
- package/dist/shapes/alpha-contour.js.map +1 -0
- package/dist/shapes/base.d.ts +46 -0
- package/dist/shapes/base.d.ts.map +1 -0
- package/dist/shapes/base.js +95 -0
- package/dist/shapes/base.js.map +1 -0
- package/dist/shapes/boolean.d.ts +28 -0
- package/dist/shapes/boolean.d.ts.map +1 -0
- package/dist/shapes/boolean.js +90 -0
- package/dist/shapes/boolean.js.map +1 -0
- package/dist/shapes/ellipse.d.ts +32 -0
- package/dist/shapes/ellipse.d.ts.map +1 -0
- package/dist/shapes/ellipse.js +50 -0
- package/dist/shapes/ellipse.js.map +1 -0
- package/dist/shapes/image.d.ts +66 -0
- package/dist/shapes/image.d.ts.map +1 -0
- package/dist/shapes/image.js +214 -0
- package/dist/shapes/image.js.map +1 -0
- package/dist/shapes/index.d.ts +67 -0
- package/dist/shapes/index.d.ts.map +1 -0
- package/dist/shapes/index.js +297 -0
- package/dist/shapes/index.js.map +1 -0
- package/dist/shapes/line.d.ts +25 -0
- package/dist/shapes/line.d.ts.map +1 -0
- package/dist/shapes/line.js +87 -0
- package/dist/shapes/line.js.map +1 -0
- package/dist/shapes/mask.d.ts +28 -0
- package/dist/shapes/mask.d.ts.map +1 -0
- package/dist/shapes/mask.js +106 -0
- package/dist/shapes/mask.js.map +1 -0
- package/dist/shapes/paragraph-layout.d.ts +64 -0
- package/dist/shapes/paragraph-layout.d.ts.map +1 -0
- package/dist/shapes/paragraph-layout.js +156 -0
- package/dist/shapes/paragraph-layout.js.map +1 -0
- package/dist/shapes/path.d.ts +29 -0
- package/dist/shapes/path.d.ts.map +1 -0
- package/dist/shapes/path.js +71 -0
- package/dist/shapes/path.js.map +1 -0
- package/dist/shapes/polygon.d.ts +33 -0
- package/dist/shapes/polygon.d.ts.map +1 -0
- package/dist/shapes/polygon.js +86 -0
- package/dist/shapes/polygon.js.map +1 -0
- package/dist/shapes/polygram.d.ts +34 -0
- package/dist/shapes/polygram.d.ts.map +1 -0
- package/dist/shapes/polygram.js +90 -0
- package/dist/shapes/polygram.js.map +1 -0
- package/dist/shapes/rect.d.ts +41 -0
- package/dist/shapes/rect.d.ts.map +1 -0
- package/dist/shapes/rect.js +111 -0
- package/dist/shapes/rect.js.map +1 -0
- package/dist/shapes/richtext.d.ts +28 -0
- package/dist/shapes/richtext.d.ts.map +1 -0
- package/dist/shapes/richtext.js +32 -0
- package/dist/shapes/richtext.js.map +1 -0
- package/dist/shapes/shape-handler.d.ts +79 -0
- package/dist/shapes/shape-handler.d.ts.map +1 -0
- package/dist/shapes/shape-handler.js +304 -0
- package/dist/shapes/shape-handler.js.map +1 -0
- package/dist/shapes/text.d.ts +13 -0
- package/dist/shapes/text.d.ts.map +1 -0
- package/dist/shapes/text.js +67 -0
- package/dist/shapes/text.js.map +1 -0
- package/dist/shapes/trim.d.ts +10 -0
- package/dist/shapes/trim.d.ts.map +1 -0
- package/dist/shapes/trim.js +49 -0
- package/dist/shapes/trim.js.map +1 -0
- package/dist/storage-adapter.d.ts +56 -0
- package/dist/storage-adapter.d.ts.map +1 -0
- package/dist/storage-adapter.js +188 -0
- package/dist/storage-adapter.js.map +1 -0
- package/dist/stroke/index.d.ts +34 -0
- package/dist/stroke/index.d.ts.map +1 -0
- package/dist/stroke/index.js +360 -0
- package/dist/stroke/index.js.map +1 -0
- package/dist/stroke/stroke-handler.d.ts +45 -0
- package/dist/stroke/stroke-handler.d.ts.map +1 -0
- package/dist/stroke/stroke-handler.js +371 -0
- package/dist/stroke/stroke-handler.js.map +1 -0
- package/dist/video/extract.d.ts +54 -0
- package/dist/video/extract.d.ts.map +1 -0
- package/dist/video/extract.js +192 -0
- package/dist/video/extract.js.map +1 -0
- package/dist/video/extract.worker.d.ts +50 -0
- package/dist/video/extract.worker.d.ts.map +1 -0
- package/dist/video/extract.worker.js +224 -0
- package/dist/video/extract.worker.js.map +1 -0
- package/package.json +57 -0
|
@@ -0,0 +1,172 @@
|
|
|
1
|
+
import { FillRenderRegistry } from "./registry";
|
|
2
|
+
export { FillRenderRegistry } from "./registry";
|
|
3
|
+
/**
|
|
4
|
+
* Stateless paint applicator. All async work (decoding images, extracting
|
|
5
|
+
* video frames) happens in WebStorageAdapter before render. By the time
|
|
6
|
+
* applyFills runs, every required CKImage is already cached.
|
|
7
|
+
*/
|
|
8
|
+
export class FillHandler {
|
|
9
|
+
offscreenCanvas = null;
|
|
10
|
+
offscreenCtx = null;
|
|
11
|
+
canvasKit;
|
|
12
|
+
getPaint;
|
|
13
|
+
getCanvas;
|
|
14
|
+
getUnionBounds;
|
|
15
|
+
getSpaceRect;
|
|
16
|
+
assets;
|
|
17
|
+
// The bounds the next gradient/image shader should resolve against. Set per
|
|
18
|
+
// fill/shape by applyFills before each applyPaint, so the no-arg
|
|
19
|
+
// getShapeBounds() handed to renderers stays simple.
|
|
20
|
+
currentBounds = null;
|
|
21
|
+
constructor(canvasKit, getPaint, getCanvas, getUnionBounds, getSpaceRect, assets) {
|
|
22
|
+
this.canvasKit = canvasKit;
|
|
23
|
+
this.getPaint = getPaint;
|
|
24
|
+
this.getCanvas = getCanvas;
|
|
25
|
+
this.getUnionBounds = getUnionBounds;
|
|
26
|
+
this.getSpaceRect = getSpaceRect;
|
|
27
|
+
this.assets = assets;
|
|
28
|
+
this.currentBounds = null;
|
|
29
|
+
}
|
|
30
|
+
// Union the shapes' paths into one, so a single fill (and its opacity)
|
|
31
|
+
// covers the combined silhouette. Returns null for fewer than two path
|
|
32
|
+
// shapes (the caller's per-shape draw is equivalent and cheaper) or when any
|
|
33
|
+
// shape has no ckPath (text). Caller owns and must delete() the result.
|
|
34
|
+
unionPath(shapes) {
|
|
35
|
+
if (shapes.length < 2 || shapes.some(s => !s.ckPath))
|
|
36
|
+
return null;
|
|
37
|
+
let combined = shapes[0].ckPath.copy();
|
|
38
|
+
for (let i = 1; i < shapes.length; i++) {
|
|
39
|
+
const next = this.canvasKit.Path.MakeFromOp(combined, shapes[i].ckPath, this.canvasKit.PathOp.Union);
|
|
40
|
+
combined.delete();
|
|
41
|
+
if (!next)
|
|
42
|
+
return null;
|
|
43
|
+
combined = next;
|
|
44
|
+
}
|
|
45
|
+
return combined;
|
|
46
|
+
}
|
|
47
|
+
// Set the bounds the next applyPaint's shader resolves against. Used by the
|
|
48
|
+
// stroke/shadow handlers, which call FillRenderRegistry.applyPaint directly.
|
|
49
|
+
setCurrentBounds(bounds) {
|
|
50
|
+
this.currentBounds = bounds;
|
|
51
|
+
}
|
|
52
|
+
// Bounds for a fill, given its space and (for 'local') the shape being
|
|
53
|
+
// painted. local → that shape; global → union of all shapes; parent/view →
|
|
54
|
+
// the reference rect supplied by the render context.
|
|
55
|
+
boundsForSpace(space, shape) {
|
|
56
|
+
switch (space) {
|
|
57
|
+
case "local": {
|
|
58
|
+
const b = shape?.ckPath?.getBounds();
|
|
59
|
+
if (!b)
|
|
60
|
+
return this.getUnionBounds();
|
|
61
|
+
return { left: b[0], top: b[1], right: b[2], bottom: b[3] };
|
|
62
|
+
}
|
|
63
|
+
case "parent":
|
|
64
|
+
case "view":
|
|
65
|
+
return this.getSpaceRect(space) ?? this.getUnionBounds();
|
|
66
|
+
case "global":
|
|
67
|
+
default:
|
|
68
|
+
return this.getUnionBounds();
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
dispose() {
|
|
72
|
+
this.offscreenCanvas = null;
|
|
73
|
+
this.offscreenCtx = null;
|
|
74
|
+
}
|
|
75
|
+
getCanvasKitBlendMode(blend) {
|
|
76
|
+
const mode = blend;
|
|
77
|
+
switch (mode) {
|
|
78
|
+
case "multiply": return this.canvasKit.BlendMode.Multiply;
|
|
79
|
+
case "screen": return this.canvasKit.BlendMode.Screen;
|
|
80
|
+
case "overlay": return this.canvasKit.BlendMode.Overlay;
|
|
81
|
+
case "darken": return this.canvasKit.BlendMode.Darken;
|
|
82
|
+
case "lighten": return this.canvasKit.BlendMode.Lighten;
|
|
83
|
+
case "color-dodge": return this.canvasKit.BlendMode.ColorDodge;
|
|
84
|
+
case "color-burn": return this.canvasKit.BlendMode.ColorBurn;
|
|
85
|
+
case "hard-light": return this.canvasKit.BlendMode.HardLight;
|
|
86
|
+
case "soft-light": return this.canvasKit.BlendMode.SoftLight;
|
|
87
|
+
case "difference": return this.canvasKit.BlendMode.Difference;
|
|
88
|
+
case "exclusion": return this.canvasKit.BlendMode.Exclusion;
|
|
89
|
+
case "hue": return this.canvasKit.BlendMode.Hue;
|
|
90
|
+
case "saturation": return this.canvasKit.BlendMode.Saturation;
|
|
91
|
+
case "color": return this.canvasKit.BlendMode.Color;
|
|
92
|
+
case "luminosity": return this.canvasKit.BlendMode.Luminosity;
|
|
93
|
+
case "normal":
|
|
94
|
+
default: return this.canvasKit.BlendMode.SrcOver;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
buildRendererCtx(paint) {
|
|
98
|
+
return {
|
|
99
|
+
canvasKit: this.canvasKit,
|
|
100
|
+
paint,
|
|
101
|
+
assets: this.assets,
|
|
102
|
+
// Renderers read this once per applyPaint; applyFills sets
|
|
103
|
+
// currentBounds to the right space's rect just before each call.
|
|
104
|
+
getShapeBounds: () => this.currentBounds,
|
|
105
|
+
offscreenCanvas: this.offscreenCanvas,
|
|
106
|
+
offscreenCtx: this.offscreenCtx,
|
|
107
|
+
transientImages: [],
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
applyFills(fills, shapes) {
|
|
111
|
+
if (fills.length === 0)
|
|
112
|
+
return false;
|
|
113
|
+
const paint = this.getPaint();
|
|
114
|
+
paint.setStyle(this.canvasKit.PaintStyle.Fill);
|
|
115
|
+
const rendererCtx = this.buildRendererCtx(paint);
|
|
116
|
+
for (const fill of fills) {
|
|
117
|
+
const opacity = fill.opacity !== undefined ? fill.opacity : 1.0;
|
|
118
|
+
const space = fill.space ?? "global";
|
|
119
|
+
// For 'local', each shape gets its own shader resolved against its
|
|
120
|
+
// own bounds. For every other space the shader is built once against
|
|
121
|
+
// a shared rect and all shapes paint through it as one unit.
|
|
122
|
+
const groups = space === "local"
|
|
123
|
+
? shapes.map(s => ({ bounds: this.boundsForSpace("local", s), shapes: [s] }))
|
|
124
|
+
: [{ bounds: this.boundsForSpace(space, null), shapes }];
|
|
125
|
+
for (const group of groups) {
|
|
126
|
+
paint.setAlphaf(opacity);
|
|
127
|
+
if (fill.blend) {
|
|
128
|
+
paint.setBlendMode(this.getCanvasKitBlendMode(fill.blend));
|
|
129
|
+
}
|
|
130
|
+
else {
|
|
131
|
+
paint.setBlendMode(this.canvasKit.BlendMode.SrcOver);
|
|
132
|
+
}
|
|
133
|
+
paint.setImageFilter(null);
|
|
134
|
+
this.currentBounds = group.bounds;
|
|
135
|
+
if (!FillRenderRegistry.applyPaint(fill, rendererCtx))
|
|
136
|
+
continue;
|
|
137
|
+
// Sync back mutable fields written by renderers
|
|
138
|
+
this.offscreenCanvas = rendererCtx.offscreenCanvas;
|
|
139
|
+
this.offscreenCtx = rendererCtx.offscreenCtx;
|
|
140
|
+
// For a unified space (global/parent/view) with multiple shapes,
|
|
141
|
+
// draw their union as one path so opacity < 1 composites once —
|
|
142
|
+
// drawing each shape separately would double the alpha where they
|
|
143
|
+
// overlap and show a seam. 'local' keeps shapes independent.
|
|
144
|
+
const unionPath = space !== "local"
|
|
145
|
+
? this.unionPath(group.shapes)
|
|
146
|
+
: null;
|
|
147
|
+
if (unionPath) {
|
|
148
|
+
this.getCanvas().drawPath(unionPath, paint);
|
|
149
|
+
unionPath.delete();
|
|
150
|
+
}
|
|
151
|
+
else {
|
|
152
|
+
for (const shape of group.shapes) {
|
|
153
|
+
shape.draw(paint);
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
// Clear shader before deleting backing images so the paint stops
|
|
157
|
+
// referencing them.
|
|
158
|
+
paint.setShader(null);
|
|
159
|
+
for (const img of rendererCtx.transientImages)
|
|
160
|
+
img.delete();
|
|
161
|
+
rendererCtx.transientImages.length = 0;
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
this.currentBounds = null;
|
|
165
|
+
paint.setBlendMode(this.canvasKit.BlendMode.SrcOver);
|
|
166
|
+
paint.setAlphaf(1.0);
|
|
167
|
+
paint.setShader(null);
|
|
168
|
+
paint.setImageFilter(null);
|
|
169
|
+
return true;
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
//# sourceMappingURL=handler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"handler.js","sourceRoot":"","sources":["../../src/fills/handler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import type { ImageFillResolved, MediaFilter } from "@motion-script/core";
|
|
2
|
+
import type { Image as CKImage } from "@motion-script/canvaskit";
|
|
3
|
+
import { FillRenderer, type FillRendererContext } from "./renderer";
|
|
4
|
+
import { type ShapeBounds } from "./handler";
|
|
5
|
+
/** Shades with the adapter-decoded image and applies the fill's filter chain. */
|
|
6
|
+
export declare class ImageFillRenderer extends FillRenderer<ImageFillResolved> {
|
|
7
|
+
applyPaint(fill: ImageFillResolved, ctx: FillRendererContext): boolean;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Apply the fill's filter chain to the paint's image filter slot. Filters are
|
|
11
|
+
* composed in array order (first filter is innermost). Callers (FillHandler)
|
|
12
|
+
* are responsible for clearing the image filter after drawing.
|
|
13
|
+
*/
|
|
14
|
+
export declare function applyMediaFilters(fill: {
|
|
15
|
+
filters?: MediaFilter[];
|
|
16
|
+
}, ctx: FillRendererContext): void;
|
|
17
|
+
/**
|
|
18
|
+
* Compute the image→canvas transform (3×3 matrix as a 9-tuple, row-major)
|
|
19
|
+
* for a given fill descriptor and the destination bounds. This is exactly the
|
|
20
|
+
* same matrix used by the image shader, so contour paths transformed by it
|
|
21
|
+
* land on the visible image's pixel positions.
|
|
22
|
+
*/
|
|
23
|
+
export declare function computeImageMatrix(imgW: number, imgH: number, fill: {
|
|
24
|
+
mode?: string;
|
|
25
|
+
transform?: Float32Array | number[][];
|
|
26
|
+
scaling?: number;
|
|
27
|
+
}, bounds: ShapeBounds | null): number[];
|
|
28
|
+
/** Shared image-shader builder used by both image and video renderers. */
|
|
29
|
+
export declare function makeImageShader(img: CKImage, fill: {
|
|
30
|
+
mode?: string;
|
|
31
|
+
transform?: Float32Array | number[][];
|
|
32
|
+
scaling?: number;
|
|
33
|
+
}, ck: any, bounds: ShapeBounds | null): any;
|
|
34
|
+
//# sourceMappingURL=image.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image.d.ts","sourceRoot":"","sources":["../../src/fills/image.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAC1E,OAAO,KAAK,EAAE,KAAK,IAAI,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,YAAY,EAAE,KAAK,mBAAmB,EAAE,MAAM,YAAY,CAAC;AACpE,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;AAG7C,iFAAiF;AACjF,qBAAa,iBAAkB,SAAQ,YAAY,CAAC,iBAAiB,CAAC;IAClE,UAAU,CAAC,IAAI,EAAE,iBAAiB,EAAE,GAAG,EAAE,mBAAmB,GAAG,OAAO;CAWzE;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE;IAAE,OAAO,CAAC,EAAE,WAAW,EAAE,CAAA;CAAE,EAAE,GAAG,EAAE,mBAAmB,GAAG,IAAI,CAOnG;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAC9B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,YAAY,GAAG,MAAM,EAAE,EAAE,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,EAChF,MAAM,EAAE,WAAW,GAAG,IAAI,GAC3B,MAAM,EAAE,CA+BV;AAED,0EAA0E;AAC1E,wBAAgB,eAAe,CAC3B,GAAG,EAAE,OAAO,EACZ,IAAI,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,YAAY,GAAG,MAAM,EAAE,EAAE,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,EAChF,EAAE,EAAE,GAAG,EACP,MAAM,EAAE,WAAW,GAAG,IAAI,GAC3B,GAAG,CAiBL"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
import { FillRenderer } from "./renderer";
|
|
2
|
+
import { ImageFillFilterRegistry } from "./filters/registry";
|
|
3
|
+
/** Shades with the adapter-decoded image and applies the fill's filter chain. */
|
|
4
|
+
export class ImageFillRenderer extends FillRenderer {
|
|
5
|
+
applyPaint(fill, ctx) {
|
|
6
|
+
if (!fill.src)
|
|
7
|
+
return false;
|
|
8
|
+
const img = ctx.assets.getCKImage(fill.src);
|
|
9
|
+
if (!img)
|
|
10
|
+
return false;
|
|
11
|
+
// Adapter-owned CKImage — do NOT push to transientImages (which gets
|
|
12
|
+
// .delete()'d after the draw). The adapter releases the texture when
|
|
13
|
+
// the underlying pixels are evicted.
|
|
14
|
+
ctx.paint.setShader(makeImageShader(img, fill, ctx.canvasKit, ctx.getShapeBounds()));
|
|
15
|
+
applyMediaFilters(fill, ctx);
|
|
16
|
+
return true;
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Apply the fill's filter chain to the paint's image filter slot. Filters are
|
|
21
|
+
* composed in array order (first filter is innermost). Callers (FillHandler)
|
|
22
|
+
* are responsible for clearing the image filter after drawing.
|
|
23
|
+
*/
|
|
24
|
+
export function applyMediaFilters(fill, ctx) {
|
|
25
|
+
if (!fill.filters || fill.filters.length === 0) {
|
|
26
|
+
ctx.paint.setImageFilter(null);
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
const composed = ImageFillFilterRegistry.compose(fill.filters, ctx.canvasKit);
|
|
30
|
+
ctx.paint.setImageFilter(composed);
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Compute the image→canvas transform (3×3 matrix as a 9-tuple, row-major)
|
|
34
|
+
* for a given fill descriptor and the destination bounds. This is exactly the
|
|
35
|
+
* same matrix used by the image shader, so contour paths transformed by it
|
|
36
|
+
* land on the visible image's pixel positions.
|
|
37
|
+
*/
|
|
38
|
+
export function computeImageMatrix(imgW, imgH, fill, bounds) {
|
|
39
|
+
if (fill.transform) {
|
|
40
|
+
if (fill.transform instanceof Float32Array)
|
|
41
|
+
return Array.from(fill.transform);
|
|
42
|
+
return fill.transform.flat();
|
|
43
|
+
}
|
|
44
|
+
if (bounds) {
|
|
45
|
+
const mode = fill.mode ?? "fill";
|
|
46
|
+
const shapeW = bounds.right - bounds.left;
|
|
47
|
+
const shapeH = bounds.bottom - bounds.top;
|
|
48
|
+
let sx, sy, tx, ty;
|
|
49
|
+
if (mode === "fit") {
|
|
50
|
+
const scale = Math.min(shapeW / imgW, shapeH / imgH);
|
|
51
|
+
sx = scale;
|
|
52
|
+
sy = scale;
|
|
53
|
+
tx = bounds.left + (shapeW - imgW * scale) / 2;
|
|
54
|
+
ty = bounds.top + (shapeH - imgH * scale) / 2;
|
|
55
|
+
}
|
|
56
|
+
else if (mode === "crop") {
|
|
57
|
+
const scale = Math.max(shapeW / imgW, shapeH / imgH);
|
|
58
|
+
sx = scale;
|
|
59
|
+
sy = scale;
|
|
60
|
+
tx = bounds.left + (shapeW - imgW * scale) / 2;
|
|
61
|
+
ty = bounds.top + (shapeH - imgH * scale) / 2;
|
|
62
|
+
}
|
|
63
|
+
else if (mode === "tile") {
|
|
64
|
+
sx = fill.scaling ?? 1;
|
|
65
|
+
sy = fill.scaling ?? 1;
|
|
66
|
+
tx = bounds.left;
|
|
67
|
+
ty = bounds.top;
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
sx = shapeW / imgW;
|
|
71
|
+
sy = shapeH / imgH;
|
|
72
|
+
tx = bounds.left;
|
|
73
|
+
ty = bounds.top;
|
|
74
|
+
}
|
|
75
|
+
return [sx, 0, tx, 0, sy, ty, 0, 0, 1];
|
|
76
|
+
}
|
|
77
|
+
const s = fill.scaling ?? 1;
|
|
78
|
+
return [s, 0, 0, 0, s, 0, 0, 0, 1];
|
|
79
|
+
}
|
|
80
|
+
/** Shared image-shader builder used by both image and video renderers. */
|
|
81
|
+
export function makeImageShader(img, fill, ck, bounds) {
|
|
82
|
+
const mode = fill.mode ?? "fill";
|
|
83
|
+
const tileMode = mode === "tile"
|
|
84
|
+
? ck.TileMode.Repeat
|
|
85
|
+
: mode === "fit"
|
|
86
|
+
? ck.TileMode.Decal
|
|
87
|
+
: ck.TileMode.Clamp;
|
|
88
|
+
const matrix = computeImageMatrix(img.width(), img.height(), fill, bounds);
|
|
89
|
+
return img.makeShaderOptions(tileMode, tileMode, ck.FilterMode.Linear, ck.MipmapMode.None, matrix);
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=image.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"image.js","sourceRoot":"","sources":["../../src/fills/image.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { LinearGradientFillResolved } from "@motion-script/core";
|
|
2
|
+
import { FillRenderer, type FillRendererContext } from "./renderer";
|
|
3
|
+
/**
|
|
4
|
+
* Builds (and caches via GradientShaderCache, keyed on resolved endpoints +
|
|
5
|
+
* stops) a linear-gradient shader resolved against the current shape bounds.
|
|
6
|
+
*/
|
|
7
|
+
export declare class LinearGradientFillRenderer extends FillRenderer<LinearGradientFillResolved> {
|
|
8
|
+
private cache;
|
|
9
|
+
applyPaint(fill: LinearGradientFillResolved, ctx: FillRendererContext): boolean;
|
|
10
|
+
dispose(): void;
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=linear-gradient.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"linear-gradient.d.ts","sourceRoot":"","sources":["../../src/fills/linear-gradient.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,KAAK,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAcpE;;;GAGG;AACH,qBAAa,0BAA2B,SAAQ,YAAY,CAAC,0BAA0B,CAAC;IACpF,OAAO,CAAC,KAAK,CAA6B;IAE1C,UAAU,CAAC,IAAI,EAAE,0BAA0B,EAAE,GAAG,EAAE,mBAAmB,GAAG,OAAO;IA2B/E,OAAO,IAAI,IAAI;CAGlB"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { FillRenderer } from "./renderer";
|
|
2
|
+
import { GradientShaderCache, toCkColors, pushNums } from "./gradient-cache";
|
|
3
|
+
// Converts a normalized coordinate (-1..1, extendable beyond for world-space)
|
|
4
|
+
// to a pixel position within the shape's bounds.
|
|
5
|
+
// x: -1 = left edge, +1 = right edge | y: -1 = bottom edge, +1 = top edge
|
|
6
|
+
function normToPixel(nx, ny, bounds) {
|
|
7
|
+
const cx = (bounds.left + bounds.right) / 2;
|
|
8
|
+
const cy = (bounds.top + bounds.bottom) / 2;
|
|
9
|
+
const hw = (bounds.right - bounds.left) / 2;
|
|
10
|
+
const hh = (bounds.bottom - bounds.top) / 2;
|
|
11
|
+
return [cx + nx * hw, cy - ny * hh]; // y is flipped: +1 = top = smaller canvas y
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Builds (and caches via GradientShaderCache, keyed on resolved endpoints +
|
|
15
|
+
* stops) a linear-gradient shader resolved against the current shape bounds.
|
|
16
|
+
*/
|
|
17
|
+
export class LinearGradientFillRenderer extends FillRenderer {
|
|
18
|
+
cache = new GradientShaderCache();
|
|
19
|
+
applyPaint(fill, ctx) {
|
|
20
|
+
const ck = ctx.canvasKit;
|
|
21
|
+
const bounds = ctx.getShapeBounds();
|
|
22
|
+
if (!bounds)
|
|
23
|
+
return false;
|
|
24
|
+
const start = normToPixel(fill.start.x, fill.start.y, bounds);
|
|
25
|
+
const end = normToPixel(fill.end.x, fill.end.y, bounds);
|
|
26
|
+
const parts = ["L"];
|
|
27
|
+
pushNums(parts, start);
|
|
28
|
+
pushNums(parts, end);
|
|
29
|
+
for (const c of fill.colors)
|
|
30
|
+
pushNums(parts, c);
|
|
31
|
+
parts.push("|");
|
|
32
|
+
pushNums(parts, fill.stops);
|
|
33
|
+
const key = parts.join(",");
|
|
34
|
+
const shader = this.cache.get(key, () => {
|
|
35
|
+
const ckColors = toCkColors(ck, fill.colors);
|
|
36
|
+
const pos = fill.stops.length === ckColors.length
|
|
37
|
+
? fill.stops
|
|
38
|
+
: ckColors.map((_, i) => i / (ckColors.length - 1));
|
|
39
|
+
return ck.Shader.MakeLinearGradient(start, end, ckColors, pos, ck.TileMode.Clamp);
|
|
40
|
+
});
|
|
41
|
+
ctx.paint.setShader(shader);
|
|
42
|
+
return true;
|
|
43
|
+
}
|
|
44
|
+
dispose() {
|
|
45
|
+
this.cache.dispose();
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=linear-gradient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"linear-gradient.js","sourceRoot":"","sources":["../../src/fills/linear-gradient.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { NoiseFillResolved } from "@motion-script/core";
|
|
2
|
+
import { FillRenderer, type FillRendererContext } from "./renderer";
|
|
3
|
+
/**
|
|
4
|
+
* Generates a tiled noise texture sized to the shape's bounds and caches it
|
|
5
|
+
* by (size, grain, density, color) — the same fill reuses the same CKImage
|
|
6
|
+
* across frames as long as its resolved bounds don't change.
|
|
7
|
+
*/
|
|
8
|
+
export declare class NoiseFillRenderer extends FillRenderer<NoiseFillResolved> {
|
|
9
|
+
applyPaint(fill: NoiseFillResolved, ctx: FillRendererContext): boolean;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=noise.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"noise.d.ts","sourceRoot":"","sources":["../../src/fills/noise.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,YAAY,EAAE,KAAK,mBAAmB,EAAE,MAAM,YAAY,CAAC;AA2DpE;;;;GAIG;AACH,qBAAa,iBAAkB,SAAQ,YAAY,CAAC,iBAAiB,CAAC;IAClE,UAAU,CAAC,IAAI,EAAE,iBAAiB,EAAE,GAAG,EAAE,mBAAmB,GAAG,OAAO;CA2CzE"}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { FillRenderer } from "./renderer";
|
|
2
|
+
/** Cache key → CanvasKit Image holding the noise tile. */
|
|
3
|
+
const noiseCache = new Map();
|
|
4
|
+
function buildCacheKey(fill, w, h) {
|
|
5
|
+
const [r, g, b, a] = fill.color;
|
|
6
|
+
return `${w}x${h}|${fill.size.x},${fill.size.y}|${fill.density}|${r},${g},${b},${a}`;
|
|
7
|
+
}
|
|
8
|
+
/** PCG-style 2D hash — fully decorrelated on both axes. Returns [0, 1). */
|
|
9
|
+
function hash2(x, y, salt) {
|
|
10
|
+
// Mix x and y independently before combining
|
|
11
|
+
let v = (((x * 1664525 + 1013904223) ^ (y * 1664525 * 1664525 + 1013904223)) + salt) >>> 0;
|
|
12
|
+
v ^= v >>> 17;
|
|
13
|
+
v = Math.imul(v, 0x9e3779b9) >>> 0;
|
|
14
|
+
v ^= v >>> 13;
|
|
15
|
+
v = Math.imul(v, 0x6c62272e) >>> 0;
|
|
16
|
+
v ^= v >>> 16;
|
|
17
|
+
return (v >>> 0) / 0x100000000;
|
|
18
|
+
}
|
|
19
|
+
function generateNoiseData(width, height, fill) {
|
|
20
|
+
const [cr, cg, cb, ca] = fill.color;
|
|
21
|
+
const gr = Math.round(cr * 255);
|
|
22
|
+
const gg = Math.round(cg * 255);
|
|
23
|
+
const gb = Math.round(cb * 255);
|
|
24
|
+
const ga = Math.round(ca * 255);
|
|
25
|
+
const gx = Math.max(1, Math.round(fill.size.x));
|
|
26
|
+
const gy = Math.max(1, Math.round(fill.size.y));
|
|
27
|
+
const density = Math.min(1, Math.max(0, fill.density));
|
|
28
|
+
const data = new Uint8Array(width * height * 4);
|
|
29
|
+
for (let py = 0; py < height; py++) {
|
|
30
|
+
const by = Math.floor(py / gy);
|
|
31
|
+
for (let px = 0; px < width; px++) {
|
|
32
|
+
const bx = Math.floor(px / gx);
|
|
33
|
+
// Two independent hash calls with different salts — no axis correlation
|
|
34
|
+
const rnd = hash2(bx, by, 0);
|
|
35
|
+
const idx = (py * width + px) * 4;
|
|
36
|
+
if (rnd < density) {
|
|
37
|
+
const brightness = hash2(bx, by, 1);
|
|
38
|
+
data[idx] = Math.round(gr * brightness);
|
|
39
|
+
data[idx + 1] = Math.round(gg * brightness);
|
|
40
|
+
data[idx + 2] = Math.round(gb * brightness);
|
|
41
|
+
data[idx + 3] = ga;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return data;
|
|
46
|
+
}
|
|
47
|
+
/**
|
|
48
|
+
* Generates a tiled noise texture sized to the shape's bounds and caches it
|
|
49
|
+
* by (size, grain, density, color) — the same fill reuses the same CKImage
|
|
50
|
+
* across frames as long as its resolved bounds don't change.
|
|
51
|
+
*/
|
|
52
|
+
export class NoiseFillRenderer extends FillRenderer {
|
|
53
|
+
applyPaint(fill, ctx) {
|
|
54
|
+
const bounds = ctx.getShapeBounds();
|
|
55
|
+
const w = bounds ? Math.ceil(bounds.right - bounds.left) : 256;
|
|
56
|
+
const h = bounds ? Math.ceil(bounds.bottom - bounds.top) : 256;
|
|
57
|
+
if (w <= 0 || h <= 0)
|
|
58
|
+
return false;
|
|
59
|
+
const key = buildCacheKey(fill, w, h);
|
|
60
|
+
let img = noiseCache.get(key);
|
|
61
|
+
if (!img) {
|
|
62
|
+
const pixelData = generateNoiseData(w, h, fill);
|
|
63
|
+
img = ctx.canvasKit.MakeImage({
|
|
64
|
+
width: w,
|
|
65
|
+
height: h,
|
|
66
|
+
alphaType: ctx.canvasKit.AlphaType.Unpremul,
|
|
67
|
+
colorType: ctx.canvasKit.ColorType.RGBA_8888,
|
|
68
|
+
colorSpace: ctx.canvasKit.ColorSpace.SRGB,
|
|
69
|
+
}, pixelData, 4 * w);
|
|
70
|
+
if (!img)
|
|
71
|
+
return false;
|
|
72
|
+
noiseCache.set(key, img);
|
|
73
|
+
}
|
|
74
|
+
const tx = bounds?.left ?? 0;
|
|
75
|
+
const ty = bounds?.top ?? 0;
|
|
76
|
+
// Identity scale — noise fills at 1:1 pixels, translated to shape origin
|
|
77
|
+
const matrix = [1, 0, tx, 0, 1, ty, 0, 0, 1];
|
|
78
|
+
ctx.paint.setShader(img.makeShaderOptions(ctx.canvasKit.TileMode.Repeat, ctx.canvasKit.TileMode.Repeat, ctx.canvasKit.FilterMode.Nearest, ctx.canvasKit.MipmapMode.None, matrix));
|
|
79
|
+
return true;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=noise.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"noise.js","sourceRoot":"","sources":["../../src/fills/noise.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { RadialGradientFillResolved } from "@motion-script/core";
|
|
2
|
+
import { FillRenderer, type FillRendererContext } from "./renderer";
|
|
3
|
+
/** Builds and caches a radial-gradient shader resolved against the shape bounds (see linear-gradient for the caching pattern). */
|
|
4
|
+
export declare class RadialGradientFillRenderer extends FillRenderer<RadialGradientFillResolved> {
|
|
5
|
+
private cache;
|
|
6
|
+
applyPaint(fill: RadialGradientFillResolved, ctx: FillRendererContext): boolean;
|
|
7
|
+
dispose(): void;
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=radial-gradient.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"radial-gradient.d.ts","sourceRoot":"","sources":["../../src/fills/radial-gradient.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,KAAK,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAapE,kIAAkI;AAClI,qBAAa,0BAA2B,SAAQ,YAAY,CAAC,0BAA0B,CAAC;IACpF,OAAO,CAAC,KAAK,CAA6B;IAE1C,UAAU,CAAC,IAAI,EAAE,0BAA0B,EAAE,GAAG,EAAE,mBAAmB,GAAG,OAAO;IA0B/E,OAAO,IAAI,IAAI;CAGlB"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { FillRenderer } from "./renderer";
|
|
2
|
+
import { GradientShaderCache, toCkColors, pushNums } from "./gradient-cache";
|
|
3
|
+
// center: normalized -1..1 (x: -1=left +1=right, y: +1=top -1=bottom)
|
|
4
|
+
// radius: in pixels (absolute)
|
|
5
|
+
function normToPixel(nx, ny, bounds) {
|
|
6
|
+
const cx = (bounds.left + bounds.right) / 2;
|
|
7
|
+
const cy = (bounds.top + bounds.bottom) / 2;
|
|
8
|
+
const hw = (bounds.right - bounds.left) / 2;
|
|
9
|
+
const hh = (bounds.bottom - bounds.top) / 2;
|
|
10
|
+
return [cx + nx * hw, cy - ny * hh];
|
|
11
|
+
}
|
|
12
|
+
/** Builds and caches a radial-gradient shader resolved against the shape bounds (see linear-gradient for the caching pattern). */
|
|
13
|
+
export class RadialGradientFillRenderer extends FillRenderer {
|
|
14
|
+
cache = new GradientShaderCache();
|
|
15
|
+
applyPaint(fill, ctx) {
|
|
16
|
+
const ck = ctx.canvasKit;
|
|
17
|
+
const bounds = ctx.getShapeBounds();
|
|
18
|
+
if (!bounds)
|
|
19
|
+
return false;
|
|
20
|
+
const center = normToPixel(fill.center.x, fill.center.y, bounds);
|
|
21
|
+
const parts = ["R"];
|
|
22
|
+
pushNums(parts, center);
|
|
23
|
+
pushNums(parts, [fill.radius]);
|
|
24
|
+
for (const c of fill.colors)
|
|
25
|
+
pushNums(parts, c);
|
|
26
|
+
parts.push("|");
|
|
27
|
+
pushNums(parts, fill.stops);
|
|
28
|
+
const key = parts.join(",");
|
|
29
|
+
const shader = this.cache.get(key, () => {
|
|
30
|
+
const ckColors = toCkColors(ck, fill.colors);
|
|
31
|
+
const pos = fill.stops.length === ckColors.length
|
|
32
|
+
? fill.stops
|
|
33
|
+
: ckColors.map((_, i) => i / (ckColors.length - 1));
|
|
34
|
+
return ck.Shader.MakeRadialGradient(center, fill.radius, ckColors, pos, ck.TileMode.Clamp);
|
|
35
|
+
});
|
|
36
|
+
ctx.paint.setShader(shader);
|
|
37
|
+
return true;
|
|
38
|
+
}
|
|
39
|
+
dispose() {
|
|
40
|
+
this.cache.dispose();
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=radial-gradient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"radial-gradient.js","sourceRoot":"","sources":["../../src/fills/radial-gradient.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAA4B,MAAM,YAAY,CAAC;AACpE,OAAO,EAAE,mBAAmB,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE7E,sEAAsE;AACtE,+BAA+B;AAC/B,SAAS,WAAW,CAAC,EAAU,EAAE,EAAU,EAAE,MAAoE;IAC7G,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC5C,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC5C,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC5C,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC5C,OAAO,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;AACxC,CAAC;AAED,kIAAkI;AAClI,MAAM,OAAO,0BAA2B,SAAQ,YAAwC;IAC5E,KAAK,GAAG,IAAI,mBAAmB,EAAE,CAAC;IAE1C,UAAU,CAAC,IAAgC,EAAE,GAAwB;QACjE,MAAM,EAAE,GAAG,GAAG,CAAC,SAAS,CAAC;QACzB,MAAM,MAAM,GAAG,GAAG,CAAC,cAAc,EAAE,CAAC;QACpC,IAAI,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QAE1B,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;QAEjE,MAAM,KAAK,GAAa,CAAC,GAAG,CAAC,CAAC;QAC9B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;QACxB,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QAC/B,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,MAAM;YAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAChD,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChB,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5B,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAE5B,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE;YACpC,MAAM,QAAQ,GAAG,UAAU,CAAC,EAAE,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;YAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,QAAQ,CAAC,MAAM;gBAC7C,CAAC,CAAC,IAAI,CAAC,KAAK;gBACZ,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC;YACxD,OAAO,EAAE,CAAC,MAAM,CAAC,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC/F,CAAC,CAAC,CAAC;QACH,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QAC5B,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,OAAO;QACH,IAAI,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC;IACzB,CAAC;CACJ"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { FillResolved } from "@motion-script/core";
|
|
2
|
+
import { type FillRendererContext } from "./renderer";
|
|
3
|
+
/** Dispatches a resolved fill to its renderer by `fill.type`, keyed in `list`. */
|
|
4
|
+
export declare class FillRenderRegistry {
|
|
5
|
+
private static readonly list;
|
|
6
|
+
private static get;
|
|
7
|
+
static applyPaint(fill: FillResolved, ctx: FillRendererContext): boolean;
|
|
8
|
+
static disposeRenderers(): void;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/fills/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAQxD,OAAO,EAAgB,KAAK,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAOpE,kFAAkF;AAClF,qBAAa,kBAAkB;IAC3B,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAQ1B;IAEF,OAAO,CAAC,MAAM,CAAC,GAAG;IAIlB,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,YAAY,EAAE,GAAG,EAAE,mBAAmB,GAAG,OAAO;IAMxE,MAAM,CAAC,gBAAgB,IAAI,IAAI;CAKlC"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { ImageFillRenderer } from "./image";
|
|
2
|
+
import { LinearGradientFillRenderer } from "./linear-gradient";
|
|
3
|
+
import { RadialGradientFillRenderer } from "./radial-gradient";
|
|
4
|
+
import { ConicGradientFillRenderer } from "./conic-gradient";
|
|
5
|
+
import { NoiseFillRenderer } from "./noise";
|
|
6
|
+
import { StripeFillRenderer } from "./stripe";
|
|
7
|
+
import { SolidFillRenderer } from "./solid";
|
|
8
|
+
/** Dispatches a resolved fill to its renderer by `fill.type`, keyed in `list`. */
|
|
9
|
+
export class FillRenderRegistry {
|
|
10
|
+
static list = [
|
|
11
|
+
{ name: "color", renderer: new SolidFillRenderer() },
|
|
12
|
+
{ name: "linear-gradient", renderer: new LinearGradientFillRenderer() },
|
|
13
|
+
{ name: "radial-gradient", renderer: new RadialGradientFillRenderer() },
|
|
14
|
+
{ name: "conic-gradient", renderer: new ConicGradientFillRenderer() },
|
|
15
|
+
{ name: "image", renderer: new ImageFillRenderer() },
|
|
16
|
+
{ name: "noise", renderer: new NoiseFillRenderer() },
|
|
17
|
+
{ name: "stripe", renderer: new StripeFillRenderer() },
|
|
18
|
+
];
|
|
19
|
+
static get(name) {
|
|
20
|
+
return this.list.find((entry) => entry.name === name)?.renderer;
|
|
21
|
+
}
|
|
22
|
+
static applyPaint(fill, ctx) {
|
|
23
|
+
const renderer = this.get(fill.type);
|
|
24
|
+
if (!renderer)
|
|
25
|
+
return false;
|
|
26
|
+
return renderer.applyPaint(fill, ctx);
|
|
27
|
+
}
|
|
28
|
+
static disposeRenderers() {
|
|
29
|
+
for (const { renderer } of this.list) {
|
|
30
|
+
renderer?.dispose();
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/fills/registry.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,0BAA0B,EAAE,MAAM,mBAAmB,CAAC;AAC/D,OAAO,EAAE,yBAAyB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAC5C,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAQ5C,kFAAkF;AAClF,MAAM,OAAO,kBAAkB;IACnB,MAAM,CAAU,IAAI,GAAwB;QAChD,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,iBAAiB,EAAE,EAAE;QACpD,EAAE,IAAI,EAAE,iBAAiB,EAAE,QAAQ,EAAE,IAAI,0BAA0B,EAAE,EAAE;QACvE,EAAE,IAAI,EAAE,iBAAiB,EAAE,QAAQ,EAAE,IAAI,0BAA0B,EAAE,EAAE;QACvE,EAAE,IAAI,EAAE,gBAAgB,EAAE,QAAQ,EAAE,IAAI,yBAAyB,EAAE,EAAE;QACrE,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,iBAAiB,EAAE,EAAE;QACpD,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,iBAAiB,EAAE,EAAE;QACpD,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,kBAAkB,EAAE,EAAE;KACzD,CAAC;IAEM,MAAM,CAAC,GAAG,CAAC,IAAY;QAC3B,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,QAAQ,CAAC;IACpE,CAAC;IAED,MAAM,CAAC,UAAU,CAAC,IAAkB,EAAE,GAAwB;QAC1D,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrC,IAAI,CAAC,QAAQ;YAAE,OAAO,KAAK,CAAC;QAC5B,OAAO,QAAQ,CAAC,UAAU,CAAC,IAAW,EAAE,GAAG,CAAC,CAAC;IACjD,CAAC;IAED,MAAM,CAAC,gBAAgB;QACnB,KAAK,MAAM,EAAE,QAAQ,EAAE,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;YACnC,QAAQ,EAAE,OAAO,EAAE,CAAC;QACxB,CAAC;IACL,CAAC"}
|