@flighthq/shape 0.3.0-next.906.07cea63 → 0.3.1-next.209.43ef1bc
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/dist/compactStrokePath.d.ts +3 -0
- package/dist/compactStrokePath.d.ts.map +1 -0
- package/dist/compactStrokePath.js +462 -0
- package/dist/compactStrokePath.js.map +1 -0
- package/dist/contract.d.ts +7 -2
- package/dist/contract.d.ts.map +1 -1
- package/dist/contract.js +7 -2
- package/dist/contract.js.map +1 -1
- package/dist/explainMorphShapeGradientEndpoints.d.ts +5 -0
- package/dist/explainMorphShapeGradientEndpoints.d.ts.map +1 -0
- package/dist/explainMorphShapeGradientEndpoints.js +43 -0
- package/dist/explainMorphShapeGradientEndpoints.js.map +1 -0
- package/dist/explainShapeTessellation.d.ts +3 -0
- package/dist/explainShapeTessellation.d.ts.map +1 -0
- package/dist/explainShapeTessellation.js +20 -0
- package/dist/explainShapeTessellation.js.map +1 -0
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/morphShape.d.ts +8 -0
- package/dist/morphShape.d.ts.map +1 -0
- package/dist/morphShape.js +74 -0
- package/dist/morphShape.js.map +1 -0
- package/dist/morphShapeAnimation.d.ts +5 -0
- package/dist/morphShapeAnimation.d.ts.map +1 -0
- package/dist/morphShapeAnimation.js +27 -0
- package/dist/morphShapeAnimation.js.map +1 -0
- package/dist/morphShapePaint.d.ts +9 -0
- package/dist/morphShapePaint.d.ts.map +1 -0
- package/dist/morphShapePaint.js +183 -0
- package/dist/morphShapePaint.js.map +1 -0
- package/dist/scale9ShapeCommands.d.ts +3 -0
- package/dist/scale9ShapeCommands.d.ts.map +1 -0
- package/dist/scale9ShapeCommands.js +119 -0
- package/dist/scale9ShapeCommands.js.map +1 -0
- package/dist/shape.d.ts.map +1 -1
- package/dist/shape.js +16 -3
- package/dist/shape.js.map +1 -1
- package/dist/shapeCommands.d.ts +3 -3
- package/dist/shapeCommands.d.ts.map +1 -1
- package/dist/shapeCommands.js +8 -8
- package/dist/shapeCommands.js.map +1 -1
- package/dist/shapeFill.d.ts.map +1 -1
- package/dist/shapeFill.js +8 -14
- package/dist/shapeFill.js.map +1 -1
- package/dist/shapeStroke.d.ts +2 -2
- package/dist/shapeStroke.d.ts.map +1 -1
- package/dist/shapeStroke.js +13 -77
- package/dist/shapeStroke.js.map +1 -1
- package/dist/shapeStrokeOutline.d.ts +3 -0
- package/dist/shapeStrokeOutline.d.ts.map +1 -0
- package/dist/shapeStrokeOutline.js +164 -0
- package/dist/shapeStrokeOutline.js.map +1 -0
- package/package.json +10 -7
- package/src/compactStrokePath.test.ts +31 -0
- package/src/explainMorphShapeGradientEndpoints.test.ts +47 -0
- package/src/explainShapeTessellation.test.ts +65 -0
- package/src/morphShape.test.ts +207 -0
- package/src/morphShapeAnimation.test.ts +147 -0
- package/src/morphShapePaint.test.ts +236 -0
- package/src/scale9ShapeCommands.test.ts +64 -0
- package/src/shape.test.ts +35 -0
- package/src/shapeCommands.test.ts +31 -31
- package/src/shapeFill.test.ts +9 -3
- package/src/shapeStroke.test.ts +35 -24
- package/src/shapeStrokeOutline.test.ts +31 -0
- package/dist/shapeHitTestBuiltins.d.ts +0 -2
- package/dist/shapeHitTestBuiltins.d.ts.map +0 -1
- package/dist/shapeHitTestBuiltins.js +0 -85
- package/dist/shapeHitTestBuiltins.js.map +0 -1
- package/dist/shapeHitTestRegistry.d.ts +0 -4
- package/dist/shapeHitTestRegistry.d.ts.map +0 -1
- package/dist/shapeHitTestRegistry.js +0 -13
- package/dist/shapeHitTestRegistry.js.map +0 -1
- package/src/shapeHitTestBuiltins.test.ts +0 -77
- package/src/shapeHitTestRegistry.test.ts +0 -45
package/dist/index.d.ts
CHANGED
|
@@ -1,2 +1,4 @@
|
|
|
1
|
-
export { PathCommand, appendShapeArc, appendShapeArcTo,
|
|
1
|
+
export { PathCommand, applyAnimationClipToMorphShape, applyMorphShapeAnimationSample, appendMorphShapeBeginFill, appendMorphShapeBeginGradientFill, appendMorphShapeBeginTextureFill, appendMorphShapeLineGradientStyle, appendMorphShapeLineStyle, appendMorphShapeLineTextureStyle, appendMorphShapePath, appendShapeArc, appendShapeArcTo, appendShapeBeginTextureFill, appendShapeBeginFill, appendShapeBeginGradientFill, appendShapeCircle, appendShapeCubicCurveTo, appendShapeCurveTo, appendShapeDrawTriangles, appendShapeEllipse, appendShapeEndFill, appendShapeGeometryCommand, appendShapeLineTextureStyle, appendShapeLineGradientStyle, appendShapeLineStyle, appendShapeLineTo, appendShapeMoveTo, appendShapePath, appendShapePolygon, appendShapePolyline, appendShapeRectangle, appendShapeRoundRectangle, appendShapeRoundRectangleVarying, clearShapeCommands, computeShapeLocalBoundsRectangle, copyShapeCommands, createMorphShape, createMorphShapeAnimationTarget, createScale9Shape, createShape, explainMorphShapeGradientEndpoints, getPathCommandOperandCount, getShapeBounds, getShapeCommandCount, getShapeFillRegions, getShapeStrokeRegions, getShapeStrokeOutlineRegions, hasNonSolidShapeFill, hasNonSolidShapeStroke, hasShapeFill, isShapeEmpty, setMorphShapeProgress, } from './contract';
|
|
2
|
+
export * from './scale9ShapeCommands';
|
|
3
|
+
export * from './explainShapeTessellation';
|
|
2
4
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,cAAc,EACd,gBAAgB,EAChB,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,8BAA8B,EAC9B,8BAA8B,EAC9B,yBAAyB,EACzB,iCAAiC,EACjC,gCAAgC,EAChC,iCAAiC,EACjC,yBAAyB,EACzB,gCAAgC,EAChC,oBAAoB,EACpB,cAAc,EACd,gBAAgB,EAChB,2BAA2B,EAC3B,oBAAoB,EACpB,4BAA4B,EAC5B,iBAAiB,EACjB,uBAAuB,EACvB,kBAAkB,EAClB,wBAAwB,EACxB,kBAAkB,EAClB,kBAAkB,EAClB,0BAA0B,EAC1B,2BAA2B,EAC3B,4BAA4B,EAC5B,oBAAoB,EACpB,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,yBAAyB,EACzB,gCAAgC,EAChC,kBAAkB,EAClB,gCAAgC,EAChC,iBAAiB,EACjB,gBAAgB,EAChB,+BAA+B,EAC/B,iBAAiB,EACjB,WAAW,EACX,kCAAkC,EAClC,0BAA0B,EAC1B,cAAc,EACd,oBAAoB,EACpB,mBAAmB,EACnB,qBAAqB,EACrB,4BAA4B,EAC5B,oBAAoB,EACpB,sBAAsB,EACtB,YAAY,EACZ,YAAY,EACZ,qBAAqB,GACtB,MAAM,YAAY,CAAC;AACpB,cAAc,uBAAuB,CAAC;AACtC,cAAc,4BAA4B,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,2 +1,4 @@
|
|
|
1
|
-
export { PathCommand, appendShapeArc, appendShapeArcTo,
|
|
1
|
+
export { PathCommand, applyAnimationClipToMorphShape, applyMorphShapeAnimationSample, appendMorphShapeBeginFill, appendMorphShapeBeginGradientFill, appendMorphShapeBeginTextureFill, appendMorphShapeLineGradientStyle, appendMorphShapeLineStyle, appendMorphShapeLineTextureStyle, appendMorphShapePath, appendShapeArc, appendShapeArcTo, appendShapeBeginTextureFill, appendShapeBeginFill, appendShapeBeginGradientFill, appendShapeCircle, appendShapeCubicCurveTo, appendShapeCurveTo, appendShapeDrawTriangles, appendShapeEllipse, appendShapeEndFill, appendShapeGeometryCommand, appendShapeLineTextureStyle, appendShapeLineGradientStyle, appendShapeLineStyle, appendShapeLineTo, appendShapeMoveTo, appendShapePath, appendShapePolygon, appendShapePolyline, appendShapeRectangle, appendShapeRoundRectangle, appendShapeRoundRectangleVarying, clearShapeCommands, computeShapeLocalBoundsRectangle, copyShapeCommands, createMorphShape, createMorphShapeAnimationTarget, createScale9Shape, createShape, explainMorphShapeGradientEndpoints, getPathCommandOperandCount, getShapeBounds, getShapeCommandCount, getShapeFillRegions, getShapeStrokeRegions, getShapeStrokeOutlineRegions, hasNonSolidShapeFill, hasNonSolidShapeStroke, hasShapeFill, isShapeEmpty, setMorphShapeProgress, } from './contract';
|
|
2
|
+
export * from './scale9ShapeCommands';
|
|
3
|
+
export * from './explainShapeTessellation';
|
|
2
4
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,cAAc,EACd,gBAAgB,EAChB,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,8BAA8B,EAC9B,8BAA8B,EAC9B,yBAAyB,EACzB,iCAAiC,EACjC,gCAAgC,EAChC,iCAAiC,EACjC,yBAAyB,EACzB,gCAAgC,EAChC,oBAAoB,EACpB,cAAc,EACd,gBAAgB,EAChB,2BAA2B,EAC3B,oBAAoB,EACpB,4BAA4B,EAC5B,iBAAiB,EACjB,uBAAuB,EACvB,kBAAkB,EAClB,wBAAwB,EACxB,kBAAkB,EAClB,kBAAkB,EAClB,0BAA0B,EAC1B,2BAA2B,EAC3B,4BAA4B,EAC5B,oBAAoB,EACpB,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,kBAAkB,EAClB,mBAAmB,EACnB,oBAAoB,EACpB,yBAAyB,EACzB,gCAAgC,EAChC,kBAAkB,EAClB,gCAAgC,EAChC,iBAAiB,EACjB,gBAAgB,EAChB,+BAA+B,EAC/B,iBAAiB,EACjB,WAAW,EACX,kCAAkC,EAClC,0BAA0B,EAC1B,cAAc,EACd,oBAAoB,EACpB,mBAAmB,EACnB,qBAAqB,EACrB,4BAA4B,EAC5B,oBAAoB,EACpB,sBAAsB,EACtB,YAAY,EACZ,YAAY,EACZ,qBAAqB,GACtB,MAAM,YAAY,CAAC;AACpB,cAAc,uBAAuB,CAAC;AACtC,cAAc,4BAA4B,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { MorphShape, MorphShapeData, MorphShapeRuntime, PartialNode, Path, PathMorph } from '@flighthq/types/contract';
|
|
2
|
+
export declare function appendMorphShapePath(shape: MorphShape, morph?: Readonly<PathMorph>): Path;
|
|
3
|
+
export declare function createMorphShape(morph: Readonly<PathMorph>, obj?: Readonly<PartialNode<MorphShape>>): MorphShape;
|
|
4
|
+
export declare function createMorphShapeData(morph: Readonly<PathMorph>, data?: Readonly<Partial<MorphShapeData>>): MorphShapeData;
|
|
5
|
+
export declare function createMorphShapeRuntime(): MorphShapeRuntime;
|
|
6
|
+
export declare function getMorphShapeRuntime(source: Readonly<MorphShape>): Readonly<MorphShapeRuntime>;
|
|
7
|
+
export declare function setMorphShapeProgress(shape: MorphShape, progress: number): void;
|
|
8
|
+
//# sourceMappingURL=morphShape.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"morphShape.d.ts","sourceRoot":"","sources":["../src/morphShape.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,UAAU,EACV,cAAc,EACd,iBAAiB,EACjB,WAAW,EACX,IAAI,EACJ,SAAS,EACV,MAAM,0BAA0B,CAAC;AAUlC,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,GAAE,QAAQ,CAAC,SAAS,CAAoB,GAAG,IAAI,CAW3G;AAMD,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,QAAQ,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,EAAE,QAAQ,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC,GAAG,UAAU,CAOhH;AAED,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,QAAQ,CAAC,SAAS,CAAC,EAC1B,IAAI,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,GACvC,cAAc,CAsBhB;AAED,wBAAgB,uBAAuB,IAAI,iBAAiB,CAE3D;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,QAAQ,CAAC,UAAU,CAAC,GAAG,QAAQ,CAAC,iBAAiB,CAAC,CAE9F;AAKD,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAS/E"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import { invalidateContent } from '@flighthq/node/contract';
|
|
2
|
+
import { createPath, samplePathMorph } from '@flighthq/path/contract';
|
|
3
|
+
import { createNode2D, getNode2DRuntime } from '@flighthq/scene2d/contract';
|
|
4
|
+
import { MorphShapeKind } from '@flighthq/types/contract';
|
|
5
|
+
import { sampleMorphShapePaintBindings } from './morphShapePaint';
|
|
6
|
+
import { createShapeRuntime } from './shape';
|
|
7
|
+
import { appendShapePath } from './shapeCommands';
|
|
8
|
+
// Adds a stable sampled path at the current point in the retained command stream. Omitting `morph` uses
|
|
9
|
+
// the primary compatibility binding; passing another prepared morph creates or reuses an independent
|
|
10
|
+
// live path, allowing one MorphShape to retain multiple fill/stroke regions without child nodes.
|
|
11
|
+
export function appendMorphShapePath(shape, morph = shape.data.morph) {
|
|
12
|
+
let binding = shape.data.pathBindings.find((candidate) => candidate.morph === morph);
|
|
13
|
+
if (binding === undefined) {
|
|
14
|
+
const path = createPath(morph.winding);
|
|
15
|
+
samplePathMorph(path, morph, shape.data.progress);
|
|
16
|
+
binding = { morph, path };
|
|
17
|
+
shape.data.pathBindings.push(binding);
|
|
18
|
+
}
|
|
19
|
+
const path = binding.path;
|
|
20
|
+
appendShapePath(shape, path.commands, path.data, path.winding);
|
|
21
|
+
return path;
|
|
22
|
+
}
|
|
23
|
+
// Creates a retained MorphShape entity around a prepared path morph. The command stream starts empty,
|
|
24
|
+
// like createShape; use appendMorphShapePath after the desired fill/stroke commands. Playback is
|
|
25
|
+
// intentionally absent—animation/timeline code drives setMorphShapeProgress explicitly. Backends expose
|
|
26
|
+
// their default MorphShape renderer as an explicit alias of their Shape command-stream renderer.
|
|
27
|
+
export function createMorphShape(morph, obj) {
|
|
28
|
+
return createNode2D(MorphShapeKind, obj, (data) => createMorphShapeData(morph, data), createMorphShapeRuntime);
|
|
29
|
+
}
|
|
30
|
+
export function createMorphShapeData(morph, data) {
|
|
31
|
+
const progress = data?.progress ?? 0;
|
|
32
|
+
const path = data?.path ?? createPath(morph.winding);
|
|
33
|
+
const pathBindings = [{ morph, path }];
|
|
34
|
+
const inputPathBindings = data?.pathBindings ?? [];
|
|
35
|
+
for (let i = 0; i < inputPathBindings.length; i++) {
|
|
36
|
+
const binding = inputPathBindings[i];
|
|
37
|
+
if (binding.morph !== morph && binding.path !== path)
|
|
38
|
+
pathBindings.push(binding);
|
|
39
|
+
}
|
|
40
|
+
for (let i = 0; i < pathBindings.length; i++) {
|
|
41
|
+
samplePathMorph(pathBindings[i].path, pathBindings[i].morph, progress);
|
|
42
|
+
}
|
|
43
|
+
const out = {
|
|
44
|
+
commands: data?.commands ?? [],
|
|
45
|
+
morph,
|
|
46
|
+
paintBindings: [...(data?.paintBindings ?? [])],
|
|
47
|
+
path,
|
|
48
|
+
pathBindings,
|
|
49
|
+
progress,
|
|
50
|
+
};
|
|
51
|
+
sampleMorphShapePaintBindings(out, progress);
|
|
52
|
+
return out;
|
|
53
|
+
}
|
|
54
|
+
export function createMorphShapeRuntime() {
|
|
55
|
+
return createShapeRuntime();
|
|
56
|
+
}
|
|
57
|
+
export function getMorphShapeRuntime(source) {
|
|
58
|
+
return getNode2DRuntime(source);
|
|
59
|
+
}
|
|
60
|
+
// Samples changed progress into every stable path and paint value retained by the command stream, then
|
|
61
|
+
// invalidates Shape content once so bounds and every backend observe one atomic state change. Reapplying
|
|
62
|
+
// the same value is a no-op; progress remains unclamped to preserve deliberate easing overshoot.
|
|
63
|
+
export function setMorphShapeProgress(shape, progress) {
|
|
64
|
+
if (shape.data.progress === progress)
|
|
65
|
+
return;
|
|
66
|
+
shape.data.progress = progress;
|
|
67
|
+
for (let i = 0; i < shape.data.pathBindings.length; i++) {
|
|
68
|
+
const binding = shape.data.pathBindings[i];
|
|
69
|
+
samplePathMorph(binding.path, binding.morph, progress);
|
|
70
|
+
}
|
|
71
|
+
sampleMorphShapePaintBindings(shape.data, progress);
|
|
72
|
+
invalidateContent(shape);
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=morphShape.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"morphShape.js","sourceRoot":"","sources":["../src/morphShape.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { AnimationChannel, AnimationClip, MorphShape, MorphShapeAnimationTarget } from '@flighthq/types/contract';
|
|
2
|
+
export declare function applyAnimationClipToMorphShape(clip: Readonly<AnimationClip>, time: number): void;
|
|
3
|
+
export declare function applyMorphShapeAnimationSample(sampled: Readonly<ArrayLike<number>>, channel: Readonly<AnimationChannel>): boolean;
|
|
4
|
+
export declare function createMorphShapeAnimationTarget(shape: MorphShape): MorphShapeAnimationTarget;
|
|
5
|
+
//# sourceMappingURL=morphShapeAnimation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"morphShapeAnimation.d.ts","sourceRoot":"","sources":["../src/morphShapeAnimation.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,aAAa,EAAE,UAAU,EAAE,yBAAyB,EAAE,MAAM,0BAA0B,CAAC;AAOvH,wBAAgB,8BAA8B,CAAC,IAAI,EAAE,QAAQ,CAAC,aAAa,CAAC,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAEhG;AAID,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,QAAQ,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,EACpC,OAAO,EAAE,QAAQ,CAAC,gBAAgB,CAAC,GAClC,OAAO,CAOT;AAID,wBAAgB,+BAA+B,CAAC,KAAK,EAAE,UAAU,GAAG,yBAAyB,CAE5F"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { sampleAnimationClip } from '@flighthq/animation/contract';
|
|
2
|
+
import { MorphShapeKind } from '@flighthq/types/contract';
|
|
3
|
+
import { setMorphShapeProgress } from './morphShape';
|
|
4
|
+
// Samples every channel at `time` and applies the channels carrying MorphShapeAnimationTarget refs.
|
|
5
|
+
// Foreign targets are ignored, so one clip may compose MorphShape progress with other domain sinks.
|
|
6
|
+
export function applyAnimationClipToMorphShape(clip, time) {
|
|
7
|
+
sampleAnimationClip(morphShapeAnimationScratch, clip, time, applyMorphShapeAnimationSample);
|
|
8
|
+
}
|
|
9
|
+
// Allocation-free visitor shared by clip, crossfade, blend-tree, state-machine, and layer-stack
|
|
10
|
+
// samplers. Returns whether the channel carried a valid MorphShape animation target.
|
|
11
|
+
export function applyMorphShapeAnimationSample(sampled, channel) {
|
|
12
|
+
const target = channel.targetRef;
|
|
13
|
+
if (target === null || typeof target !== 'object' || target.shape === undefined)
|
|
14
|
+
return false;
|
|
15
|
+
const shape = target.shape;
|
|
16
|
+
if (shape === null || typeof shape !== 'object' || shape.kind !== MorphShapeKind)
|
|
17
|
+
return false;
|
|
18
|
+
setMorphShapeProgress(shape, sampled[0]);
|
|
19
|
+
return true;
|
|
20
|
+
}
|
|
21
|
+
// Allocates one stable binding descriptor. Keep and reuse this identity when multiple animation
|
|
22
|
+
// controllers should recognize their MorphShape progress channels as the same target.
|
|
23
|
+
export function createMorphShapeAnimationTarget(shape) {
|
|
24
|
+
return { shape };
|
|
25
|
+
}
|
|
26
|
+
const morphShapeAnimationScratch = [0];
|
|
27
|
+
//# sourceMappingURL=morphShapeAnimation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"morphShapeAnimation.js","sourceRoot":"","sources":["../src/morphShapeAnimation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAEnE,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE1D,OAAO,EAAE,qBAAqB,EAAE,MAAM,cAAc,CAAC;AAErD,oGAAoG;AACpG,oGAAoG;AACpG,MAAM,UAAU,8BAA8B,CAAC,IAA6B,EAAE,IAAY;IACxF,mBAAmB,CAAC,0BAA0B,EAAE,IAAI,EAAE,IAAI,EAAE,8BAA8B,CAAC,CAAC;AAC9F,CAAC;AAED,gGAAgG;AAChG,qFAAqF;AACrF,MAAM,UAAU,8BAA8B,CAC5C,OAAoC,EACpC,OAAmC;IAEnC,MAAM,MAAM,GAAG,OAAO,CAAC,SAA6C,CAAC;IACrE,IAAI,MAAM,KAAK,IAAI,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IAC9F,MAAM,KAAK,GAAG,MAAM,CAAC,KAA0B,CAAC;IAChD,IAAI,KAAK,KAAK,IAAI,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,cAAc;QAAE,OAAO,KAAK,CAAC;IAC/F,qBAAqB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;IACzC,OAAO,IAAI,CAAC;AACd,CAAC;AAED,gGAAgG;AAChG,sFAAsF;AACtF,MAAM,UAAU,+BAA+B,CAAC,KAAiB;IAC/D,OAAO,EAAE,KAAK,EAAE,CAAC;AACnB,CAAC;AAED,MAAM,0BAA0B,GAAa,CAAC,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { CapsStyle, GradientType, InterpolationMethod, JointStyle, LineScaleMode, Matrix, MorphShape, MorphShapeColorEndpoint, MorphShapeData, MorphShapeGradientEndpoint, MorphShapeLineEndpoint, SpreadMethod, Texture } from '@flighthq/types/contract';
|
|
2
|
+
export declare function appendMorphShapeBeginFill(shape: MorphShape, start: Readonly<MorphShapeColorEndpoint>, end: Readonly<MorphShapeColorEndpoint>): void;
|
|
3
|
+
export declare function appendMorphShapeBeginGradientFill(shape: MorphShape, gradientType: GradientType, start: Readonly<MorphShapeGradientEndpoint>, end: Readonly<MorphShapeGradientEndpoint>, spreadMethod?: SpreadMethod, interpolationMethod?: InterpolationMethod): boolean;
|
|
4
|
+
export declare function appendMorphShapeBeginTextureFill(shape: MorphShape, texture: Texture, startMatrix?: Readonly<Matrix> | null, endMatrix?: Readonly<Matrix> | null): void;
|
|
5
|
+
export declare function appendMorphShapeLineGradientStyle(shape: MorphShape, gradientType: GradientType, start: Readonly<MorphShapeGradientEndpoint>, end: Readonly<MorphShapeGradientEndpoint>, spreadMethod?: SpreadMethod, interpolationMethod?: InterpolationMethod): boolean;
|
|
6
|
+
export declare function appendMorphShapeLineStyle(shape: MorphShape, start: Readonly<MorphShapeLineEndpoint>, end: Readonly<MorphShapeLineEndpoint>, pixelHinting?: boolean, scaleMode?: LineScaleMode, caps?: CapsStyle, joints?: JointStyle, miterLimit?: number): void;
|
|
7
|
+
export declare function appendMorphShapeLineTextureStyle(shape: MorphShape, texture: Texture, startMatrix?: Readonly<Matrix> | null, endMatrix?: Readonly<Matrix> | null): void;
|
|
8
|
+
export declare function sampleMorphShapePaintBindings(data: MorphShapeData, progress: number): void;
|
|
9
|
+
//# sourceMappingURL=morphShapePaint.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"morphShapePaint.d.ts","sourceRoot":"","sources":["../src/morphShapePaint.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,SAAS,EACT,YAAY,EACZ,mBAAmB,EACnB,UAAU,EACV,aAAa,EACb,MAAM,EACN,UAAU,EACV,uBAAuB,EACvB,cAAc,EACd,0BAA0B,EAE1B,sBAAsB,EAEtB,YAAY,EACZ,OAAO,EACR,MAAM,0BAA0B,CAAC;AAclC,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,UAAU,EACjB,KAAK,EAAE,QAAQ,CAAC,uBAAuB,CAAC,EACxC,GAAG,EAAE,QAAQ,CAAC,uBAAuB,CAAC,GACrC,IAAI,CAgBN;AAID,wBAAgB,iCAAiC,CAC/C,KAAK,EAAE,UAAU,EACjB,YAAY,EAAE,YAAY,EAC1B,KAAK,EAAE,QAAQ,CAAC,0BAA0B,CAAC,EAC3C,GAAG,EAAE,QAAQ,CAAC,0BAA0B,CAAC,EACzC,YAAY,GAAE,YAAoB,EAClC,mBAAmB,GAAE,mBAA2B,GAC/C,OAAO,CAUT;AAID,wBAAgB,gCAAgC,CAC9C,KAAK,EAAE,UAAU,EACjB,OAAO,EAAE,OAAO,EAChB,WAAW,GAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,IAAW,EAC3C,SAAS,GAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,IAAkB,GAC/C,IAAI,CAEN;AAED,wBAAgB,iCAAiC,CAC/C,KAAK,EAAE,UAAU,EACjB,YAAY,EAAE,YAAY,EAC1B,KAAK,EAAE,QAAQ,CAAC,0BAA0B,CAAC,EAC3C,GAAG,EAAE,QAAQ,CAAC,0BAA0B,CAAC,EACzC,YAAY,GAAE,YAAoB,EAClC,mBAAmB,GAAE,mBAA2B,GAC/C,OAAO,CAUT;AAED,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,UAAU,EACjB,KAAK,EAAE,QAAQ,CAAC,sBAAsB,CAAC,EACvC,GAAG,EAAE,QAAQ,CAAC,sBAAsB,CAAC,EACrC,YAAY,UAAQ,EACpB,SAAS,GAAE,aAAwB,EACnC,IAAI,GAAE,SAAkB,EACxB,MAAM,GAAE,UAAoB,EAC5B,UAAU,SAAI,GACb,IAAI,CA4BN;AAED,wBAAgB,gCAAgC,CAC9C,KAAK,EAAE,UAAU,EACjB,OAAO,EAAE,OAAO,EAChB,WAAW,GAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,IAAW,EAC3C,SAAS,GAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,IAAkB,GAC/C,IAAI,CAEN;AAED,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,GAAG,IAAI,CAI1F"}
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
import { cloneMatrix, createMatrix } from '@flighthq/geometry/contract';
|
|
2
|
+
import { getMorphShapeGradientEndpointIssue } from './explainMorphShapeGradientEndpoints';
|
|
3
|
+
import { appendShapeBeginFill, appendShapeBeginGradientFill, appendShapeBeginTextureFill, appendShapeLineGradientStyle, appendShapeLineStyle, appendShapeLineTextureStyle, } from './shapeCommands';
|
|
4
|
+
// Appends an ordinary beginFill command backed by a stable start/end paint binding. Geometry and paint
|
|
5
|
+
// share MorphShape.progress and are sampled atomically by setMorphShapeProgress.
|
|
6
|
+
export function appendMorphShapeBeginFill(shape, start, end) {
|
|
7
|
+
const commandIndex = shape.data.commands.length;
|
|
8
|
+
appendShapeBeginFill(shape, start.color, start.alpha ?? 1);
|
|
9
|
+
shape.data.paintBindings.push({
|
|
10
|
+
commandIndex,
|
|
11
|
+
endAlpha: end.alpha ?? 1,
|
|
12
|
+
endColor: end.color,
|
|
13
|
+
kind: 'color',
|
|
14
|
+
startAlpha: start.alpha ?? 1,
|
|
15
|
+
startColor: start.color,
|
|
16
|
+
});
|
|
17
|
+
sampleMorphShapePaintBinding(shape.data, shape.data.paintBindings[shape.data.paintBindings.length - 1], shape.data.progress);
|
|
18
|
+
}
|
|
19
|
+
// Returns false without appending when either gradient endpoint is malformed or their stop counts differ.
|
|
20
|
+
// Equal stop counts make sampling allocation-free and match the structural contract of authored morphs.
|
|
21
|
+
export function appendMorphShapeBeginGradientFill(shape, gradientType, start, end, spreadMethod = 'pad', interpolationMethod = 'rgb') {
|
|
22
|
+
return appendMorphShapeGradientPaint(shape, 'beginGradientFill', gradientType, start, end, spreadMethod, interpolationMethod);
|
|
23
|
+
}
|
|
24
|
+
// A texture itself is structurally shared by both endpoints; only its placement matrix morphs. Null is
|
|
25
|
+
// the identity matrix, so a null/non-null pair interpolates continuously without changing command shape.
|
|
26
|
+
export function appendMorphShapeBeginTextureFill(shape, texture, startMatrix = null, endMatrix = startMatrix) {
|
|
27
|
+
appendMorphShapeTexturePaint(shape, 'beginTextureFill', texture, startMatrix, endMatrix);
|
|
28
|
+
}
|
|
29
|
+
export function appendMorphShapeLineGradientStyle(shape, gradientType, start, end, spreadMethod = 'pad', interpolationMethod = 'rgb') {
|
|
30
|
+
return appendMorphShapeGradientPaint(shape, 'lineGradientStyle', gradientType, start, end, spreadMethod, interpolationMethod);
|
|
31
|
+
}
|
|
32
|
+
export function appendMorphShapeLineStyle(shape, start, end, pixelHinting = false, scaleMode = 'normal', caps = 'none', joints = 'round', miterLimit = 3) {
|
|
33
|
+
const commandIndex = shape.data.commands.length;
|
|
34
|
+
appendShapeLineStyle(shape, start.thickness, start.color, start.alpha ?? 1, pixelHinting, scaleMode, caps, joints, miterLimit);
|
|
35
|
+
shape.data.paintBindings.push({
|
|
36
|
+
commandIndex,
|
|
37
|
+
endAlpha: end.alpha ?? 1,
|
|
38
|
+
endColor: end.color,
|
|
39
|
+
endThickness: end.thickness,
|
|
40
|
+
kind: 'line',
|
|
41
|
+
startAlpha: start.alpha ?? 1,
|
|
42
|
+
startColor: start.color,
|
|
43
|
+
startThickness: start.thickness,
|
|
44
|
+
});
|
|
45
|
+
sampleMorphShapePaintBinding(shape.data, shape.data.paintBindings[shape.data.paintBindings.length - 1], shape.data.progress);
|
|
46
|
+
}
|
|
47
|
+
export function appendMorphShapeLineTextureStyle(shape, texture, startMatrix = null, endMatrix = startMatrix) {
|
|
48
|
+
appendMorphShapeTexturePaint(shape, 'lineTextureStyle', texture, startMatrix, endMatrix);
|
|
49
|
+
}
|
|
50
|
+
export function sampleMorphShapePaintBindings(data, progress) {
|
|
51
|
+
for (let i = 0; i < data.paintBindings.length; i++) {
|
|
52
|
+
sampleMorphShapePaintBinding(data, data.paintBindings[i], progress);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
function appendMorphShapeGradientPaint(shape, commandKey, gradientType, start, end, spreadMethod, interpolationMethod) {
|
|
56
|
+
if (getMorphShapeGradientEndpointIssue(start, end) !== 0)
|
|
57
|
+
return false;
|
|
58
|
+
const commandIndex = shape.data.commands.length;
|
|
59
|
+
const startSource = start.matrix ?? null;
|
|
60
|
+
const endSource = end.matrix ?? null;
|
|
61
|
+
const hasMatrix = startSource !== null || endSource !== null;
|
|
62
|
+
const startMatrix = hasMatrix ? cloneMatrix(startSource ?? identityMatrix) : null;
|
|
63
|
+
const endMatrix = hasMatrix ? cloneMatrix(endSource ?? identityMatrix) : null;
|
|
64
|
+
const currentMatrix = createSampledMatrix(startMatrix, endMatrix);
|
|
65
|
+
const colors = [...start.colors];
|
|
66
|
+
const alphas = [...start.alphas];
|
|
67
|
+
const ratios = [...start.ratios];
|
|
68
|
+
if (commandKey === 'beginGradientFill') {
|
|
69
|
+
appendShapeBeginGradientFill(shape, gradientType, colors, alphas, ratios, currentMatrix, spreadMethod, interpolationMethod, start.focalPointRatio ?? 0);
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
appendShapeLineGradientStyle(shape, gradientType, colors, alphas, ratios, currentMatrix, spreadMethod, interpolationMethod, start.focalPointRatio ?? 0);
|
|
73
|
+
}
|
|
74
|
+
const binding = {
|
|
75
|
+
commandIndex,
|
|
76
|
+
commandKey,
|
|
77
|
+
endAlphas: [...end.alphas],
|
|
78
|
+
endColors: [...end.colors],
|
|
79
|
+
endFocalPointRatio: end.focalPointRatio ?? 0,
|
|
80
|
+
endMatrix,
|
|
81
|
+
endRatios: [...end.ratios],
|
|
82
|
+
kind: 'gradient',
|
|
83
|
+
startAlphas: [...start.alphas],
|
|
84
|
+
startColors: [...start.colors],
|
|
85
|
+
startFocalPointRatio: start.focalPointRatio ?? 0,
|
|
86
|
+
startMatrix,
|
|
87
|
+
startRatios: [...start.ratios],
|
|
88
|
+
};
|
|
89
|
+
shape.data.paintBindings.push(binding);
|
|
90
|
+
sampleMorphShapePaintBinding(shape.data, binding, shape.data.progress);
|
|
91
|
+
return true;
|
|
92
|
+
}
|
|
93
|
+
function appendMorphShapeTexturePaint(shape, commandKey, texture, startSource, endSource) {
|
|
94
|
+
if (startSource === null && endSource === null) {
|
|
95
|
+
if (commandKey === 'beginTextureFill')
|
|
96
|
+
appendShapeBeginTextureFill(shape, texture);
|
|
97
|
+
else
|
|
98
|
+
appendShapeLineTextureStyle(shape, texture);
|
|
99
|
+
return;
|
|
100
|
+
}
|
|
101
|
+
const commandIndex = shape.data.commands.length;
|
|
102
|
+
const startMatrix = cloneMatrix(startSource ?? identityMatrix);
|
|
103
|
+
const endMatrix = cloneMatrix(endSource ?? identityMatrix);
|
|
104
|
+
const currentMatrix = createSampledMatrix(startMatrix, endMatrix);
|
|
105
|
+
if (commandKey === 'beginTextureFill')
|
|
106
|
+
appendShapeBeginTextureFill(shape, texture, currentMatrix);
|
|
107
|
+
else
|
|
108
|
+
appendShapeLineTextureStyle(shape, texture, currentMatrix);
|
|
109
|
+
const binding = { commandIndex, commandKey, endMatrix, kind: 'texture', startMatrix };
|
|
110
|
+
shape.data.paintBindings.push(binding);
|
|
111
|
+
sampleMorphShapePaintBinding(shape.data, binding, shape.data.progress);
|
|
112
|
+
}
|
|
113
|
+
function sampleMorphShapePaintBinding(data, binding, progress) {
|
|
114
|
+
const commands = data.commands;
|
|
115
|
+
const i = binding.commandIndex;
|
|
116
|
+
if (binding.kind === 'color') {
|
|
117
|
+
if (commands[i] !== 'beginFill')
|
|
118
|
+
return;
|
|
119
|
+
commands[i + 2] = interpolateRgb(binding.startColor, binding.endColor, progress);
|
|
120
|
+
commands[i + 3] = interpolateNumber(binding.startAlpha, binding.endAlpha, progress);
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
if (binding.kind === 'line') {
|
|
124
|
+
if (commands[i] !== 'lineStyle')
|
|
125
|
+
return;
|
|
126
|
+
commands[i + 2] = interpolateNumber(binding.startThickness, binding.endThickness, progress);
|
|
127
|
+
commands[i + 3] = interpolateRgb(binding.startColor, binding.endColor, progress);
|
|
128
|
+
commands[i + 4] = interpolateNumber(binding.startAlpha, binding.endAlpha, progress);
|
|
129
|
+
return;
|
|
130
|
+
}
|
|
131
|
+
if (commands[i] !== binding.commandKey)
|
|
132
|
+
return;
|
|
133
|
+
if (binding.kind === 'texture') {
|
|
134
|
+
sampleMatrix(commands[i + 3], binding.startMatrix, binding.endMatrix, progress);
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
const colors = commands[i + 3];
|
|
138
|
+
const alphas = commands[i + 4];
|
|
139
|
+
const ratios = commands[i + 5];
|
|
140
|
+
for (let n = 0; n < binding.startColors.length; n++) {
|
|
141
|
+
colors[n] = interpolateRgb(binding.startColors[n], binding.endColors[n], progress);
|
|
142
|
+
alphas[n] = interpolateNumber(binding.startAlphas[n], binding.endAlphas[n], progress);
|
|
143
|
+
ratios[n] = interpolateNumber(binding.startRatios[n], binding.endRatios[n], progress);
|
|
144
|
+
}
|
|
145
|
+
const matrix = commands[i + 6];
|
|
146
|
+
if (matrix !== null && binding.startMatrix !== null && binding.endMatrix !== null) {
|
|
147
|
+
sampleMatrix(matrix, binding.startMatrix, binding.endMatrix, progress);
|
|
148
|
+
}
|
|
149
|
+
commands[i + 9] = interpolateNumber(binding.startFocalPointRatio, binding.endFocalPointRatio, progress);
|
|
150
|
+
}
|
|
151
|
+
function createSampledMatrix(start, end) {
|
|
152
|
+
if (start === null && end === null)
|
|
153
|
+
return null;
|
|
154
|
+
return cloneMatrix(start ?? identityMatrix);
|
|
155
|
+
}
|
|
156
|
+
function sampleMatrix(out, start, end, progress) {
|
|
157
|
+
out.a = interpolateNumber(start.a, end.a, progress);
|
|
158
|
+
out.b = interpolateNumber(start.b, end.b, progress);
|
|
159
|
+
out.c = interpolateNumber(start.c, end.c, progress);
|
|
160
|
+
out.d = interpolateNumber(start.d, end.d, progress);
|
|
161
|
+
out.tx = interpolateNumber(start.tx, end.tx, progress);
|
|
162
|
+
out.ty = interpolateNumber(start.ty, end.ty, progress);
|
|
163
|
+
}
|
|
164
|
+
function interpolateNumber(start, end, progress) {
|
|
165
|
+
if (progress === 0)
|
|
166
|
+
return start;
|
|
167
|
+
if (progress === 1)
|
|
168
|
+
return end;
|
|
169
|
+
return start + (end - start) * progress;
|
|
170
|
+
}
|
|
171
|
+
// Shape colors are packed 0xRRGGBB. Morph them component-wise like existing color tweens and legacy
|
|
172
|
+
// vector formats; clamping each packed channel keeps deliberate progress overshoot representable safely.
|
|
173
|
+
function interpolateRgb(start, end, progress) {
|
|
174
|
+
const r = interpolateByte((start >>> 16) & 0xff, (end >>> 16) & 0xff, progress);
|
|
175
|
+
const g = interpolateByte((start >>> 8) & 0xff, (end >>> 8) & 0xff, progress);
|
|
176
|
+
const b = interpolateByte(start & 0xff, end & 0xff, progress);
|
|
177
|
+
return r * 0x10000 + g * 0x100 + b;
|
|
178
|
+
}
|
|
179
|
+
function interpolateByte(start, end, progress) {
|
|
180
|
+
return Math.max(0, Math.min(0xff, Math.round(interpolateNumber(start, end, progress))));
|
|
181
|
+
}
|
|
182
|
+
const identityMatrix = createMatrix();
|
|
183
|
+
//# sourceMappingURL=morphShapePaint.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"morphShapePaint.js","sourceRoot":"","sources":["../src/morphShapePaint.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scale9ShapeCommands.d.ts","sourceRoot":"","sources":["../src/scale9ShapeCommands.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAQhF,wBAAgB,sBAAsB,CACpC,GAAG,EAAE,iBAAiB,EAAE,EACxB,MAAM,EAAE,SAAS,iBAAiB,EAAE,EACpC,MAAM,EAAE,YAAY,GACnB,IAAI,CAsEN"}
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
// Rewrites a shape's command stream through a nine-slice mapper, so the corners of a scaled shape keep
|
|
2
|
+
// their size while the edges and centre stretch. This is pure command geometry — no renderer, no
|
|
3
|
+
// context — which is why it lives beside the commands rather than in the backend that happens to
|
|
4
|
+
// rasterize the result: every backend that supports nine-slice needs the same rewrite.
|
|
5
|
+
//
|
|
6
|
+
// `out` may be `source`, in which case the rewrite is in place.
|
|
7
|
+
export function mapScale9ShapeCommands(out, source, mapper) {
|
|
8
|
+
if (out !== source) {
|
|
9
|
+
out.length = source.length;
|
|
10
|
+
for (let k = 0; k < source.length; k++)
|
|
11
|
+
out[k] = source[k];
|
|
12
|
+
}
|
|
13
|
+
let i = 0;
|
|
14
|
+
while (i < out.length) {
|
|
15
|
+
const key = out[i];
|
|
16
|
+
const argCount = out[i + 1];
|
|
17
|
+
switch (key) {
|
|
18
|
+
case 'moveTo':
|
|
19
|
+
case 'lineTo':
|
|
20
|
+
out[i + 2] = mapper.mapX(out[i + 2]);
|
|
21
|
+
out[i + 3] = mapper.mapY(out[i + 3]);
|
|
22
|
+
break;
|
|
23
|
+
case 'curveTo':
|
|
24
|
+
out[i + 2] = mapper.mapX(out[i + 2]);
|
|
25
|
+
out[i + 3] = mapper.mapY(out[i + 3]);
|
|
26
|
+
out[i + 4] = mapper.mapX(out[i + 4]);
|
|
27
|
+
out[i + 5] = mapper.mapY(out[i + 5]);
|
|
28
|
+
break;
|
|
29
|
+
case 'cubicCurveTo':
|
|
30
|
+
out[i + 2] = mapper.mapX(out[i + 2]);
|
|
31
|
+
out[i + 3] = mapper.mapY(out[i + 3]);
|
|
32
|
+
out[i + 4] = mapper.mapX(out[i + 4]);
|
|
33
|
+
out[i + 5] = mapper.mapY(out[i + 5]);
|
|
34
|
+
out[i + 6] = mapper.mapX(out[i + 6]);
|
|
35
|
+
out[i + 7] = mapper.mapY(out[i + 7]);
|
|
36
|
+
break;
|
|
37
|
+
case 'drawRectangle':
|
|
38
|
+
case 'drawEllipse': {
|
|
39
|
+
const x = out[i + 2];
|
|
40
|
+
const y = out[i + 3];
|
|
41
|
+
const w = out[i + 4];
|
|
42
|
+
const h = out[i + 5];
|
|
43
|
+
const mx = mapper.mapX(x);
|
|
44
|
+
const my = mapper.mapY(y);
|
|
45
|
+
out[i + 2] = mx;
|
|
46
|
+
out[i + 3] = my;
|
|
47
|
+
out[i + 4] = mapper.mapX(x + w) - mx;
|
|
48
|
+
out[i + 5] = mapper.mapY(y + h) - my;
|
|
49
|
+
break;
|
|
50
|
+
}
|
|
51
|
+
case 'drawRoundRectangle': {
|
|
52
|
+
const x = out[i + 2];
|
|
53
|
+
const y = out[i + 3];
|
|
54
|
+
const w = out[i + 4];
|
|
55
|
+
const h = out[i + 5];
|
|
56
|
+
const mx = mapper.mapX(x);
|
|
57
|
+
const my = mapper.mapY(y);
|
|
58
|
+
out[i + 2] = mx;
|
|
59
|
+
out[i + 3] = my;
|
|
60
|
+
out[i + 4] = mapper.mapX(x + w) - mx;
|
|
61
|
+
out[i + 5] = mapper.mapY(y + h) - my;
|
|
62
|
+
break;
|
|
63
|
+
}
|
|
64
|
+
case 'drawCircle':
|
|
65
|
+
out[i + 2] = mapper.mapX(out[i + 2]);
|
|
66
|
+
out[i + 3] = mapper.mapY(out[i + 3]);
|
|
67
|
+
break;
|
|
68
|
+
case 'drawPath':
|
|
69
|
+
remapPathData(_remappedPathData, out[i + 3], out[i + 2], mapper);
|
|
70
|
+
out[i + 3] = _remappedPathData;
|
|
71
|
+
break;
|
|
72
|
+
}
|
|
73
|
+
i += argCount + 2;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
function remapPathData(out, source, cmds, mapper) {
|
|
77
|
+
if (out !== source) {
|
|
78
|
+
out.length = source.length;
|
|
79
|
+
for (let k = 0; k < source.length; k++)
|
|
80
|
+
out[k] = source[k];
|
|
81
|
+
}
|
|
82
|
+
let di = 0;
|
|
83
|
+
for (const pc of cmds) {
|
|
84
|
+
switch (pc) {
|
|
85
|
+
case 1: // MOVE_TO [x, y]
|
|
86
|
+
case 2: // LINE_TO [x, y]
|
|
87
|
+
out[di] = mapper.mapX(out[di]);
|
|
88
|
+
out[di + 1] = mapper.mapY(out[di + 1]);
|
|
89
|
+
di += 2;
|
|
90
|
+
break;
|
|
91
|
+
case 3: // CURVE_TO [cx, cy, ax, ay]
|
|
92
|
+
out[di] = mapper.mapX(out[di]);
|
|
93
|
+
out[di + 1] = mapper.mapY(out[di + 1]);
|
|
94
|
+
out[di + 2] = mapper.mapX(out[di + 2]);
|
|
95
|
+
out[di + 3] = mapper.mapY(out[di + 3]);
|
|
96
|
+
di += 4;
|
|
97
|
+
break;
|
|
98
|
+
case 4: // WIDE_MOVE_TO [?, ?, x, y]
|
|
99
|
+
case 5: // WIDE_LINE_TO [?, ?, x, y]
|
|
100
|
+
out[di + 2] = mapper.mapX(out[di + 2]);
|
|
101
|
+
out[di + 3] = mapper.mapY(out[di + 3]);
|
|
102
|
+
di += 4;
|
|
103
|
+
break;
|
|
104
|
+
case 6: // CUBIC_CURVE_TO [cx1, cy1, cx2, cy2, ax, ay]
|
|
105
|
+
out[di] = mapper.mapX(out[di]);
|
|
106
|
+
out[di + 1] = mapper.mapY(out[di + 1]);
|
|
107
|
+
out[di + 2] = mapper.mapX(out[di + 2]);
|
|
108
|
+
out[di + 3] = mapper.mapY(out[di + 3]);
|
|
109
|
+
out[di + 4] = mapper.mapX(out[di + 4]);
|
|
110
|
+
out[di + 5] = mapper.mapY(out[di + 5]);
|
|
111
|
+
di += 6;
|
|
112
|
+
break;
|
|
113
|
+
default:
|
|
114
|
+
break;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
const _remappedPathData = [];
|
|
119
|
+
//# sourceMappingURL=scale9ShapeCommands.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scale9ShapeCommands.js","sourceRoot":"","sources":["../src/scale9ShapeCommands.ts"],"names":[],"mappings":"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"}
|
package/dist/shape.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shape.d.ts","sourceRoot":"","sources":["../src/shape.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"shape.d.ts","sourceRoot":"","sources":["../src/shape.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,aAAa,EAEb,WAAW,EACX,SAAS,EACT,KAAK,EACL,SAAS,EACT,YAAY,EACb,MAAM,0BAA0B,CAAC;AAGlC,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAIrD;AAED,wBAAgB,gCAAgC,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,aAAa,CAAC,GAAG,IAAI,CAoQtG;AAED,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,KAAK,EAAE,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,GAAG,IAAI,CAa3E;AAED,wBAAgB,WAAW,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,GAAG,KAAK,CAErE;AAED,wBAAgB,eAAe,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,GAAG,SAAS,CAI9E;AAED,wBAAgB,kBAAkB,IAAI,YAAY,CAEjD;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,GAAG,IAAI,CAE5E;AAGD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,GAAG,MAAM,CAUpE;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,YAAY,CAAC,CAE/E;AAGD,wBAAgB,YAAY,CAAC,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,GAAG,OAAO,CAE7D"}
|
package/dist/shape.js
CHANGED
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
import { invalidateContent } from '@flighthq/node/contract';
|
|
2
2
|
import { createNode2D, createNode2DRuntime, getNode2DRuntime } from '@flighthq/scene2d/contract';
|
|
3
|
-
import { ShapeKind } from '@flighthq/types/contract';
|
|
3
|
+
import { MorphShapeKind, ShapeKind } from '@flighthq/types/contract';
|
|
4
4
|
export function clearShapeCommands(shape) {
|
|
5
5
|
shape.data.commands.length = 0;
|
|
6
|
+
if (shape.kind === MorphShapeKind)
|
|
7
|
+
shape.data.paintBindings.length = 0;
|
|
6
8
|
invalidateContent(shape);
|
|
7
9
|
}
|
|
8
10
|
export function computeShapeLocalBoundsRectangle(out, source) {
|
|
@@ -250,8 +252,19 @@ export function computeShapeLocalBoundsRectangle(out, source) {
|
|
|
250
252
|
}
|
|
251
253
|
}
|
|
252
254
|
export function copyShapeCommands(out, source) {
|
|
253
|
-
out.data.commands
|
|
254
|
-
|
|
255
|
+
const commands = out.data.commands;
|
|
256
|
+
const sourceCommands = source.data.commands;
|
|
257
|
+
// Copied element by element rather than by spreading into push: a spread passes one argument per
|
|
258
|
+
// command, and a command stream is as long as its authored artwork, so imported vector art overflows
|
|
259
|
+
// the engine's argument limit. Aliased `out` is a no-op copy, not a self-clear followed by a read of
|
|
260
|
+
// what was just cleared.
|
|
261
|
+
if (commands !== sourceCommands) {
|
|
262
|
+
commands.length = sourceCommands.length;
|
|
263
|
+
for (let i = 0; i < sourceCommands.length; i++)
|
|
264
|
+
commands[i] = sourceCommands[i];
|
|
265
|
+
}
|
|
266
|
+
if (out.kind === MorphShapeKind)
|
|
267
|
+
out.data.paintBindings.length = 0;
|
|
255
268
|
invalidateContent(out);
|
|
256
269
|
}
|
|
257
270
|
export function createShape(obj) {
|