@flighthq/displayobject-canvas 0.2.0 → 0.2.1-next.423.3350e53
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/canvasBitmap.d.ts.map +1 -1
- package/dist/canvasBitmap.js +7 -3
- package/dist/canvasBitmap.js.map +1 -1
- package/dist/canvasCache.js +3 -3
- package/dist/canvasCache.js.map +1 -1
- package/dist/canvasImageSource.d.ts +5 -0
- package/dist/canvasImageSource.d.ts.map +1 -0
- package/dist/canvasImageSource.js +45 -0
- package/dist/canvasImageSource.js.map +1 -0
- package/dist/canvasMaterials.d.ts.map +1 -1
- package/dist/canvasMaterials.js +17 -14
- package/dist/canvasMaterials.js.map +1 -1
- package/dist/canvasRenderTarget.d.ts +18 -8
- package/dist/canvasRenderTarget.d.ts.map +1 -1
- package/dist/canvasRenderTarget.js +26 -12
- package/dist/canvasRenderTarget.js.map +1 -1
- package/dist/canvasRichText.js +1 -1
- package/dist/canvasRichText.js.map +1 -1
- package/dist/canvasTextInput.js +1 -1
- package/dist/canvasTextInput.js.map +1 -1
- package/dist/canvasTextLabel.js +1 -1
- package/dist/canvasTextLabel.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/package.json +14 -14
- package/src/canvasImageSource.test.ts +79 -0
- package/src/canvasMaterials.test.ts +7 -12
- package/src/canvasRenderTarget.test.ts +55 -47
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canvasBitmap.d.ts","sourceRoot":"","sources":["../src/canvasBitmap.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAU,iBAAiB,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"canvasBitmap.d.ts","sourceRoot":"","sources":["../src/canvasBitmap.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAU,iBAAiB,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAMvG,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,iBAAiB,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CAyCtF;AAED,eAAO,MAAM,2BAA2B,EAAE,qBAGzC,CAAC"}
|
package/dist/canvasBitmap.js
CHANGED
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
import { noopRendererData } from '@flighthq/render';
|
|
2
2
|
import { drawCanvasDisplayObject } from './canvasDisplayObject';
|
|
3
|
+
import { resolveCanvasImageSource } from './canvasImageSource';
|
|
3
4
|
import { setCanvasTransform } from './canvasTransform';
|
|
4
5
|
export function drawCanvasBitmap(state, bitmap) {
|
|
5
6
|
drawCanvasDisplayObject(state, bitmap);
|
|
6
7
|
const source = bitmap.source;
|
|
7
8
|
const imageSource = source.data.image;
|
|
8
|
-
|
|
9
|
+
// Resolve to a drawable element, materializing one from raw pixels for a data-only Surface so it
|
|
10
|
+
// draws here instead of silently no-opping.
|
|
11
|
+
const drawable = imageSource !== null ? resolveCanvasImageSource(state, imageSource) : null;
|
|
12
|
+
if (imageSource !== null && drawable !== null) {
|
|
9
13
|
const context = state.context;
|
|
10
14
|
state.applyBlendMode?.(state, bitmap.blendMode);
|
|
11
15
|
context.globalAlpha = bitmap.alpha;
|
|
@@ -15,10 +19,10 @@ export function drawCanvasBitmap(state, bitmap) {
|
|
|
15
19
|
context.imageSmoothingEnabled = false;
|
|
16
20
|
}
|
|
17
21
|
if (sourceRectangle === null) {
|
|
18
|
-
context.drawImage(
|
|
22
|
+
context.drawImage(drawable, 0, 0, imageSource.width, imageSource.height);
|
|
19
23
|
}
|
|
20
24
|
else {
|
|
21
|
-
context.drawImage(
|
|
25
|
+
context.drawImage(drawable, sourceRectangle.x, sourceRectangle.y, sourceRectangle.width, sourceRectangle.height, 0, 0, sourceRectangle.width, sourceRectangle.height);
|
|
22
26
|
}
|
|
23
27
|
if (!state.allowSmoothing || !source.data.smoothing) {
|
|
24
28
|
context.imageSmoothingEnabled = true;
|
package/dist/canvasBitmap.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canvasBitmap.js","sourceRoot":"","sources":["../src/canvasBitmap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAGpD,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD,MAAM,UAAU,gBAAgB,CAAC,KAAwB,EAAE,MAAqB;IAC9E,uBAAuB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACvC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAgB,CAAC;IACvC,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;IACtC,
|
|
1
|
+
{"version":3,"file":"canvasBitmap.js","sourceRoot":"","sources":["../src/canvasBitmap.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAGpD,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AAC/D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD,MAAM,UAAU,gBAAgB,CAAC,KAAwB,EAAE,MAAqB;IAC9E,uBAAuB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IACvC,MAAM,MAAM,GAAG,MAAM,CAAC,MAAgB,CAAC;IACvC,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC;IACtC,iGAAiG;IACjG,4CAA4C;IAC5C,MAAM,QAAQ,GAAG,WAAW,KAAK,IAAI,CAAC,CAAC,CAAC,wBAAwB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC5F,IAAI,WAAW,KAAK,IAAI,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QAC9C,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;QAE9B,KAAK,CAAC,cAAc,EAAE,CAAC,KAAK,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;QAEhD,OAAO,CAAC,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC;QACnC,MAAM,eAAe,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,IAAI,IAAI,CAAC;QAE5D,kBAAkB,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,WAAW,CAAC,CAAC;QAEvD,IAAI,CAAC,KAAK,CAAC,cAAc,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpD,OAAO,CAAC,qBAAqB,GAAG,KAAK,CAAC;QACxC,CAAC;QAED,IAAI,eAAe,KAAK,IAAI,EAAE,CAAC;YAC7B,OAAO,CAAC,SAAS,CAAC,QAAQ,EAAE,CAAC,EAAE,CAAC,EAAE,WAAW,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;QAC3E,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,SAAS,CACf,QAAQ,EACR,eAAe,CAAC,CAAC,EACjB,eAAe,CAAC,CAAC,EACjB,eAAe,CAAC,KAAK,EACrB,eAAe,CAAC,MAAM,EACtB,CAAC,EACD,CAAC,EACD,eAAe,CAAC,KAAK,EACrB,eAAe,CAAC,MAAM,CACvB,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,cAAc,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,CAAC;YACpD,OAAO,CAAC,qBAAqB,GAAG,IAAI,CAAC;QACvC,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,2BAA2B,GAA0B;IAChE,UAAU,EAAE,gBAAgB;IAC5B,MAAM,EAAE,gBAAgB;CACzB,CAAC"}
|
package/dist/canvasCache.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { createMatrix, createRectangle } from '@flighthq/geometry';
|
|
2
2
|
import { computeNodeBoundsRectangle } from '@flighthq/node';
|
|
3
3
|
import { computeDisplayObjectRenderTargetTransform, computeRenderCacheTransform, computeRenderTargetSize, copyAllRenderersFromRenderState, getRenderProxyCache, noopRendererData, prepareDisplayObjectRender, registerRenderCacheRenderer, } from '@flighthq/render';
|
|
4
4
|
import { renderCanvasDisplayObject } from './canvasDisplayObject';
|
|
5
5
|
import { createCanvasRenderState, getCanvasRenderStateRuntime } from './canvasRenderState';
|
|
6
|
-
import { createCanvasRenderTarget, resizeCanvasRenderTarget } from './canvasRenderTarget';
|
|
6
|
+
import { createCanvasRenderTarget, resizeCanvasRenderTarget, setCanvasRenderTransform2D } from './canvasRenderTarget';
|
|
7
7
|
import { setCanvasTransform } from './canvasTransform';
|
|
8
8
|
/**
|
|
9
9
|
* Creates a dedicated offscreen render state for baking render caches consumed by
|
|
@@ -94,7 +94,7 @@ export function refreshCanvasRenderCache(cacheState, cache, source, options) {
|
|
|
94
94
|
handles.context = target.context;
|
|
95
95
|
handles.context.imageSmoothingEnabled = runtime.imageSmoothingEnabled;
|
|
96
96
|
handles.context.imageSmoothingQuality = runtime.imageSmoothingQuality;
|
|
97
|
-
|
|
97
|
+
setCanvasRenderTransform2D(cacheState, _renderTransform);
|
|
98
98
|
const dirty = prepareDisplayObjectRender(cacheState, source);
|
|
99
99
|
if (dirty || resized) {
|
|
100
100
|
handles.context.clearRect(0, 0, target.canvas.width, target.canvas.height);
|
package/dist/canvasCache.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canvasCache.js","sourceRoot":"","sources":["../src/canvasCache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"canvasCache.js","sourceRoot":"","sources":["../src/canvasCache.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { CanvasRenderState, ImageResource } from '@flighthq/types';
|
|
2
|
+
export type CanvasImageSourceKind = 'data' | 'element' | 'none';
|
|
3
|
+
export declare function explainCanvasImageSource(image: Readonly<ImageResource>): CanvasImageSourceKind;
|
|
4
|
+
export declare function resolveCanvasImageSource(state: CanvasRenderState, image: Readonly<ImageResource>): CanvasImageSource | null;
|
|
5
|
+
//# sourceMappingURL=canvasImageSource.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canvasImageSource.d.ts","sourceRoot":"","sources":["../src/canvasImageSource.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAOxE,MAAM,MAAM,qBAAqB,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC;AAOhE,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,QAAQ,CAAC,aAAa,CAAC,GAAG,qBAAqB,CAI9F;AAaD,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,iBAAiB,EACxB,KAAK,EAAE,QAAQ,CAAC,aAAa,CAAC,GAC7B,iBAAiB,GAAG,IAAI,CAkB1B"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { createCanvasFromImageResource } from '@flighthq/image';
|
|
2
|
+
import { getCanvasRenderStateRuntime } from './canvasRenderState';
|
|
3
|
+
// Reports how a resource will resolve on the Canvas backend without drawing or materializing anything
|
|
4
|
+
// — the shakeable diagnostic for the otherwise-silent data→element transcode. `element` is free;
|
|
5
|
+
// `data` means resolveCanvasImageSource transcodes the pixels into a cached canvas on first use and
|
|
6
|
+
// after every `version` bump (a CPU copy the GL/wgpu data path does not incur, since those upload raw
|
|
7
|
+
// texels natively). A guard or dev tool surfaces this so the cost is legible, per the diagnostics rule.
|
|
8
|
+
export function explainCanvasImageSource(image) {
|
|
9
|
+
if (image.source !== null)
|
|
10
|
+
return 'element';
|
|
11
|
+
if (image.data !== null)
|
|
12
|
+
return 'data';
|
|
13
|
+
return 'none';
|
|
14
|
+
}
|
|
15
|
+
// Resolves a (possibly data-only) ImageResource to a CanvasImageSource the 2D context can draw. An
|
|
16
|
+
// element-backed resource returns its host `source` directly with no copy. A data-only resource — a
|
|
17
|
+
// generated Surface with no element — materializes an HTMLCanvasElement from its raw pixels and caches
|
|
18
|
+
// it per render state, re-materializing only when `version` bumps (see invalidateImageResource).
|
|
19
|
+
// Returns null when the resource carries neither pixel form.
|
|
20
|
+
//
|
|
21
|
+
// This is the Canvas parallel to the GL backend's bindGlImageResourceTexture: derived, renderer-owned
|
|
22
|
+
// state keyed on the caller's explicit invalidation signal, never written back onto the shared
|
|
23
|
+
// resource. It closes the gap where a data-only Surface previously drew nothing on Canvas/DOM unless
|
|
24
|
+
// the caller manually built an element (createImageResourceFromSurface) first. The transcode cost is
|
|
25
|
+
// reportable via explainCanvasImageSource rather than hidden.
|
|
26
|
+
export function resolveCanvasImageSource(state, image) {
|
|
27
|
+
if (image.source !== null)
|
|
28
|
+
return image.source;
|
|
29
|
+
if (image.data === null)
|
|
30
|
+
return null;
|
|
31
|
+
const runtime = getCanvasRenderStateRuntime(state);
|
|
32
|
+
let cache = runtime.imageResourceElementCache;
|
|
33
|
+
if (cache === undefined) {
|
|
34
|
+
cache = new WeakMap();
|
|
35
|
+
runtime.imageResourceElementCache = cache;
|
|
36
|
+
}
|
|
37
|
+
let entry = cache.get(image);
|
|
38
|
+
if (entry === undefined || entry.version !== image.version) {
|
|
39
|
+
// data is non-null here, so the transcode never returns null.
|
|
40
|
+
entry = { element: createCanvasFromImageResource(image), version: image.version };
|
|
41
|
+
cache.set(image, entry);
|
|
42
|
+
}
|
|
43
|
+
return entry.element;
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=canvasImageSource.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"canvasImageSource.js","sourceRoot":"","sources":["../src/canvasImageSource.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,6BAA6B,EAAE,MAAM,iBAAiB,CAAC;AAGhE,OAAO,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAC;AAOlE,sGAAsG;AACtG,iGAAiG;AACjG,oGAAoG;AACpG,sGAAsG;AACtG,wGAAwG;AACxG,MAAM,UAAU,wBAAwB,CAAC,KAA8B;IACrE,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IAC5C,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI;QAAE,OAAO,MAAM,CAAC;IACvC,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,mGAAmG;AACnG,oGAAoG;AACpG,uGAAuG;AACvG,iGAAiG;AACjG,6DAA6D;AAC7D,EAAE;AACF,sGAAsG;AACtG,+FAA+F;AAC/F,qGAAqG;AACrG,qGAAqG;AACrG,8DAA8D;AAC9D,MAAM,UAAU,wBAAwB,CACtC,KAAwB,EACxB,KAA8B;IAE9B,IAAI,KAAK,CAAC,MAAM,KAAK,IAAI;QAAE,OAAO,KAAK,CAAC,MAAM,CAAC;IAC/C,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAErC,MAAM,OAAO,GAAG,2BAA2B,CAAC,KAAK,CAAC,CAAC;IACnD,IAAI,KAAK,GAAG,OAAO,CAAC,yBAAyB,CAAC;IAC9C,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,KAAK,GAAG,IAAI,OAAO,EAAE,CAAC;QACtB,OAAO,CAAC,yBAAyB,GAAG,KAAK,CAAC;IAC5C,CAAC;IAED,IAAI,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC7B,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC;QAC3D,8DAA8D;QAC9D,KAAK,GAAG,EAAE,OAAO,EAAE,6BAA6B,CAAC,KAAK,CAAE,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;QACnF,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IAC1B,CAAC;IACD,OAAO,KAAK,CAAC,OAAO,CAAC;AACvB,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canvasMaterials.d.ts","sourceRoot":"","sources":["../src/canvasMaterials.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,
|
|
1
|
+
{"version":3,"file":"canvasMaterials.d.ts","sourceRoot":"","sources":["../src/canvasMaterials.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AACzD,OAAO,EAAqB,SAAS,EAAE,MAAM,iBAAiB,CAAC;AA+B/D,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,iBAAiB,EAAE,KAAK,EAAE,SAAS,GAAG,IAAI,GAAG,IAAI,CAK5F;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAEpE"}
|
package/dist/canvasMaterials.js
CHANGED
|
@@ -1,27 +1,30 @@
|
|
|
1
|
-
import { BlendMode } from '@flighthq/types';
|
|
1
|
+
import { AdvancedBlendMode, BlendMode } from '@flighthq/types';
|
|
2
2
|
import { getCanvasRenderStateRuntime } from './canvasRenderState';
|
|
3
3
|
// Auditable map from a blend-mode intent to the Canvas2D globalCompositeOperation
|
|
4
4
|
// that realizes it. `null` means there is no faithful Canvas2D equivalent, so the
|
|
5
|
-
// mode degrades to normal ('source-over') compositing.
|
|
5
|
+
// mode degrades to normal ('source-over') compositing. Canvas2D is the one backend that natively
|
|
6
|
+
// realizes the destination-reading AdvancedBlendMode set too (via globalCompositeOperation), so those
|
|
7
|
+
// keys are carried here — a caller can hand a display object either a fixed-function BlendMode or an
|
|
8
|
+
// AdvancedBlendMode string and Canvas resolves both, even though only the fixed-function set is exposed
|
|
9
|
+
// as a node property.
|
|
6
10
|
const CANVAS_BLEND_MODE = {
|
|
7
11
|
[BlendMode.Add]: 'lighter',
|
|
8
|
-
[BlendMode.Alpha]: 'destination-in',
|
|
9
12
|
[BlendMode.Darken]: 'darken',
|
|
10
|
-
[BlendMode.Difference]: 'difference',
|
|
11
|
-
[BlendMode.Erase]: 'destination-out',
|
|
12
|
-
[BlendMode.HardLight]: 'hard-light',
|
|
13
|
-
[BlendMode.Invert]: null,
|
|
14
|
-
[BlendMode.Layer]: 'source-over',
|
|
15
13
|
[BlendMode.Lighten]: 'lighten',
|
|
16
14
|
[BlendMode.Multiply]: 'multiply',
|
|
17
|
-
// No per-node Canvas2D equivalent ('copy' clears the whole canvas, not just the covered region),
|
|
18
|
-
// so no-blend degrades to normal compositing — identical for the opaque content None targets.
|
|
19
|
-
[BlendMode.None]: null,
|
|
20
15
|
[BlendMode.Normal]: 'source-over',
|
|
21
|
-
[BlendMode.Overlay]: 'overlay',
|
|
22
16
|
[BlendMode.Screen]: 'screen',
|
|
23
|
-
[
|
|
24
|
-
[
|
|
17
|
+
[AdvancedBlendMode.Color]: 'color',
|
|
18
|
+
[AdvancedBlendMode.ColorBurn]: 'color-burn',
|
|
19
|
+
[AdvancedBlendMode.ColorDodge]: 'color-dodge',
|
|
20
|
+
[AdvancedBlendMode.Difference]: 'difference',
|
|
21
|
+
[AdvancedBlendMode.Exclusion]: 'exclusion',
|
|
22
|
+
[AdvancedBlendMode.HardLight]: 'hard-light',
|
|
23
|
+
[AdvancedBlendMode.Hue]: 'hue',
|
|
24
|
+
[AdvancedBlendMode.Luminosity]: 'luminosity',
|
|
25
|
+
[AdvancedBlendMode.Overlay]: 'overlay',
|
|
26
|
+
[AdvancedBlendMode.Saturation]: 'saturation',
|
|
27
|
+
[AdvancedBlendMode.SoftLight]: 'soft-light',
|
|
25
28
|
};
|
|
26
29
|
export function applyCanvasBlendMode(state, value) {
|
|
27
30
|
const runtime = getCanvasRenderStateRuntime(state);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canvasMaterials.js","sourceRoot":"","sources":["../src/canvasMaterials.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"canvasMaterials.js","sourceRoot":"","sources":["../src/canvasMaterials.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAE/D,OAAO,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAC;AAElE,kFAAkF;AAClF,kFAAkF;AAClF,iGAAiG;AACjG,sGAAsG;AACtG,qGAAqG;AACrG,wGAAwG;AACxG,sBAAsB;AACtB,MAAM,iBAAiB,GAAuD;IAC5E,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,SAAS;IAC1B,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,QAAQ;IAC5B,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,SAAS;IAC9B,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,UAAU;IAChC,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,aAAa;IACjC,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,QAAQ;IAC5B,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE,OAAO;IAClC,CAAC,iBAAiB,CAAC,SAAS,CAAC,EAAE,YAAY;IAC3C,CAAC,iBAAiB,CAAC,UAAU,CAAC,EAAE,aAAa;IAC7C,CAAC,iBAAiB,CAAC,UAAU,CAAC,EAAE,YAAY;IAC5C,CAAC,iBAAiB,CAAC,SAAS,CAAC,EAAE,WAAW;IAC1C,CAAC,iBAAiB,CAAC,SAAS,CAAC,EAAE,YAAY;IAC3C,CAAC,iBAAiB,CAAC,GAAG,CAAC,EAAE,KAAK;IAC9B,CAAC,iBAAiB,CAAC,UAAU,CAAC,EAAE,YAAY;IAC5C,CAAC,iBAAiB,CAAC,OAAO,CAAC,EAAE,SAAS;IACtC,CAAC,iBAAiB,CAAC,UAAU,CAAC,EAAE,YAAY;IAC5C,CAAC,iBAAiB,CAAC,SAAS,CAAC,EAAE,YAAY;CAC5C,CAAC;AAEF,MAAM,UAAU,oBAAoB,CAAC,KAAwB,EAAE,KAAuB;IACpF,MAAM,OAAO,GAAG,2BAA2B,CAAC,KAAK,CAAC,CAAC;IACnD,IAAI,KAAK,KAAK,OAAO,CAAC,gBAAgB;QAAE,OAAO;IAC/C,OAAO,CAAC,gBAAgB,GAAG,KAAK,CAAC;IACjC,KAAK,CAAC,OAAO,CAAC,wBAAwB,GAAG,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,aAAa,CAAC;AAC/G,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,KAAwB;IAC5D,KAAK,CAAC,cAAc,GAAG,oBAAoB,CAAC;AAC9C,CAAC"}
|
|
@@ -1,16 +1,26 @@
|
|
|
1
|
-
import type { CanvasRenderState, CanvasRenderTarget, Matrix } from '@flighthq/types';
|
|
1
|
+
import type { CanvasRenderState, CanvasRenderTarget, Matrix, RenderPassPreserve } from '@flighthq/types';
|
|
2
2
|
/**
|
|
3
|
-
*
|
|
4
|
-
* canvas, context, and
|
|
5
|
-
* `
|
|
3
|
+
* Begins a render pass into `target`: redirects subsequent canvas rendering into it (saving the state's
|
|
4
|
+
* current canvas, context, and 2D transform for restore, so passes nest) and CLEARS it by default.
|
|
5
|
+
* `preserve` keeps the target's pixels instead. Canvas clears by erasing (clearRect), so there is no
|
|
6
|
+
* colored render-target clear here; a colored backdrop is drawn as content. Carries no transform — a 2D
|
|
7
|
+
* pass that needs a specific root transform calls setCanvasRenderTransform2D after begin. Pair with
|
|
8
|
+
* endCanvasRenderPass. Mirrors beginGlRenderPass / beginWgpuRenderPass.
|
|
6
9
|
*/
|
|
7
|
-
export declare function
|
|
10
|
+
export declare function beginCanvasRenderPass(state: CanvasRenderState, target: CanvasRenderTarget, preserve?: Readonly<RenderPassPreserve>): void;
|
|
8
11
|
export declare function createCanvasRenderTarget(width: number, height: number): CanvasRenderTarget;
|
|
9
12
|
export declare function destroyCanvasRenderTarget(target: CanvasRenderTarget): void;
|
|
10
13
|
/**
|
|
11
|
-
*
|
|
12
|
-
*
|
|
14
|
+
* Ends the pass opened by beginCanvasRenderPass: restores the canvas, context, and 2D transform saved at
|
|
15
|
+
* begin. A call with no matching begin is a no-op. Mirrors endGlRenderPass / endWgpuRenderPass.
|
|
13
16
|
*/
|
|
14
|
-
export declare function
|
|
17
|
+
export declare function endCanvasRenderPass(state: CanvasRenderState): void;
|
|
15
18
|
export declare function resizeCanvasRenderTarget(target: CanvasRenderTarget, width: number, height: number): void;
|
|
19
|
+
/**
|
|
20
|
+
* Sets the 2D root device transform the display-object update pass reads to place nodes with no parent.
|
|
21
|
+
* Call after beginCanvasRenderPass when a 2D pass renders into a target with its own coordinate system;
|
|
22
|
+
* the value is restored by the matching endCanvasRenderPass. Allocates a fresh matrix so the bracket's
|
|
23
|
+
* saved reference stays intact for restore. Mirrors setGlRenderTransform2D / setWgpuRenderTransform2D.
|
|
24
|
+
*/
|
|
25
|
+
export declare function setCanvasRenderTransform2D(state: CanvasRenderState, transform: Readonly<Matrix>): void;
|
|
16
26
|
//# sourceMappingURL=canvasRenderTarget.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canvasRenderTarget.d.ts","sourceRoot":"","sources":["../src/canvasRenderTarget.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"canvasRenderTarget.d.ts","sourceRoot":"","sources":["../src/canvasRenderTarget.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAoBzG;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,iBAAiB,EACxB,MAAM,EAAE,kBAAkB,EAC1B,QAAQ,CAAC,EAAE,QAAQ,CAAC,kBAAkB,CAAC,GACtC,IAAI,CAwBN;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,kBAAkB,CAM1F;AAED,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,kBAAkB,GAAG,IAAI,CAO1E;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAOlE;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,kBAAkB,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAKxG;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,iBAAiB,EAAE,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,IAAI,CAKtG"}
|
|
@@ -2,11 +2,14 @@ import { copyMatrix, createMatrix } from '@flighthq/geometry';
|
|
|
2
2
|
import { getCanvasRenderStateRuntime } from './canvasRenderState';
|
|
3
3
|
const _targetStack = new WeakMap();
|
|
4
4
|
/**
|
|
5
|
-
*
|
|
6
|
-
* canvas, context, and
|
|
7
|
-
* `
|
|
5
|
+
* Begins a render pass into `target`: redirects subsequent canvas rendering into it (saving the state's
|
|
6
|
+
* current canvas, context, and 2D transform for restore, so passes nest) and CLEARS it by default.
|
|
7
|
+
* `preserve` keeps the target's pixels instead. Canvas clears by erasing (clearRect), so there is no
|
|
8
|
+
* colored render-target clear here; a colored backdrop is drawn as content. Carries no transform — a 2D
|
|
9
|
+
* pass that needs a specific root transform calls setCanvasRenderTransform2D after begin. Pair with
|
|
10
|
+
* endCanvasRenderPass. Mirrors beginGlRenderPass / beginWgpuRenderPass.
|
|
8
11
|
*/
|
|
9
|
-
export function
|
|
12
|
+
export function beginCanvasRenderPass(state, target, preserve) {
|
|
10
13
|
const handles = state;
|
|
11
14
|
const runtime = getCanvasRenderStateRuntime(state);
|
|
12
15
|
let stack = _targetStack.get(state);
|
|
@@ -23,11 +26,10 @@ export function beginCanvasRenderTarget(state, target, renderTransform) {
|
|
|
23
26
|
handles.context = target.context;
|
|
24
27
|
handles.context.imageSmoothingEnabled = runtime.imageSmoothingEnabled;
|
|
25
28
|
handles.context.imageSmoothingQuality = runtime.imageSmoothingQuality;
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
handles.renderTransform2D = newTransform;
|
|
29
|
+
const preserveColor = preserve?.preserveColor;
|
|
30
|
+
const preserved = typeof preserveColor === 'boolean' ? preserveColor : preserveColor?.[0] === true;
|
|
31
|
+
if (!preserved)
|
|
32
|
+
handles.context.clearRect(0, 0, target.width, target.height);
|
|
31
33
|
}
|
|
32
34
|
export function createCanvasRenderTarget(width, height) {
|
|
33
35
|
const canvas = document.createElement('canvas');
|
|
@@ -45,10 +47,10 @@ export function destroyCanvasRenderTarget(target) {
|
|
|
45
47
|
target.height = 0;
|
|
46
48
|
}
|
|
47
49
|
/**
|
|
48
|
-
*
|
|
49
|
-
*
|
|
50
|
+
* Ends the pass opened by beginCanvasRenderPass: restores the canvas, context, and 2D transform saved at
|
|
51
|
+
* begin. A call with no matching begin is a no-op. Mirrors endGlRenderPass / endWgpuRenderPass.
|
|
50
52
|
*/
|
|
51
|
-
export function
|
|
53
|
+
export function endCanvasRenderPass(state) {
|
|
52
54
|
const handles = state;
|
|
53
55
|
const saved = _targetStack.get(state)?.pop();
|
|
54
56
|
if (saved === undefined)
|
|
@@ -63,4 +65,16 @@ export function resizeCanvasRenderTarget(target, width, height) {
|
|
|
63
65
|
target.width = target.canvas.width;
|
|
64
66
|
target.height = target.canvas.height;
|
|
65
67
|
}
|
|
68
|
+
/**
|
|
69
|
+
* Sets the 2D root device transform the display-object update pass reads to place nodes with no parent.
|
|
70
|
+
* Call after beginCanvasRenderPass when a 2D pass renders into a target with its own coordinate system;
|
|
71
|
+
* the value is restored by the matching endCanvasRenderPass. Allocates a fresh matrix so the bracket's
|
|
72
|
+
* saved reference stays intact for restore. Mirrors setGlRenderTransform2D / setWgpuRenderTransform2D.
|
|
73
|
+
*/
|
|
74
|
+
export function setCanvasRenderTransform2D(state, transform) {
|
|
75
|
+
const handles = state;
|
|
76
|
+
const next = createMatrix();
|
|
77
|
+
copyMatrix(next, transform);
|
|
78
|
+
handles.renderTransform2D = next;
|
|
79
|
+
}
|
|
66
80
|
//# sourceMappingURL=canvasRenderTarget.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canvasRenderTarget.js","sourceRoot":"","sources":["../src/canvasRenderTarget.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAG9D,OAAO,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAC;AAgBlE,MAAM,YAAY,GAAG,IAAI,OAAO,EAAyC,CAAC;AAE1E
|
|
1
|
+
{"version":3,"file":"canvasRenderTarget.js","sourceRoot":"","sources":["../src/canvasRenderTarget.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAG9D,OAAO,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAC;AAgBlE,MAAM,YAAY,GAAG,IAAI,OAAO,EAAyC,CAAC;AAE1E;;;;;;;GAOG;AACH,MAAM,UAAU,qBAAqB,CACnC,KAAwB,EACxB,MAA0B,EAC1B,QAAuC;IAEvC,MAAM,OAAO,GAAG,KAAiC,CAAC;IAClD,MAAM,OAAO,GAAG,2BAA2B,CAAC,KAAK,CAAC,CAAC;IAEnD,IAAI,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACpC,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,KAAK,GAAG,EAAE,CAAC;QACX,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,IAAI,CAAC;QACT,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;KAC7C,CAAC,CAAC;IAEH,OAAO,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;IAC/B,OAAO,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;IACjC,OAAO,CAAC,OAAO,CAAC,qBAAqB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IACtE,OAAO,CAAC,OAAO,CAAC,qBAAqB,GAAG,OAAO,CAAC,qBAAqB,CAAC;IAEtE,MAAM,aAAa,GAAG,QAAQ,EAAE,aAAa,CAAC;IAC9C,MAAM,SAAS,GAAG,OAAO,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC;IACnG,IAAI,CAAC,SAAS;QAAE,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;AAC/E,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,KAAa,EAAE,MAAc;IACpE,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAChD,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAC7C,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAC/C,MAAM,OAAO,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAE,CAAC;IACzC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC;AACzE,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,MAA0B;IAClE,qFAAqF;IACrF,sEAAsE;IACtE,MAAM,CAAC,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;IACxB,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;IACzB,MAAM,CAAC,KAAK,GAAG,CAAC,CAAC;IACjB,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC;AACpB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAwB;IAC1D,MAAM,OAAO,GAAG,KAAiC,CAAC;IAClD,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,CAAC;IAC7C,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO;IAChC,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC;IAC9B,OAAO,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IAChC,OAAO,CAAC,iBAAiB,GAAG,KAAK,CAAC,iBAAiB,CAAC;AACtD,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,MAA0B,EAAE,KAAa,EAAE,MAAc;IAChG,MAAM,CAAC,MAAM,CAAC,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IACpD,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IACtD,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;IACnC,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;AACvC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,0BAA0B,CAAC,KAAwB,EAAE,SAA2B;IAC9F,MAAM,OAAO,GAAG,KAAiC,CAAC;IAClD,MAAM,IAAI,GAAG,YAAY,EAAE,CAAC;IAC5B,UAAU,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAC5B,OAAO,CAAC,iBAAiB,GAAG,IAAI,CAAC;AACnC,CAAC"}
|
package/dist/canvasRichText.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { computeRgbHexString } from '@flighthq/
|
|
1
|
+
import { computeRgbHexString } from '@flighthq/color';
|
|
2
2
|
import { noopRendererData } from '@flighthq/render';
|
|
3
3
|
import { computeTextFormatFontString, getRichTextPasswordCharacter, getRichTextRuntime } from '@flighthq/text';
|
|
4
4
|
import { computeRichTextContent, computeTextBoundsHeight, computeTextBoundsWidth, computeTextLayout, getRichTextContent, getRichTextScrollYOffset, getRichTextSelectionRectangles, getTextLayoutResult, } from '@flighthq/textlayout';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canvasRichText.js","sourceRoot":"","sources":["../src/canvasRichText.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"canvasRichText.js","sourceRoot":"","sources":["../src/canvasRichText.ts"],"names":[],"mappings":"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"}
|
package/dist/canvasTextInput.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { computeRgbHexString } from '@flighthq/
|
|
1
|
+
import { computeRgbHexString } from '@flighthq/color';
|
|
2
2
|
import { getRichTextRuntime } from '@flighthq/text';
|
|
3
3
|
import { getTextInputCaretRectangle, getTextInputSelectionBeginIndex, getTextInputSelectionEndIndex, getTextInputSelectionRectangles, getTextInputState, } from '@flighthq/textinput';
|
|
4
4
|
import { computeTextBoundsHeight, computeTextBoundsWidth, getRichTextScrollYOffset } from '@flighthq/textlayout';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canvasTextInput.js","sourceRoot":"","sources":["../src/canvasTextInput.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"canvasTextInput.js","sourceRoot":"","sources":["../src/canvasTextInput.ts"],"names":[],"mappings":"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"}
|
package/dist/canvasTextLabel.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { computeRgbHexString } from '@flighthq/
|
|
1
|
+
import { computeRgbHexString } from '@flighthq/color';
|
|
2
2
|
import { noopRendererData } from '@flighthq/render';
|
|
3
3
|
import { computeTextFormatFontString, getTextLabelRuntime } from '@flighthq/text';
|
|
4
4
|
import { computeTextLayout, createTextFormatRange, getTextLayoutResult } from '@flighthq/textlayout';
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"canvasTextLabel.js","sourceRoot":"","sources":["../src/canvasTextLabel.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"canvasTextLabel.js","sourceRoot":"","sources":["../src/canvasTextLabel.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -7,6 +7,7 @@ export * from './canvasCSSFilterBinding';
|
|
|
7
7
|
export * from './canvasDisplayObject';
|
|
8
8
|
export * from './canvasElement';
|
|
9
9
|
export * from './canvasFillPattern';
|
|
10
|
+
export * from './canvasImageSource';
|
|
10
11
|
export * from './canvasMaterialRegistry';
|
|
11
12
|
export * from './canvasMaterials';
|
|
12
13
|
export * from './canvasParticleEmitter';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC;AAC9B,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC;AAC9B,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -7,6 +7,7 @@ export * from './canvasCSSFilterBinding';
|
|
|
7
7
|
export * from './canvasDisplayObject';
|
|
8
8
|
export * from './canvasElement';
|
|
9
9
|
export * from './canvasFillPattern';
|
|
10
|
+
export * from './canvasImageSource';
|
|
10
11
|
export * from './canvasMaterialRegistry';
|
|
11
12
|
export * from './canvasMaterials';
|
|
12
13
|
export * from './canvasParticleEmitter';
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC;AAC9B,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC;AAC7B,cAAc,uBAAuB,CAAC;AACtC,cAAc,0BAA0B,CAAC;AACzC,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,0BAA0B,CAAC;AACzC,cAAc,mBAAmB,CAAC;AAClC,cAAc,yBAAyB,CAAC;AACxC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,sBAAsB,CAAC;AACrC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC;AACpC,cAAc,eAAe,CAAC;AAC9B,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,mBAAmB,CAAC;AAClC,cAAc,qBAAqB,CAAC;AACpC,cAAc,iBAAiB,CAAC;AAChC,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@flighthq/displayobject-canvas",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.1-next.423.3350e53",
|
|
4
4
|
"repository": {
|
|
5
5
|
"type": "git",
|
|
6
6
|
"url": "https://github.com/flighthq/flight.git",
|
|
@@ -32,19 +32,19 @@
|
|
|
32
32
|
"clean:dist": "tsx ../../scripts/clean-package-dist.ts"
|
|
33
33
|
},
|
|
34
34
|
"dependencies": {
|
|
35
|
-
"@flighthq/
|
|
36
|
-
"@flighthq/
|
|
37
|
-
"@flighthq/
|
|
38
|
-
"@flighthq/
|
|
39
|
-
"@flighthq/
|
|
40
|
-
"@flighthq/
|
|
41
|
-
"@flighthq/
|
|
42
|
-
"@flighthq/
|
|
43
|
-
"@flighthq/
|
|
44
|
-
"@flighthq/
|
|
45
|
-
"@flighthq/
|
|
46
|
-
"@flighthq/
|
|
47
|
-
"@flighthq/types": "0.2.
|
|
35
|
+
"@flighthq/color": "0.2.1-next.423.3350e53",
|
|
36
|
+
"@flighthq/displayobject": "0.2.1-next.423.3350e53",
|
|
37
|
+
"@flighthq/geometry": "0.2.1-next.423.3350e53",
|
|
38
|
+
"@flighthq/image": "0.2.1-next.423.3350e53",
|
|
39
|
+
"@flighthq/node": "0.2.1-next.423.3350e53",
|
|
40
|
+
"@flighthq/render": "0.2.1-next.423.3350e53",
|
|
41
|
+
"@flighthq/shape": "0.2.1-next.423.3350e53",
|
|
42
|
+
"@flighthq/text": "0.2.1-next.423.3350e53",
|
|
43
|
+
"@flighthq/textinput": "0.2.1-next.423.3350e53",
|
|
44
|
+
"@flighthq/textlayout": "0.2.1-next.423.3350e53",
|
|
45
|
+
"@flighthq/textureatlas": "0.2.1-next.423.3350e53",
|
|
46
|
+
"@flighthq/tileset": "0.2.1-next.423.3350e53",
|
|
47
|
+
"@flighthq/types": "0.2.1-next.423.3350e53"
|
|
48
48
|
},
|
|
49
49
|
"devDependencies": {
|
|
50
50
|
"@flighthq/sprite": "*",
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
import { createImageResource, invalidateImageResource } from '@flighthq/image';
|
|
2
|
+
import type { ImageResource } from '@flighthq/types';
|
|
3
|
+
|
|
4
|
+
import { explainCanvasImageSource, resolveCanvasImageSource } from './canvasImageSource';
|
|
5
|
+
import { createCanvasRenderState } from './canvasRenderState';
|
|
6
|
+
|
|
7
|
+
function makeState() {
|
|
8
|
+
const canvas = document.createElement('canvas');
|
|
9
|
+
canvas.width = 200;
|
|
10
|
+
canvas.height = 200;
|
|
11
|
+
return createCanvasRenderState(canvas);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
function makeDataOnlyResource(width = 4, height = 4): ImageResource {
|
|
15
|
+
const resource = createImageResource();
|
|
16
|
+
resource.width = width;
|
|
17
|
+
resource.height = height;
|
|
18
|
+
resource.data = new Uint8ClampedArray(width * height * 4).fill(255);
|
|
19
|
+
return resource;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
describe('explainCanvasImageSource', () => {
|
|
23
|
+
it('reports element for a host-element-backed resource', () => {
|
|
24
|
+
const resource = createImageResource(document.createElement('img'));
|
|
25
|
+
expect(explainCanvasImageSource(resource)).toBe('element');
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
it('reports data for a data-only resource', () => {
|
|
29
|
+
expect(explainCanvasImageSource(makeDataOnlyResource())).toBe('data');
|
|
30
|
+
});
|
|
31
|
+
|
|
32
|
+
it('reports none for a resource with neither representation', () => {
|
|
33
|
+
expect(explainCanvasImageSource(createImageResource())).toBe('none');
|
|
34
|
+
});
|
|
35
|
+
});
|
|
36
|
+
|
|
37
|
+
describe('resolveCanvasImageSource', () => {
|
|
38
|
+
it('returns the host source element directly, with no cache entry', () => {
|
|
39
|
+
const state = makeState();
|
|
40
|
+
const img = document.createElement('img');
|
|
41
|
+
const resource = createImageResource(img);
|
|
42
|
+
expect(resolveCanvasImageSource(state, resource)).toBe(img);
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
it('materializes a canvas element from data-only pixels', () => {
|
|
46
|
+
const state = makeState();
|
|
47
|
+
const resolved = resolveCanvasImageSource(state, makeDataOnlyResource());
|
|
48
|
+
expect(resolved).toBeInstanceOf(HTMLCanvasElement);
|
|
49
|
+
});
|
|
50
|
+
|
|
51
|
+
it('caches the materialized element across resolves of the same resource', () => {
|
|
52
|
+
const state = makeState();
|
|
53
|
+
const resource = makeDataOnlyResource();
|
|
54
|
+
const first = resolveCanvasImageSource(state, resource);
|
|
55
|
+
const second = resolveCanvasImageSource(state, resource);
|
|
56
|
+
expect(second).toBe(first);
|
|
57
|
+
});
|
|
58
|
+
|
|
59
|
+
it('re-materializes after the resource version bumps', () => {
|
|
60
|
+
const state = makeState();
|
|
61
|
+
const resource = makeDataOnlyResource();
|
|
62
|
+
const first = resolveCanvasImageSource(state, resource);
|
|
63
|
+
invalidateImageResource(resource);
|
|
64
|
+
const second = resolveCanvasImageSource(state, resource);
|
|
65
|
+
expect(second).not.toBe(first);
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
it('caches independently per render state', () => {
|
|
69
|
+
const stateA = makeState();
|
|
70
|
+
const stateB = makeState();
|
|
71
|
+
const resource = makeDataOnlyResource();
|
|
72
|
+
expect(resolveCanvasImageSource(stateA, resource)).not.toBe(resolveCanvasImageSource(stateB, resource));
|
|
73
|
+
});
|
|
74
|
+
|
|
75
|
+
it('returns null when the resource carries neither pixels form', () => {
|
|
76
|
+
const state = makeState();
|
|
77
|
+
expect(resolveCanvasImageSource(state, createImageResource())).toBeNull();
|
|
78
|
+
});
|
|
79
|
+
});
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { CanvasRenderState } from '@flighthq/types';
|
|
2
|
-
import { BlendMode } from '@flighthq/types';
|
|
2
|
+
import { AdvancedBlendMode, BlendMode } from '@flighthq/types';
|
|
3
3
|
|
|
4
4
|
import { applyCanvasBlendMode, enableCanvasBlendMode } from './canvasMaterials';
|
|
5
5
|
import { createCanvasRenderState, getCanvasRenderStateRuntime } from './canvasRenderState';
|
|
@@ -30,13 +30,13 @@ describe('applyCanvasBlendMode', () => {
|
|
|
30
30
|
expect(state.context.globalCompositeOperation).toBe('darken');
|
|
31
31
|
});
|
|
32
32
|
|
|
33
|
-
it('should set globalCompositeOperation to "difference" for
|
|
34
|
-
applyCanvasBlendMode(state,
|
|
33
|
+
it('should set globalCompositeOperation to "difference" for AdvancedBlendMode.Difference', () => {
|
|
34
|
+
applyCanvasBlendMode(state, AdvancedBlendMode.Difference);
|
|
35
35
|
expect(state.context.globalCompositeOperation).toBe('difference');
|
|
36
36
|
});
|
|
37
37
|
|
|
38
|
-
it('should set globalCompositeOperation to "hard-light" for
|
|
39
|
-
applyCanvasBlendMode(state,
|
|
38
|
+
it('should set globalCompositeOperation to "hard-light" for AdvancedBlendMode.HardLight', () => {
|
|
39
|
+
applyCanvasBlendMode(state, AdvancedBlendMode.HardLight);
|
|
40
40
|
expect(state.context.globalCompositeOperation).toBe('hard-light');
|
|
41
41
|
});
|
|
42
42
|
|
|
@@ -50,8 +50,8 @@ describe('applyCanvasBlendMode', () => {
|
|
|
50
50
|
expect(state.context.globalCompositeOperation).toBe('multiply');
|
|
51
51
|
});
|
|
52
52
|
|
|
53
|
-
it('should set globalCompositeOperation to "overlay" for
|
|
54
|
-
applyCanvasBlendMode(state,
|
|
53
|
+
it('should set globalCompositeOperation to "overlay" for AdvancedBlendMode.Overlay', () => {
|
|
54
|
+
applyCanvasBlendMode(state, AdvancedBlendMode.Overlay);
|
|
55
55
|
expect(state.context.globalCompositeOperation).toBe('overlay');
|
|
56
56
|
});
|
|
57
57
|
|
|
@@ -60,11 +60,6 @@ describe('applyCanvasBlendMode', () => {
|
|
|
60
60
|
expect(state.context.globalCompositeOperation).toBe('screen');
|
|
61
61
|
});
|
|
62
62
|
|
|
63
|
-
it('should degrade BlendMode.None to "source-over" (no per-node Canvas2D equivalent)', () => {
|
|
64
|
-
applyCanvasBlendMode(state, BlendMode.None);
|
|
65
|
-
expect(state.context.globalCompositeOperation).toBe('source-over');
|
|
66
|
-
});
|
|
67
|
-
|
|
68
63
|
it('should set globalCompositeOperation to "source-over" for default case', () => {
|
|
69
64
|
applyCanvasBlendMode(state, null);
|
|
70
65
|
expect(state.context.globalCompositeOperation).toBe('source-over');
|
|
@@ -2,39 +2,41 @@ import { createMatrix } from '@flighthq/geometry';
|
|
|
2
2
|
|
|
3
3
|
import { createCanvasRenderState } from './canvasRenderState';
|
|
4
4
|
import {
|
|
5
|
-
|
|
5
|
+
beginCanvasRenderPass,
|
|
6
6
|
createCanvasRenderTarget,
|
|
7
7
|
destroyCanvasRenderTarget,
|
|
8
|
-
|
|
8
|
+
endCanvasRenderPass,
|
|
9
9
|
resizeCanvasRenderTarget,
|
|
10
|
+
setCanvasRenderTransform2D,
|
|
10
11
|
} from './canvasRenderTarget';
|
|
11
12
|
|
|
12
13
|
function makeState() {
|
|
13
14
|
return createCanvasRenderState(document.createElement('canvas'));
|
|
14
15
|
}
|
|
15
16
|
|
|
16
|
-
describe('
|
|
17
|
+
describe('beginCanvasRenderPass', () => {
|
|
17
18
|
it('switches the state canvas to the target canvas', () => {
|
|
18
19
|
const state = makeState();
|
|
19
20
|
const target = createCanvasRenderTarget(64, 48);
|
|
20
|
-
const renderTransform = createMatrix();
|
|
21
21
|
|
|
22
|
-
|
|
22
|
+
beginCanvasRenderPass(state, target);
|
|
23
23
|
|
|
24
24
|
expect(state.canvas).toBe(target.canvas);
|
|
25
25
|
});
|
|
26
26
|
|
|
27
|
-
it('
|
|
27
|
+
it('clears the target by default and preserves it with preserveColor', () => {
|
|
28
28
|
const state = makeState();
|
|
29
29
|
const target = createCanvasRenderTarget(64, 48);
|
|
30
|
-
const
|
|
31
|
-
renderTransform.tx = 10;
|
|
32
|
-
renderTransform.ty = 20;
|
|
30
|
+
const clearRect = vi.spyOn(target.context, 'clearRect');
|
|
33
31
|
|
|
34
|
-
|
|
32
|
+
beginCanvasRenderPass(state, target);
|
|
33
|
+
expect(clearRect).toHaveBeenCalledWith(0, 0, target.width, target.height);
|
|
34
|
+
endCanvasRenderPass(state);
|
|
35
35
|
|
|
36
|
-
|
|
37
|
-
|
|
36
|
+
clearRect.mockClear();
|
|
37
|
+
beginCanvasRenderPass(state, target, { preserveColor: true });
|
|
38
|
+
expect(clearRect).not.toHaveBeenCalled();
|
|
39
|
+
endCanvasRenderPass(state);
|
|
38
40
|
});
|
|
39
41
|
|
|
40
42
|
it('supports nested pairs', () => {
|
|
@@ -43,16 +45,16 @@ describe('beginCanvasRenderTarget', () => {
|
|
|
43
45
|
const targetA = createCanvasRenderTarget(64, 48);
|
|
44
46
|
const targetB = createCanvasRenderTarget(32, 32);
|
|
45
47
|
|
|
46
|
-
|
|
48
|
+
beginCanvasRenderPass(state, targetA);
|
|
47
49
|
expect(state.canvas).toBe(targetA.canvas);
|
|
48
50
|
|
|
49
|
-
|
|
51
|
+
beginCanvasRenderPass(state, targetB);
|
|
50
52
|
expect(state.canvas).toBe(targetB.canvas);
|
|
51
53
|
|
|
52
|
-
|
|
54
|
+
endCanvasRenderPass(state);
|
|
53
55
|
expect(state.canvas).toBe(targetA.canvas);
|
|
54
56
|
|
|
55
|
-
|
|
57
|
+
endCanvasRenderPass(state);
|
|
56
58
|
expect(state.canvas).toBe(outerCanvas);
|
|
57
59
|
});
|
|
58
60
|
});
|
|
@@ -95,49 +97,22 @@ describe('destroyCanvasRenderTarget', () => {
|
|
|
95
97
|
});
|
|
96
98
|
});
|
|
97
99
|
|
|
98
|
-
describe('
|
|
100
|
+
describe('endCanvasRenderPass', () => {
|
|
99
101
|
it('restores the original canvas', () => {
|
|
100
102
|
const state = makeState();
|
|
101
103
|
const originalCanvas = state.canvas;
|
|
102
104
|
const target = createCanvasRenderTarget(64, 48);
|
|
103
105
|
|
|
104
|
-
|
|
105
|
-
|
|
106
|
+
beginCanvasRenderPass(state, target);
|
|
107
|
+
endCanvasRenderPass(state);
|
|
106
108
|
|
|
107
109
|
expect(state.canvas).toBe(originalCanvas);
|
|
108
110
|
});
|
|
109
111
|
|
|
110
|
-
it('restores the original renderTransform2D', () => {
|
|
111
|
-
const state = makeState();
|
|
112
|
-
const originalTx = state.renderTransform2D?.tx ?? 0;
|
|
113
|
-
const target = createCanvasRenderTarget(64, 48);
|
|
114
|
-
const renderTransform = createMatrix();
|
|
115
|
-
renderTransform.tx = 99;
|
|
116
|
-
|
|
117
|
-
beginCanvasRenderTarget(state, target, renderTransform);
|
|
118
|
-
endCanvasRenderTarget(state);
|
|
119
|
-
|
|
120
|
-
expect(state.renderTransform2D?.tx).toBe(originalTx);
|
|
121
|
-
});
|
|
122
|
-
|
|
123
|
-
it('does not mutate the outer renderTransform2D matrix', () => {
|
|
124
|
-
const state = makeState();
|
|
125
|
-
const outerTransform = state.renderTransform2D!;
|
|
126
|
-
const target = createCanvasRenderTarget(64, 48);
|
|
127
|
-
const renderTransform = createMatrix();
|
|
128
|
-
renderTransform.tx = 50;
|
|
129
|
-
|
|
130
|
-
beginCanvasRenderTarget(state, target, renderTransform);
|
|
131
|
-
endCanvasRenderTarget(state);
|
|
132
|
-
|
|
133
|
-
expect(state.renderTransform2D).toBe(outerTransform);
|
|
134
|
-
expect(outerTransform.tx).not.toBe(50);
|
|
135
|
-
});
|
|
136
|
-
|
|
137
112
|
it('without a matching begin is a no-op', () => {
|
|
138
113
|
const state = makeState();
|
|
139
114
|
const original = state.canvas;
|
|
140
|
-
expect(() =>
|
|
115
|
+
expect(() => endCanvasRenderPass(state)).not.toThrow();
|
|
141
116
|
expect(state.canvas).toBe(original);
|
|
142
117
|
});
|
|
143
118
|
});
|
|
@@ -152,3 +127,36 @@ describe('resizeCanvasRenderTarget', () => {
|
|
|
152
127
|
expect(target.height).toBe(128);
|
|
153
128
|
});
|
|
154
129
|
});
|
|
130
|
+
|
|
131
|
+
describe('setCanvasRenderTransform2D', () => {
|
|
132
|
+
it('installs a copy of the transform, restored by the enclosing pass', () => {
|
|
133
|
+
const state = makeState();
|
|
134
|
+
const original = state.renderTransform2D;
|
|
135
|
+
const target = createCanvasRenderTarget(64, 48);
|
|
136
|
+
const transform = createMatrix();
|
|
137
|
+
transform.tx = 99;
|
|
138
|
+
|
|
139
|
+
beginCanvasRenderPass(state, target);
|
|
140
|
+
setCanvasRenderTransform2D(state, transform);
|
|
141
|
+
expect(state.renderTransform2D?.tx).toBe(99);
|
|
142
|
+
expect(state.renderTransform2D).not.toBe(transform);
|
|
143
|
+
endCanvasRenderPass(state);
|
|
144
|
+
|
|
145
|
+
expect(state.renderTransform2D).toBe(original);
|
|
146
|
+
});
|
|
147
|
+
|
|
148
|
+
it('does not mutate the outer transform matrix', () => {
|
|
149
|
+
const state = makeState();
|
|
150
|
+
const outer = state.renderTransform2D!;
|
|
151
|
+
const target = createCanvasRenderTarget(64, 48);
|
|
152
|
+
const transform = createMatrix();
|
|
153
|
+
transform.tx = 50;
|
|
154
|
+
|
|
155
|
+
beginCanvasRenderPass(state, target);
|
|
156
|
+
setCanvasRenderTransform2D(state, transform);
|
|
157
|
+
endCanvasRenderPass(state);
|
|
158
|
+
|
|
159
|
+
expect(state.renderTransform2D).toBe(outer);
|
|
160
|
+
expect(outer.tx).not.toBe(50);
|
|
161
|
+
});
|
|
162
|
+
});
|