@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.
@@ -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;AAKvG,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,iBAAiB,EAAE,MAAM,EAAE,aAAa,GAAG,IAAI,CAsCtF;AAED,eAAO,MAAM,2BAA2B,EAAE,qBAGzC,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"}
@@ -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
- if (imageSource !== null && imageSource.source !== null) {
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(imageSource.source, 0, 0, imageSource.width, imageSource.height);
22
+ context.drawImage(drawable, 0, 0, imageSource.width, imageSource.height);
19
23
  }
20
24
  else {
21
- context.drawImage(imageSource.source, sourceRectangle.x, sourceRectangle.y, sourceRectangle.width, sourceRectangle.height, 0, 0, sourceRectangle.width, sourceRectangle.height);
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;
@@ -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,IAAI,WAAW,KAAK,IAAI,IAAI,WAAW,CAAC,MAAM,KAAK,IAAI,EAAE,CAAC;QACxD,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,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,WAAW,CAAC,KAAK,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;QACrF,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,SAAS,CACf,WAAW,CAAC,MAAM,EAClB,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"}
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"}
@@ -1,9 +1,9 @@
1
- import { copyMatrix, createMatrix, createRectangle } from '@flighthq/geometry';
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
- copyMatrix(handles.renderTransform2D, _renderTransform);
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);
@@ -1 +1 @@
1
- {"version":3,"file":"canvasCache.js","sourceRoot":"","sources":["../src/canvasCache.ts"],"names":[],"mappings":"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"}
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,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AA4B5C,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"}
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"}
@@ -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
- [BlendMode.Shader]: null,
24
- [BlendMode.Subtract]: null,
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;AAE5C,OAAO,EAAE,2BAA2B,EAAE,MAAM,qBAAqB,CAAC;AAElE,kFAAkF;AAClF,kFAAkF;AAClF,uDAAuD;AACvD,MAAM,iBAAiB,GAAuD;IAC5E,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,SAAS;IAC1B,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,gBAAgB;IACnC,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,QAAQ;IAC5B,CAAC,SAAS,CAAC,UAAU,CAAC,EAAE,YAAY;IACpC,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,iBAAiB;IACpC,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,YAAY;IACnC,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,IAAI;IACxB,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,aAAa;IAChC,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,SAAS;IAC9B,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,UAAU;IAChC,iGAAiG;IACjG,8FAA8F;IAC9F,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,IAAI;IACtB,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,aAAa;IACjC,CAAC,SAAS,CAAC,OAAO,CAAC,EAAE,SAAS;IAC9B,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,QAAQ;IAC5B,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,IAAI;IACxB,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,IAAI;CAC3B,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
+ {"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
- * Redirects subsequent canvas rendering into `target`. Saves the state's current
4
- * canvas, context, and renderTransform2D so they can be fully restored by
5
- * `endCanvasRenderTarget`. Supports nesting each begin/end pair is independent.
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 beginCanvasRenderTarget(state: CanvasRenderState, target: CanvasRenderTarget, renderTransform: Readonly<Matrix>): void;
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
- * Restores the canvas, context, and renderTransform2D saved by the matching
12
- * `beginCanvasRenderTarget` call.
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 endCanvasRenderTarget(state: CanvasRenderState): void;
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;AAoBrF;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,iBAAiB,EACxB,MAAM,EAAE,kBAAkB,EAC1B,eAAe,EAAE,QAAQ,CAAC,MAAM,CAAC,GAChC,IAAI,CA0BN;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,qBAAqB,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAOpE;AAED,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,kBAAkB,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,IAAI,CAKxG"}
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
- * Redirects subsequent canvas rendering into `target`. Saves the state's current
6
- * canvas, context, and renderTransform2D so they can be fully restored by
7
- * `endCanvasRenderTarget`. Supports nesting each begin/end pair is independent.
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 beginCanvasRenderTarget(state, target, renderTransform) {
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
- // Always create a new matrix for this target so restoring the saved reference
27
- // on end leaves the outer renderTransform2D unmodified.
28
- const newTransform = createMatrix();
29
- copyMatrix(newTransform, renderTransform);
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
- * Restores the canvas, context, and renderTransform2D saved by the matching
49
- * `beginCanvasRenderTarget` call.
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 endCanvasRenderTarget(state) {
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":"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"}
1
+ {"version":3,"file":"canvasRenderTarget.js","sourceRoot":"","sources":["../src/canvasRenderTarget.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { computeRgbHexString } from '@flighthq/materials';
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":"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"}
1
+ {"version":3,"file":"canvasRichText.js","sourceRoot":"","sources":["../src/canvasRichText.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAE,2BAA2B,EAAE,4BAA4B,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAC;AAC/G,OAAO,EACL,sBAAsB,EACtB,uBAAuB,EACvB,sBAAsB,EACtB,iBAAiB,EACjB,kBAAkB,EAClB,wBAAwB,EACxB,8BAA8B,EAC9B,mBAAmB,GACpB,MAAM,sBAAsB,CAAC;AAY9B,OAAO,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD,MAAM,UAAU,kBAAkB,CAAC,KAAwB,EAAE,WAA0B;IACrF,uBAAuB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IAC5C,gGAAgG;IAChG,oGAAoG;IACpG,mGAAmG;IACnG,8DAA8D;IAC9D,IAAI,uBAAuB,KAAK,IAAI,IAAI,kBAAkB,CAAC,WAAW,CAAC,MAAkB,CAAC,CAAC,KAAK,KAAK,IAAI,EAAE,CAAC;QAC1G,uBAAuB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IAC9C,CAAC;AACH,CAAC;AAID,MAAM,UAAU,sBAAsB,CAAC,KAAwB,EAAE,IAAmB;IAClF,uBAAuB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AACvC,CAAC;AAED,SAAS,uBAAuB,CAAC,KAAwB,EAAE,WAA0B;IACnF,uBAAuB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;IAE5C,MAAM,MAAM,GAAG,WAAW,CAAC,MAAkB,CAAC;IAC9C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;IACzB,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC;IAC9B,KAAK,CAAC,cAAc,EAAE,CAAC,KAAK,EAAE,WAAW,CAAC,SAAS,CAAC,CAAC;IACrD,OAAO,CAAC,WAAW,GAAG,WAAW,CAAC,KAAK,CAAC;IACxC,kBAAkB,CAAC,KAAK,EAAE,OAAO,EAAE,WAAW,CAAC,WAAW,CAAC,CAAC;IAE5D,MAAM,eAAe,GAAG,kBAAkB,CAAC,MAAM,CAAoB,CAAC;IACtE,MAAM,OAAO,GAAG,kBAAkB,CAAC,eAAe,CAAC,CAAC;IACpD,sBAAsB,CAAC,OAAO,EAAE,IAAI,EAAE,4BAA4B,CAAC,MAAM,CAAC,CAAC,CAAC;IAC5E,MAAM,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC;IAEzB,MAAM,OAAO,GAAG,CAAC,CAAS,EAAE,GAAe,EAAU,EAAE;QACrD,OAAO,CAAC,IAAI,GAAG,2BAA2B,CAAC,GAAG,CAAC,CAAC;QAChD,OAAO,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;IACtC,CAAC,CAAC;IAEF,MAAM,MAAM,GAAG,mBAAmB,CAAC,eAAmC,CAAC,CAAC;IACxE,iBAAiB,CAAC,MAAM,EAAE;QACxB,IAAI;QACJ,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,MAAM,EAAE,IAAI,CAAC,MAAM;QACnB,OAAO;QACP,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,aAAa,EAAE,IAAI,CAAC,QAAQ,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK;QACpE,QAAQ,EAAE,IAAI,CAAC,QAAQ;KACxB,CAAC,CAAC;IACH,MAAM,MAAM,GAAG,sBAAsB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACpD,MAAM,MAAM,GAAG,uBAAuB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAErD,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,OAAO,CAAC,SAAS,GAAG,mBAAmB,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC9D,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;QAChB,OAAO,CAAC,WAAW,GAAG,mBAAmB,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;QAC5D,OAAO,CAAC,SAAS,GAAG,CAAC,CAAC;QACtB,OAAO,CAAC,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC3C,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAE9B,6DAA6D;IAC7D,MAAM,gBAAgB,GAAG,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;IAC1C,MAAM,aAAa,GAAG,gBAAgB,GAAG,CAAC,CAAC,CAAC,CAAC,wBAAwB,CAAC,MAAM,CAAC,WAAW,EAAE,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAChH,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC;IAEnC,OAAO,CAAC,IAAI,EAAE,CAAC;IACf,OAAO,CAAC,SAAS,EAAE,CAAC;IACpB,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IACnC,OAAO,CAAC,IAAI,EAAE,CAAC;IAEf,IAAI,MAAM,CAAC,IAAI,CAAC,UAAU,IAAI,eAAe,CAAC,mBAAmB,KAAK,eAAe,CAAC,iBAAiB,EAAE,CAAC;QACxG,8BAA8B,CAC5B,4BAA4B,EAC5B,eAAe,CAAC,mBAAmB,EACnC,eAAe,CAAC,iBAAiB,EACjC,MAAM,CACP,CAAC;QACF,OAAO,CAAC,SAAS,GAAG,eAAe,CAAC;QACpC,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,CAAC,KAAK,GAAG,eAAe,CAAC,CAAC;QACvE,KAAK,MAAM,SAAS,IAAI,4BAA4B,EAAE,CAAC;YACrD,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,GAAG,aAAa,EAAE,SAAS,CAAC,CAAC,GAAG,aAAa,EAAE,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,CAAC;QAChH,CAAC;QACD,OAAO,CAAC,WAAW,GAAG,WAAW,CAAC,KAAK,CAAC;IAC1C,CAAC;IAED,OAAO,CAAC,YAAY,GAAG,YAAY,CAAC;IACpC,OAAO,CAAC,SAAS,GAAG,OAAO,CAAC;IAE5B,MAAM,WAAW,GAAG,IAAI,GAAG,EAAU,CAAC;IACtC,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClC,IAAI,KAAK,CAAC,SAAS,GAAG,gBAAgB;YAAE,SAAS;QAEjD,OAAO,CAAC,IAAI,GAAG,2BAA2B,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QACzD,OAAO,CAAC,SAAS,GAAG,mBAAmB,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC;QAC9E,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;QAC/D,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,GAAG,aAAa,CAAC;QACxC,MAAM,CAAC,GAAG,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,MAAM,GAAG,aAAa,CAAC;QAEvD,IAAI,KAAK,CAAC,MAAM,CAAC,MAAM,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;YAC7D,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;YACjC,MAAM,OAAO,GAAG,OAAO,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC;YACvD,OAAO,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,GAAG,OAAO,GAAG,UAAU,EAAE,CAAC,CAAC,CAAC;QAC7D,CAAC;QAED,OAAO,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAE9B,MAAM,SAAS,GAAG,mBAAmB,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC;QAC5E,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;QAC9D,IAAI,KAAK,CAAC,MAAM,CAAC,SAAS,IAAI,KAAK,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;YACzD,OAAO,CAAC,WAAW,GAAG,SAAS,CAAC;YAChC,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;YAC9B,IAAI,KAAK,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;gBAC3B,OAAO,CAAC,SAAS,EAAE,CAAC;gBACpB,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;gBACrC,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC;gBACnD,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,CAAC;YACD,IAAI,KAAK,CAAC,MAAM,CAAC,aAAa,EAAE,CAAC;gBAC/B,OAAO,CAAC,SAAS,EAAE,CAAC;gBACpB,OAAO,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;gBAC3C,OAAO,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC;gBACzD,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,CAAC,OAAO,EAAE,CAAC;AACpB,CAAC;AAED,MAAM,UAAU,8BAA8B,CAAC,OAA+B;IAC5E,uBAAuB,GAAG,OAAO,CAAC;AACpC,CAAC;AAED,MAAM,WAAW,GAAG,SAAS,CAAC;AAC9B,MAAM,UAAU,GAAG,CAAC,CAAC;AACrB,MAAM,eAAe,GAAG,IAAI,CAAC;AAC7B,MAAM,eAAe,GAAG,SAAS,CAAC;AAClC,MAAM,4BAA4B,GAA6B,EAAE,CAAC;AAClE,IAAI,uBAAuB,GAAkC,IAAI,CAAC;AAElE,MAAM,CAAC,MAAM,6BAA6B,GAA0B;IAClE,UAAU,EAAE,gBAAgB;IAC5B,MAAM,EAAE,kBAAkB;CAC3B,CAAC"}
@@ -1,4 +1,4 @@
1
- import { computeRgbHexString } from '@flighthq/materials';
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":"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"}
1
+ {"version":3,"file":"canvasTextInput.js","sourceRoot":"","sources":["../src/canvasTextInput.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import { computeRgbHexString } from '@flighthq/materials';
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":"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"}
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';
@@ -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.0",
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/displayobject": "0.2.0",
36
- "@flighthq/geometry": "0.2.0",
37
- "@flighthq/materials": "0.2.0",
38
- "@flighthq/node": "0.2.0",
39
- "@flighthq/render": "0.2.0",
40
- "@flighthq/image": "0.2.0",
41
- "@flighthq/textureatlas": "0.2.0",
42
- "@flighthq/tileset": "0.2.0",
43
- "@flighthq/shape": "0.2.0",
44
- "@flighthq/text": "0.2.0",
45
- "@flighthq/textinput": "0.2.0",
46
- "@flighthq/textlayout": "0.2.0",
47
- "@flighthq/types": "0.2.0"
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 BlendMode.Difference', () => {
34
- applyCanvasBlendMode(state, BlendMode.Difference);
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 BlendMode.HardLight', () => {
39
- applyCanvasBlendMode(state, BlendMode.HardLight);
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 BlendMode.Overlay', () => {
54
- applyCanvasBlendMode(state, BlendMode.Overlay);
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
- beginCanvasRenderTarget,
5
+ beginCanvasRenderPass,
6
6
  createCanvasRenderTarget,
7
7
  destroyCanvasRenderTarget,
8
- endCanvasRenderTarget,
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('beginCanvasRenderTarget', () => {
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
- beginCanvasRenderTarget(state, target, renderTransform);
22
+ beginCanvasRenderPass(state, target);
23
23
 
24
24
  expect(state.canvas).toBe(target.canvas);
25
25
  });
26
26
 
27
- it('sets renderTransform2D to the provided transform', () => {
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 renderTransform = createMatrix();
31
- renderTransform.tx = 10;
32
- renderTransform.ty = 20;
30
+ const clearRect = vi.spyOn(target.context, 'clearRect');
33
31
 
34
- beginCanvasRenderTarget(state, target, renderTransform);
32
+ beginCanvasRenderPass(state, target);
33
+ expect(clearRect).toHaveBeenCalledWith(0, 0, target.width, target.height);
34
+ endCanvasRenderPass(state);
35
35
 
36
- expect(state.renderTransform2D!.tx).toBe(10);
37
- expect(state.renderTransform2D!.ty).toBe(20);
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
- beginCanvasRenderTarget(state, targetA, createMatrix());
48
+ beginCanvasRenderPass(state, targetA);
47
49
  expect(state.canvas).toBe(targetA.canvas);
48
50
 
49
- beginCanvasRenderTarget(state, targetB, createMatrix());
51
+ beginCanvasRenderPass(state, targetB);
50
52
  expect(state.canvas).toBe(targetB.canvas);
51
53
 
52
- endCanvasRenderTarget(state);
54
+ endCanvasRenderPass(state);
53
55
  expect(state.canvas).toBe(targetA.canvas);
54
56
 
55
- endCanvasRenderTarget(state);
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('endCanvasRenderTarget', () => {
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
- beginCanvasRenderTarget(state, target, createMatrix());
105
- endCanvasRenderTarget(state);
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(() => endCanvasRenderTarget(state)).not.toThrow();
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
+ });