@flighthq/displayobject 0.1.0 → 0.2.1-next.410.a23f189
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/displayObject.d.ts +5 -1
- package/dist/displayObject.d.ts.map +1 -1
- package/dist/displayObject.js +58 -1
- package/dist/displayObject.js.map +1 -1
- package/dist/stage.d.ts +2 -4
- package/dist/stage.d.ts.map +1 -1
- package/dist/stage.js +39 -30
- package/dist/stage.js.map +1 -1
- package/package.json +12 -5
- package/src/bitmap.test.ts +1 -0
- package/src/displayObject.test.ts +74 -0
- package/src/stage.test.ts +22 -68
- package/src/video.test.ts +1 -0
- package/dist/internal.d.ts +0 -7
- package/dist/internal.d.ts.map +0 -1
- package/dist/internal.js +0 -2
- package/dist/internal.js.map +0 -1
package/dist/displayObject.d.ts
CHANGED
|
@@ -1,8 +1,12 @@
|
|
|
1
|
-
import type { ClipRegion, DisplayObject, DisplayObjectDataFactory, DisplayObjectRuntime, DisplayObjectRuntimeFactory, Kind, MethodsOf, NodeAny, PartialNode } from '@flighthq/types';
|
|
1
|
+
import type { Adjustment, ClipRegion, ColorTransform, DisplayObject, DisplayObjectDataFactory, DisplayObjectRuntime, DisplayObjectRuntimeFactory, Kind, MethodsOf, NodeAny, PartialNode } from '@flighthq/types';
|
|
2
|
+
export declare function addDisplayObjectColorAdjustment(source: DisplayObject, adjustment: Adjustment): void;
|
|
2
3
|
export declare function createDisplayObject(obj?: Readonly<PartialNode<DisplayObject>>): DisplayObject;
|
|
3
4
|
export declare function createDisplayObjectGeneric<R extends DisplayObjectRuntime>(kind: Kind, obj?: Readonly<PartialNode<DisplayObject>>, createData?: DisplayObjectDataFactory, createDisplayObjectRuntimeFactory?: DisplayObjectRuntimeFactory<R>): DisplayObject;
|
|
4
5
|
export declare function createDisplayObjectRuntime(methods?: Readonly<Partial<MethodsOf<DisplayObjectRuntime>>>): DisplayObjectRuntime;
|
|
6
|
+
export declare function getDisplayObjectColorAdjustments(source: Readonly<DisplayObject>): readonly Adjustment[] | null;
|
|
5
7
|
export declare function getDisplayObjectRuntime(source: Readonly<DisplayObject>): Readonly<DisplayObjectRuntime>;
|
|
6
8
|
export declare function isDisplayObject(node: NodeAny): node is DisplayObject;
|
|
7
9
|
export declare function setDisplayObjectClip(source: DisplayObject, value: ClipRegion | null): void;
|
|
10
|
+
export declare function setDisplayObjectColorAdjustments(source: DisplayObject, value: readonly Adjustment[] | null): void;
|
|
11
|
+
export declare function setDisplayObjectColorTransform(source: DisplayObject, colorTransform: Readonly<ColorTransform> | null): void;
|
|
8
12
|
//# sourceMappingURL=displayObject.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"displayObject.d.ts","sourceRoot":"","sources":["../src/displayObject.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"displayObject.d.ts","sourceRoot":"","sources":["../src/displayObject.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EACV,UAAU,EACV,UAAU,EACV,cAAc,EACd,aAAa,EACb,wBAAwB,EACxB,oBAAoB,EACpB,2BAA2B,EAC3B,IAAI,EACJ,SAAS,EACT,OAAO,EAEP,WAAW,EACZ,MAAM,iBAAiB,CAAC;AAMzB,wBAAgB,+BAA+B,CAAC,MAAM,EAAE,aAAa,EAAE,UAAU,EAAE,UAAU,GAAG,IAAI,CAMnG;AAED,wBAAgB,mBAAmB,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,GAAG,aAAa,CAE7F;AAED,wBAAgB,0BAA0B,CAAC,CAAC,SAAS,oBAAoB,EACvE,IAAI,EAAE,IAAI,EACV,GAAG,CAAC,EAAE,QAAQ,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC,EAC1C,UAAU,CAAC,EAAE,wBAAwB,EACrC,iCAAiC,CAAC,EAAE,2BAA2B,CAAC,CAAC,CAAC,GACjE,aAAa,CAcf;AAED,wBAAgB,0BAA0B,CACxC,OAAO,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC,CAAC,GAC3D,oBAAoB,CAOtB;AAID,wBAAgB,gCAAgC,CAAC,MAAM,EAAE,QAAQ,CAAC,aAAa,CAAC,GAAG,SAAS,UAAU,EAAE,GAAG,IAAI,CAE9G;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,QAAQ,CAAC,aAAa,CAAC,GAAG,QAAQ,CAAC,oBAAoB,CAAC,CAEvG;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI,IAAI,aAAa,CAEpE;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI,GAAG,IAAI,CAG1F;AAMD,wBAAgB,gCAAgC,CAAC,MAAM,EAAE,aAAa,EAAE,KAAK,EAAE,SAAS,UAAU,EAAE,GAAG,IAAI,GAAG,IAAI,CAKjH;AAKD,wBAAgB,8BAA8B,CAC5C,MAAM,EAAE,aAAa,EACrB,cAAc,EAAE,QAAQ,CAAC,cAAc,CAAC,GAAG,IAAI,GAC9C,IAAI,CAKN"}
|
package/dist/displayObject.js
CHANGED
|
@@ -1,5 +1,17 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { COLOR_ADJUSTMENT_CHANNEL_MIXING, COLOR_ADJUSTMENT_NONE, createColorTransformAdjustment, resolveColorAdjustmentsColorTransform, } from '@flighthq/adjustments';
|
|
2
|
+
import { createColorTransform } from '@flighthq/materials';
|
|
3
|
+
import { createNode, createNodeRuntime, getNodeRuntime, initAppearanceTrait, initBlendModeTrait, initBoundsRectangleRuntimeTrait, initBoundsRectangleTrait, initClipTrait, initMaterialTrait, initTransform2DRuntimeTrait, initTransform2DTrait, invalidateNodeAppearance, } from '@flighthq/node';
|
|
2
4
|
import { DisplayObjectKind, DisplayObjectTraitsKey } from '@flighthq/types';
|
|
5
|
+
// Appends one pointwise color adjustment to this object's stack (creating the stack if absent), re-fuses
|
|
6
|
+
// the resolved cache, and invalidates appearance so the render walk hands the fold the new value.
|
|
7
|
+
// Allocates a new array — the stack is a plain `readonly Adjustment[]`, never mutated in place.
|
|
8
|
+
export function addDisplayObjectColorAdjustment(source, adjustment) {
|
|
9
|
+
const runtime = getNodeRuntime(source);
|
|
10
|
+
const current = runtime.colorAdjustments;
|
|
11
|
+
runtime.colorAdjustments = current === null ? [adjustment] : [...current, adjustment];
|
|
12
|
+
resolveDisplayObjectColorAdjustments(runtime);
|
|
13
|
+
invalidateNodeAppearance(source);
|
|
14
|
+
}
|
|
3
15
|
export function createDisplayObject(obj) {
|
|
4
16
|
return createDisplayObjectGeneric(DisplayObjectKind, obj);
|
|
5
17
|
}
|
|
@@ -8,6 +20,7 @@ export function createDisplayObjectGeneric(kind, obj, createData, createDisplayO
|
|
|
8
20
|
initTransform2DTrait(out, obj);
|
|
9
21
|
initBoundsRectangleTrait(out, obj);
|
|
10
22
|
initAppearanceTrait(out, obj);
|
|
23
|
+
initBlendModeTrait(out, obj);
|
|
11
24
|
initMaterialTrait(out, obj);
|
|
12
25
|
initClipTrait(out, obj);
|
|
13
26
|
return out;
|
|
@@ -15,10 +28,16 @@ export function createDisplayObjectGeneric(kind, obj, createData, createDisplayO
|
|
|
15
28
|
export function createDisplayObjectRuntime(methods) {
|
|
16
29
|
const out = createNodeRuntime(methods);
|
|
17
30
|
out.traits = DisplayObjectTraitsKey;
|
|
31
|
+
out.stage = null;
|
|
18
32
|
initTransform2DRuntimeTrait(out, methods);
|
|
19
33
|
initBoundsRectangleRuntimeTrait(out, methods);
|
|
20
34
|
return out;
|
|
21
35
|
}
|
|
36
|
+
// Returns this object's pointwise color-adjustment stack (the source of truth on the node runtime), or
|
|
37
|
+
// null when it carries none.
|
|
38
|
+
export function getDisplayObjectColorAdjustments(source) {
|
|
39
|
+
return getNodeRuntime(source).colorAdjustments;
|
|
40
|
+
}
|
|
22
41
|
export function getDisplayObjectRuntime(source) {
|
|
23
42
|
return getNodeRuntime(source);
|
|
24
43
|
}
|
|
@@ -29,4 +48,42 @@ export function setDisplayObjectClip(source, value) {
|
|
|
29
48
|
source.clip = value;
|
|
30
49
|
invalidateNodeAppearance(source);
|
|
31
50
|
}
|
|
51
|
+
// Sets (or clears with null) this object's pointwise color-adjustment stack — the generic replacement for
|
|
52
|
+
// the removed color-transform trait. A color transform is one member: `createColorTransformAdjustment`.
|
|
53
|
+
// Re-fuses the resolved cache once here (not per frame) and invalidates appearance so the render walk
|
|
54
|
+
// hands the fold the affine ColorTransform the stack resolves to. Null is the untinted default.
|
|
55
|
+
export function setDisplayObjectColorAdjustments(source, value) {
|
|
56
|
+
const runtime = getNodeRuntime(source);
|
|
57
|
+
runtime.colorAdjustments = value;
|
|
58
|
+
resolveDisplayObjectColorAdjustments(runtime);
|
|
59
|
+
invalidateNodeAppearance(source);
|
|
60
|
+
}
|
|
61
|
+
// Convenience for the common single-tint path (the color-transform an agent looks for): sets this object's
|
|
62
|
+
// adjustment stack to one `ColorTransformAdjustment`, or clears it with null. Thin wrapper over
|
|
63
|
+
// `setDisplayObjectColorAdjustments` — a color transform is just one adjustment in the generic stack.
|
|
64
|
+
export function setDisplayObjectColorTransform(source, colorTransform) {
|
|
65
|
+
setDisplayObjectColorAdjustments(source, colorTransform === null ? null : [createColorTransformAdjustment(colorTransform)]);
|
|
66
|
+
}
|
|
67
|
+
// Fuses the runtime's color-adjustment stack once into its cached affine `resolvedColorTransform`, setting
|
|
68
|
+
// `colorAdjustmentsChannelMixing` when the fused stack has off-diagonal channel-mixing terms the 8-float
|
|
69
|
+
// fold cannot represent yet (the render walk reports that through the shakeable guard). Called by the
|
|
70
|
+
// accessors on change — the render walk only reads the cache, so no fuse math weighs on the base render
|
|
71
|
+
// path. The cached ColorTransform is reused in place across re-fuses to avoid per-set allocation churn.
|
|
72
|
+
function resolveDisplayObjectColorAdjustments(runtime) {
|
|
73
|
+
const adjustments = runtime.colorAdjustments;
|
|
74
|
+
if (adjustments === null || adjustments.length === 0) {
|
|
75
|
+
runtime.resolvedColorTransform = null;
|
|
76
|
+
runtime.colorAdjustmentsChannelMixing = false;
|
|
77
|
+
return;
|
|
78
|
+
}
|
|
79
|
+
const out = runtime.resolvedColorTransform ?? createColorTransform();
|
|
80
|
+
const status = resolveColorAdjustmentsColorTransform(adjustments, out);
|
|
81
|
+
if (status === COLOR_ADJUSTMENT_NONE) {
|
|
82
|
+
runtime.resolvedColorTransform = null;
|
|
83
|
+
runtime.colorAdjustmentsChannelMixing = false;
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
runtime.resolvedColorTransform = out;
|
|
87
|
+
runtime.colorAdjustmentsChannelMixing = status === COLOR_ADJUSTMENT_CHANNEL_MIXING;
|
|
88
|
+
}
|
|
32
89
|
//# sourceMappingURL=displayObject.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"displayObject.js","sourceRoot":"","sources":["../src/displayObject.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,iBAAiB,EACjB,cAAc,EACd,mBAAmB,EACnB,+BAA+B,EAC/B,wBAAwB,EACxB,aAAa,EACb,iBAAiB,EACjB,2BAA2B,EAC3B,oBAAoB,EACpB,wBAAwB,GACzB,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"displayObject.js","sourceRoot":"","sources":["../src/displayObject.ts"],"names":[],"mappings":"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"}
|
package/dist/stage.d.ts
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
|
-
import type { DisplayObject,
|
|
2
|
-
export declare function
|
|
3
|
-
export declare function createStage(obj?: Readonly<PartialNode<Stage>>): Stage;
|
|
4
|
-
export declare function createStageData(data?: Readonly<Partial<StageData>>): StageData;
|
|
1
|
+
import type { DisplayObject, Stage, StageRuntime, StageSignals } from '@flighthq/types';
|
|
2
|
+
export declare function createStage(obj?: Readonly<Partial<Pick<Stage, 'align' | 'color' | 'scaleMode' | 'stageHeight' | 'stageWidth'>>>): Stage;
|
|
5
3
|
export declare function createStageRuntime(): StageRuntime;
|
|
6
4
|
export declare function createStageSignals(): StageSignals;
|
|
7
5
|
export declare function enableStageSignals(source: Stage): StageSignals;
|
package/dist/stage.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stage.d.ts","sourceRoot":"","sources":["../src/stage.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,aAAa,
|
|
1
|
+
{"version":3,"file":"stage.d.ts","sourceRoot":"","sources":["../src/stage.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EACV,aAAa,EAGb,KAAK,EACL,YAAY,EACZ,YAAY,EACb,MAAM,iBAAiB,CAAC;AAUzB,wBAAgB,WAAW,CACzB,GAAG,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,GAAG,WAAW,GAAG,aAAa,GAAG,YAAY,CAAC,CAAC,CAAC,GACnG,KAAK,CAQP;AAED,wBAAgB,kBAAkB,IAAI,YAAY,CAKjD;AAED,wBAAgB,kBAAkB,IAAI,YAAY,CAMjD;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,KAAK,GAAG,YAAY,CAG9D;AAID,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,QAAQ,CAAC,aAAa,CAAC,GAAG,KAAK,GAAG,IAAI,CAGnF;AAID,wBAAgB,eAAe,CAAC,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,GAAG,QAAQ,CAAC,YAAY,CAAC,CAE/E;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,QAAQ,CAAC,KAAK,CAAC,GAAG,YAAY,GAAG,IAAI,CAG5E;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAM/E"}
|
package/dist/stage.js
CHANGED
|
@@ -1,27 +1,27 @@
|
|
|
1
|
-
import { getNodeRoot,
|
|
1
|
+
import { createViewport, getNodeRoot, getNodeRuntime } from '@flighthq/node';
|
|
2
2
|
import { createSignal, emitSignal } from '@flighthq/signals';
|
|
3
|
-
import { EntityRuntimeKey
|
|
4
|
-
import {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
3
|
+
import { EntityRuntimeKey } from '@flighthq/types';
|
|
4
|
+
import { createDisplayObject } from './displayObject';
|
|
5
|
+
// Allocates a Stage: a presentation-context Entity that owns a display-object `root` (allocated here), not a
|
|
6
|
+
// node in the tree. Composes createViewport for the shared root/align/scaleMode base, then layers on the
|
|
7
|
+
// stage-only view dimensions and background color. The entity runtime stays unbound (createViewport →
|
|
8
|
+
// createEntity); the root's runtime carries a back-pointer so getDisplayObjectStage resolves membership by a
|
|
9
|
+
// lazy walk to the root.
|
|
10
10
|
export function createStage(obj) {
|
|
11
|
-
|
|
11
|
+
const root = createDisplayObject();
|
|
12
|
+
const stage = createViewport({ align: obj?.align, root, scaleMode: obj?.scaleMode });
|
|
13
|
+
stage.color = obj?.color ?? null;
|
|
14
|
+
stage.stageHeight = obj?.stageHeight ?? 550;
|
|
15
|
+
stage.stageWidth = obj?.stageWidth ?? 400;
|
|
16
|
+
getNodeRuntime(root).stage = stage;
|
|
17
|
+
return stage;
|
|
12
18
|
}
|
|
13
|
-
export function
|
|
19
|
+
export function createStageRuntime() {
|
|
14
20
|
return {
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
stageWidth: data?.stageWidth ?? 400,
|
|
21
|
+
binding: null,
|
|
22
|
+
stageSignals: null,
|
|
18
23
|
};
|
|
19
24
|
}
|
|
20
|
-
export function createStageRuntime() {
|
|
21
|
-
const out = createDisplayObjectRuntime(defaultMethods);
|
|
22
|
-
out.stageSignals = null;
|
|
23
|
-
return out;
|
|
24
|
-
}
|
|
25
25
|
export function createStageSignals() {
|
|
26
26
|
return {
|
|
27
27
|
onFullscreenChanged: createSignal(),
|
|
@@ -30,30 +30,39 @@ export function createStageSignals() {
|
|
|
30
30
|
};
|
|
31
31
|
}
|
|
32
32
|
export function enableStageSignals(source) {
|
|
33
|
-
const runtime = source
|
|
33
|
+
const runtime = ensureStageRuntime(source);
|
|
34
34
|
return (runtime.stageSignals ??= createStageSignals());
|
|
35
35
|
}
|
|
36
|
+
// Resolves the Stage a display object belongs to, or null when its root is not owned by a stage. Walks to the
|
|
37
|
+
// root (a cheap parent walk) and reads the stage back-pointer the root runtime carries.
|
|
36
38
|
export function getDisplayObjectStage(source) {
|
|
37
39
|
const root = getNodeRoot(source);
|
|
38
|
-
return root.
|
|
40
|
+
return getNodeRuntime(root).stage;
|
|
39
41
|
}
|
|
42
|
+
// The stage's runtime, allocated on first access (the entity is created unbound). Callers that only read
|
|
43
|
+
// enabled signals should use getStageSignals, which does not allocate.
|
|
40
44
|
export function getStageRuntime(source) {
|
|
41
|
-
return
|
|
45
|
+
return ensureStageRuntime(source);
|
|
42
46
|
}
|
|
43
47
|
export function getStageSignals(source) {
|
|
44
|
-
|
|
48
|
+
const runtime = source[EntityRuntimeKey];
|
|
49
|
+
return runtime?.stageSignals ?? null;
|
|
45
50
|
}
|
|
46
51
|
export function setStageSize(source, width, height) {
|
|
47
|
-
if (source.
|
|
52
|
+
if (source.stageWidth === width && source.stageHeight === height)
|
|
48
53
|
return;
|
|
49
|
-
source.
|
|
50
|
-
source.
|
|
51
|
-
invalidateNodeLocalBounds(source);
|
|
54
|
+
source.stageWidth = width;
|
|
55
|
+
source.stageHeight = height;
|
|
52
56
|
const runtime = source[EntityRuntimeKey];
|
|
53
|
-
if (runtime
|
|
57
|
+
if (runtime?.stageSignals)
|
|
54
58
|
emitSignal(runtime.stageSignals.onResize);
|
|
55
59
|
}
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
60
|
+
function ensureStageRuntime(source) {
|
|
61
|
+
const existing = source[EntityRuntimeKey];
|
|
62
|
+
if (existing !== undefined)
|
|
63
|
+
return existing;
|
|
64
|
+
const runtime = createStageRuntime();
|
|
65
|
+
source[EntityRuntimeKey] = runtime;
|
|
66
|
+
return runtime;
|
|
67
|
+
}
|
|
59
68
|
//# sourceMappingURL=stage.js.map
|
package/dist/stage.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stage.js","sourceRoot":"","sources":["../src/stage.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"stage.js","sourceRoot":"","sources":["../src/stage.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@flighthq/displayobject",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.2.1-next.410.a23f189",
|
|
4
|
+
"repository": {
|
|
5
|
+
"type": "git",
|
|
6
|
+
"url": "https://github.com/flighthq/flight.git",
|
|
7
|
+
"directory": "packages/displayobject"
|
|
8
|
+
},
|
|
4
9
|
"type": "module",
|
|
5
10
|
"main": "dist/index.js",
|
|
6
11
|
"types": "dist/index.d.ts",
|
|
@@ -27,10 +32,12 @@
|
|
|
27
32
|
"clean:dist": "tsx ../../scripts/clean-package-dist.ts"
|
|
28
33
|
},
|
|
29
34
|
"dependencies": {
|
|
30
|
-
"@flighthq/
|
|
31
|
-
"@flighthq/
|
|
32
|
-
"@flighthq/
|
|
33
|
-
"@flighthq/
|
|
35
|
+
"@flighthq/adjustments": "0.2.1-next.410.a23f189",
|
|
36
|
+
"@flighthq/geometry": "0.2.1-next.410.a23f189",
|
|
37
|
+
"@flighthq/materials": "0.2.1-next.410.a23f189",
|
|
38
|
+
"@flighthq/node": "0.2.1-next.410.a23f189",
|
|
39
|
+
"@flighthq/signals": "0.2.1-next.410.a23f189",
|
|
40
|
+
"@flighthq/types": "0.2.1-next.410.a23f189"
|
|
34
41
|
},
|
|
35
42
|
"devDependencies": {
|
|
36
43
|
"@flighthq/entity": "*",
|
package/src/bitmap.test.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { getEntityRuntime } from '@flighthq/entity';
|
|
2
2
|
import { createRectangle } from '@flighthq/geometry';
|
|
3
|
+
import { getNodeLocalBoundsRevision, getNodeLocalContentRevision, getNodeLocalTransformRevision } from '@flighthq/node';
|
|
3
4
|
import type { Bitmap, BitmapRuntime, ImageResource, Node } from '@flighthq/types';
|
|
4
5
|
import { BitmapKind } from '@flighthq/types';
|
|
5
6
|
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { getEntityRuntime } from '@flighthq/entity';
|
|
2
|
+
import { createColorTransform } from '@flighthq/materials';
|
|
2
3
|
import type {
|
|
3
4
|
BoundsNode,
|
|
4
5
|
DisplayObject,
|
|
@@ -10,18 +11,47 @@ import type {
|
|
|
10
11
|
import { BlendMode, DisplayObjectKind, DisplayObjectTraitsKey } from '@flighthq/types';
|
|
11
12
|
|
|
12
13
|
import {
|
|
14
|
+
addDisplayObjectColorAdjustment,
|
|
13
15
|
createDisplayObject,
|
|
14
16
|
createDisplayObjectGeneric,
|
|
15
17
|
createDisplayObjectRuntime,
|
|
18
|
+
getDisplayObjectColorAdjustments,
|
|
16
19
|
getDisplayObjectRuntime,
|
|
17
20
|
isDisplayObject,
|
|
18
21
|
setDisplayObjectClip,
|
|
22
|
+
setDisplayObjectColorAdjustments,
|
|
23
|
+
setDisplayObjectColorTransform,
|
|
19
24
|
} from './displayObject';
|
|
20
25
|
|
|
21
26
|
function getRuntime_(obj: DisplayObject): DisplayObjectRuntime {
|
|
22
27
|
return getEntityRuntime(obj) as DisplayObjectRuntime;
|
|
23
28
|
}
|
|
24
29
|
|
|
30
|
+
describe('addDisplayObjectColorAdjustment', () => {
|
|
31
|
+
let obj: DisplayObject;
|
|
32
|
+
beforeEach(() => {
|
|
33
|
+
obj = createDisplayObject();
|
|
34
|
+
});
|
|
35
|
+
|
|
36
|
+
it('appends to a fresh (null) stack and invalidates appearance', () => {
|
|
37
|
+
const idBefore = getRuntime_(obj).appearanceId;
|
|
38
|
+
const adjustment = { kind: 'ColorTransformAdjustment' } as never;
|
|
39
|
+
addDisplayObjectColorAdjustment(obj, adjustment);
|
|
40
|
+
expect(getDisplayObjectColorAdjustments(obj)).toEqual([adjustment]);
|
|
41
|
+
expect(getRuntime_(obj).appearanceId).not.toBe(idBefore);
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
it('appends to an existing stack without mutating the previous array', () => {
|
|
45
|
+
const a = { kind: 'A' } as never;
|
|
46
|
+
const b = { kind: 'B' } as never;
|
|
47
|
+
addDisplayObjectColorAdjustment(obj, a);
|
|
48
|
+
const first = getDisplayObjectColorAdjustments(obj);
|
|
49
|
+
addDisplayObjectColorAdjustment(obj, b);
|
|
50
|
+
expect(getDisplayObjectColorAdjustments(obj)).toEqual([a, b]);
|
|
51
|
+
expect(first).toEqual([a]); // the earlier array was not mutated
|
|
52
|
+
});
|
|
53
|
+
});
|
|
54
|
+
|
|
25
55
|
describe('createDisplayObject', () => {
|
|
26
56
|
let displayObject: DisplayObject;
|
|
27
57
|
|
|
@@ -113,6 +143,12 @@ describe('createDisplayObjectRuntime', () => {
|
|
|
113
143
|
});
|
|
114
144
|
});
|
|
115
145
|
|
|
146
|
+
describe('getDisplayObjectColorAdjustments', () => {
|
|
147
|
+
it('defaults to null on a fresh node', () => {
|
|
148
|
+
expect(getDisplayObjectColorAdjustments(createDisplayObject())).toBeNull();
|
|
149
|
+
});
|
|
150
|
+
});
|
|
151
|
+
|
|
116
152
|
describe('getDisplayObjectRuntime', () => {
|
|
117
153
|
it('returns the runtime for a DisplayObject', () => {
|
|
118
154
|
const obj = createDisplayObject();
|
|
@@ -161,6 +197,44 @@ describe('setDisplayObjectClip', () => {
|
|
|
161
197
|
});
|
|
162
198
|
});
|
|
163
199
|
|
|
200
|
+
describe('setDisplayObjectColorAdjustments', () => {
|
|
201
|
+
let obj: DisplayObject;
|
|
202
|
+
beforeEach(() => {
|
|
203
|
+
obj = createDisplayObject();
|
|
204
|
+
});
|
|
205
|
+
|
|
206
|
+
it('sets the stack and invalidates appearance', () => {
|
|
207
|
+
const idBefore = getRuntime_(obj).appearanceId;
|
|
208
|
+
const stack = [{ kind: 'ColorTransformAdjustment' }] as never;
|
|
209
|
+
setDisplayObjectColorAdjustments(obj, stack);
|
|
210
|
+
expect(getDisplayObjectColorAdjustments(obj)).toBe(stack);
|
|
211
|
+
expect(getRuntime_(obj).appearanceId).not.toBe(idBefore);
|
|
212
|
+
});
|
|
213
|
+
|
|
214
|
+
it('accepts null', () => {
|
|
215
|
+
setDisplayObjectColorAdjustments(obj, [{ kind: 'ColorTransformAdjustment' }] as never);
|
|
216
|
+
setDisplayObjectColorAdjustments(obj, null);
|
|
217
|
+
expect(getDisplayObjectColorAdjustments(obj)).toBeNull();
|
|
218
|
+
});
|
|
219
|
+
});
|
|
220
|
+
|
|
221
|
+
describe('setDisplayObjectColorTransform', () => {
|
|
222
|
+
it('wraps a color transform as one ColorTransformAdjustment on the stack', () => {
|
|
223
|
+
const obj = createDisplayObject();
|
|
224
|
+
setDisplayObjectColorTransform(obj, createColorTransform({ redMultiplier: 0.5 }));
|
|
225
|
+
const stack = getDisplayObjectColorAdjustments(obj);
|
|
226
|
+
expect(stack?.length).toBe(1);
|
|
227
|
+
expect(stack?.[0].kind).toBe('ColorTransformAdjustment');
|
|
228
|
+
});
|
|
229
|
+
|
|
230
|
+
it('clears with null', () => {
|
|
231
|
+
const obj = createDisplayObject();
|
|
232
|
+
setDisplayObjectColorTransform(obj, createColorTransform({ redMultiplier: 0.5 }));
|
|
233
|
+
setDisplayObjectColorTransform(obj, null);
|
|
234
|
+
expect(getDisplayObjectColorAdjustments(obj)).toBeNull();
|
|
235
|
+
});
|
|
236
|
+
});
|
|
237
|
+
|
|
164
238
|
interface DisplayObjectTest extends DisplayObject {}
|
|
165
239
|
|
|
166
240
|
interface DisplayObjectTestData extends DisplayObjectData {
|
package/src/stage.test.ts
CHANGED
|
@@ -1,14 +1,10 @@
|
|
|
1
|
-
import { createRectangle } from '@flighthq/geometry';
|
|
2
1
|
import { addNodeChild } from '@flighthq/node';
|
|
3
2
|
import { connectSignal } from '@flighthq/signals';
|
|
4
|
-
import type {
|
|
5
|
-
import { StageKind } from '@flighthq/types';
|
|
3
|
+
import type { Stage } from '@flighthq/types';
|
|
6
4
|
|
|
7
5
|
import { createDisplayObject } from './displayObject';
|
|
8
6
|
import {
|
|
9
|
-
computeStageLocalBoundsRectangle,
|
|
10
7
|
createStage,
|
|
11
|
-
createStageData,
|
|
12
8
|
createStageRuntime,
|
|
13
9
|
createStageSignals,
|
|
14
10
|
enableStageSignals,
|
|
@@ -18,16 +14,6 @@ import {
|
|
|
18
14
|
setStageSize,
|
|
19
15
|
} from './stage';
|
|
20
16
|
|
|
21
|
-
describe('computeStageLocalBoundsRectangle', () => {
|
|
22
|
-
it('sets out dimensions from stageWidth and stageHeight', () => {
|
|
23
|
-
const stage = createStage({ data: { stageWidth: 800, stageHeight: 600 } });
|
|
24
|
-
const out = createRectangle();
|
|
25
|
-
computeStageLocalBoundsRectangle(out, stage as unknown as Node);
|
|
26
|
-
expect(out.width).toBe(800);
|
|
27
|
-
expect(out.height).toBe(600);
|
|
28
|
-
});
|
|
29
|
-
});
|
|
30
|
-
|
|
31
17
|
describe('createStage', () => {
|
|
32
18
|
let stage: Stage;
|
|
33
19
|
|
|
@@ -36,58 +22,31 @@ describe('createStage', () => {
|
|
|
36
22
|
});
|
|
37
23
|
|
|
38
24
|
it('initializes default values', () => {
|
|
39
|
-
expect(stage.
|
|
40
|
-
expect(stage.
|
|
41
|
-
expect(stage.
|
|
42
|
-
expect(stage.
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
it('allows pre-defined values', () => {
|
|
46
|
-
const base: PartialNode<Stage> = {
|
|
47
|
-
data: {
|
|
48
|
-
color: 0xff0000ff,
|
|
49
|
-
stageHeight: 1000,
|
|
50
|
-
stageWidth: 2000,
|
|
51
|
-
},
|
|
52
|
-
};
|
|
53
|
-
const obj = createStage(base);
|
|
54
|
-
const data = base.data!;
|
|
55
|
-
expect(obj.data.color).toStrictEqual(data.color);
|
|
56
|
-
expect(obj.data.stageHeight).toStrictEqual(data.stageHeight);
|
|
57
|
-
expect(obj.data.stageWidth).toStrictEqual(data.stageWidth);
|
|
58
|
-
});
|
|
59
|
-
|
|
60
|
-
it('returns a new object for better hidden-class performance', () => {
|
|
61
|
-
const base = {};
|
|
62
|
-
const obj = createStage(base);
|
|
63
|
-
expect(obj).not.toStrictEqual(base);
|
|
25
|
+
expect(stage.color).toBe(null);
|
|
26
|
+
expect(stage.stageHeight).toBe(550);
|
|
27
|
+
expect(stage.stageWidth).toBe(400);
|
|
28
|
+
expect(stage.align).toBe('topleft');
|
|
29
|
+
expect(stage.scaleMode).toBe('noscale');
|
|
64
30
|
});
|
|
65
|
-
});
|
|
66
31
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
expect(data.stageWidth).toBe(400);
|
|
71
|
-
expect(data.stageHeight).toBe(550);
|
|
72
|
-
expect(data.color).toBe(null);
|
|
32
|
+
it('allocates a display-object root the stage points back to', () => {
|
|
33
|
+
expect(stage.root).toBeDefined();
|
|
34
|
+
expect(getDisplayObjectStage(stage.root)).toBe(stage);
|
|
73
35
|
});
|
|
74
36
|
|
|
75
37
|
it('allows pre-defined values', () => {
|
|
76
|
-
const
|
|
77
|
-
expect(
|
|
78
|
-
expect(
|
|
38
|
+
const obj = createStage({ color: 0xff0000ff, stageHeight: 1000, stageWidth: 2000 });
|
|
39
|
+
expect(obj.color).toStrictEqual(0xff0000ff);
|
|
40
|
+
expect(obj.stageHeight).toStrictEqual(1000);
|
|
41
|
+
expect(obj.stageWidth).toStrictEqual(2000);
|
|
79
42
|
});
|
|
80
43
|
});
|
|
81
44
|
|
|
82
45
|
describe('createStageRuntime', () => {
|
|
83
|
-
it('returns a non-null runtime', () => {
|
|
46
|
+
it('returns a non-null runtime with stageSignals initialized to null', () => {
|
|
84
47
|
const runtime = createStageRuntime();
|
|
85
48
|
expect(runtime).not.toBeNull();
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
it('uses computeStageLocalBoundsRectangle', () => {
|
|
89
|
-
const runtime = createStageRuntime();
|
|
90
|
-
expect(runtime.computeLocalBoundsRectangle).toStrictEqual(computeStageLocalBoundsRectangle);
|
|
49
|
+
expect(runtime.stageSignals).toBeNull();
|
|
91
50
|
});
|
|
92
51
|
});
|
|
93
52
|
|
|
@@ -126,17 +85,17 @@ describe('getDisplayObjectStage', () => {
|
|
|
126
85
|
expect(getDisplayObjectStage(obj)).toBeNull();
|
|
127
86
|
});
|
|
128
87
|
|
|
129
|
-
it('returns null when the root is not a Stage', () => {
|
|
88
|
+
it('returns null when the root is not owned by a Stage', () => {
|
|
130
89
|
const root = createDisplayObject();
|
|
131
90
|
const child = createDisplayObject();
|
|
132
91
|
addNodeChild(root, child);
|
|
133
92
|
expect(getDisplayObjectStage(child)).toBeNull();
|
|
134
93
|
});
|
|
135
94
|
|
|
136
|
-
it('returns the Stage when
|
|
95
|
+
it('returns the Stage when a child is added under its root', () => {
|
|
137
96
|
const stage = createStage();
|
|
138
97
|
const child = createDisplayObject();
|
|
139
|
-
addNodeChild(stage, child);
|
|
98
|
+
addNodeChild(stage.root, child);
|
|
140
99
|
expect(getDisplayObjectStage(child)).toBe(stage);
|
|
141
100
|
});
|
|
142
101
|
|
|
@@ -144,7 +103,7 @@ describe('getDisplayObjectStage', () => {
|
|
|
144
103
|
const stage = createStage();
|
|
145
104
|
const mid = createDisplayObject();
|
|
146
105
|
const leaf = createDisplayObject();
|
|
147
|
-
addNodeChild(stage, mid);
|
|
106
|
+
addNodeChild(stage.root, mid);
|
|
148
107
|
addNodeChild(mid, leaf);
|
|
149
108
|
expect(getDisplayObjectStage(leaf)).toBe(stage);
|
|
150
109
|
});
|
|
@@ -156,11 +115,6 @@ describe('getStageRuntime', () => {
|
|
|
156
115
|
const runtime = getStageRuntime(stage);
|
|
157
116
|
expect(runtime).not.toBeNull();
|
|
158
117
|
});
|
|
159
|
-
|
|
160
|
-
it('initializes stageSignals to null', () => {
|
|
161
|
-
const runtime = createStageRuntime();
|
|
162
|
-
expect(runtime.stageSignals).toBeNull();
|
|
163
|
-
});
|
|
164
118
|
});
|
|
165
119
|
|
|
166
120
|
describe('getStageSignals', () => {
|
|
@@ -180,8 +134,8 @@ describe('setStageSize', () => {
|
|
|
180
134
|
it('updates stageWidth and stageHeight', () => {
|
|
181
135
|
const stage = createStage();
|
|
182
136
|
setStageSize(stage, 1920, 1080);
|
|
183
|
-
expect(stage.
|
|
184
|
-
expect(stage.
|
|
137
|
+
expect(stage.stageWidth).toBe(1920);
|
|
138
|
+
expect(stage.stageHeight).toBe(1080);
|
|
185
139
|
});
|
|
186
140
|
|
|
187
141
|
it('emits onResize when dimensions change', () => {
|
|
@@ -195,7 +149,7 @@ describe('setStageSize', () => {
|
|
|
195
149
|
});
|
|
196
150
|
|
|
197
151
|
it('does not emit onResize when dimensions are unchanged', () => {
|
|
198
|
-
const stage = createStage({
|
|
152
|
+
const stage = createStage({ stageWidth: 400, stageHeight: 300 });
|
|
199
153
|
let called = false;
|
|
200
154
|
connectSignal(enableStageSignals(stage).onResize, () => {
|
|
201
155
|
called = true;
|
package/src/video.test.ts
CHANGED
package/dist/internal.d.ts
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
import type { DisplayObject, Stage } from '@flighthq/types';
|
|
2
|
-
export type DisplayObjectInternal = Omit<DisplayObject, 'children' | 'parent' | 'stage'> & {
|
|
3
|
-
children: DisplayObject[] | null;
|
|
4
|
-
parent: DisplayObject | null;
|
|
5
|
-
stage: Stage | null;
|
|
6
|
-
};
|
|
7
|
-
//# sourceMappingURL=internal.d.ts.map
|
package/dist/internal.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../src/internal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAE5D,MAAM,MAAM,qBAAqB,GAAG,IAAI,CAAC,aAAa,EAAE,UAAU,GAAG,QAAQ,GAAG,OAAO,CAAC,GAAG;IACzF,QAAQ,EAAE,aAAa,EAAE,GAAG,IAAI,CAAC;IACjC,MAAM,EAAE,aAAa,GAAG,IAAI,CAAC;IAC7B,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC;CACrB,CAAC"}
|
package/dist/internal.js
DELETED
package/dist/internal.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"internal.js","sourceRoot":"","sources":["../src/internal.ts"],"names":[],"mappings":""}
|