@flighthq/displayobject-canvas 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/canvasBackground.d.ts +3 -0
- package/dist/canvasBackground.d.ts.map +1 -0
- package/dist/canvasBackground.js +19 -0
- package/dist/canvasBackground.js.map +1 -0
- package/dist/canvasBitmap.d.ts +4 -0
- package/dist/canvasBitmap.d.ts.map +1 -0
- package/dist/canvasBitmap.js +32 -0
- package/dist/canvasBitmap.js.map +1 -0
- package/dist/canvasCSSFilterBinding.d.ts +24 -0
- package/dist/canvasCSSFilterBinding.d.ts.map +1 -0
- package/dist/canvasCSSFilterBinding.js +43 -0
- package/dist/canvasCSSFilterBinding.js.map +1 -0
- package/dist/canvasCache.d.ts +33 -0
- package/dist/canvasCache.d.ts.map +1 -0
- package/dist/canvasCache.js +141 -0
- package/dist/canvasCache.js.map +1 -0
- package/dist/canvasClip.d.ts +3 -0
- package/dist/canvasClip.d.ts.map +1 -0
- package/dist/canvasClip.js +38 -0
- package/dist/canvasClip.js.map +1 -0
- package/dist/canvasClipRectangle.d.ts +5 -0
- package/dist/canvasClipRectangle.d.ts.map +1 -0
- package/dist/canvasClipRectangle.js +31 -0
- package/dist/canvasClipRectangle.js.map +1 -0
- package/dist/canvasDisplayObject.d.ts +5 -0
- package/dist/canvasDisplayObject.d.ts.map +1 -0
- package/dist/canvasDisplayObject.js +46 -0
- package/dist/canvasDisplayObject.js.map +1 -0
- package/dist/canvasElement.d.ts +2 -0
- package/dist/canvasElement.d.ts.map +1 -0
- package/dist/canvasElement.js +9 -0
- package/dist/canvasElement.js.map +1 -0
- package/dist/canvasFillPattern.d.ts +4 -0
- package/dist/canvasFillPattern.d.ts.map +1 -0
- package/dist/canvasFillPattern.js +108 -0
- package/dist/canvasFillPattern.js.map +1 -0
- package/dist/canvasMaterialRegistry.d.ts +6 -0
- package/dist/canvasMaterialRegistry.d.ts.map +1 -0
- package/dist/canvasMaterialRegistry.js +42 -0
- package/dist/canvasMaterialRegistry.js.map +1 -0
- package/dist/canvasMaterials.d.ts +5 -0
- package/dist/canvasMaterials.d.ts.map +1 -0
- package/dist/canvasMaterials.js +33 -0
- package/dist/canvasMaterials.js.map +1 -0
- package/dist/canvasParticleEmitter.d.ts +4 -0
- package/dist/canvasParticleEmitter.d.ts.map +1 -0
- package/dist/canvasParticleEmitter.js +64 -0
- package/dist/canvasParticleEmitter.js.map +1 -0
- package/dist/canvasQuadBatch.d.ts +4 -0
- package/dist/canvasQuadBatch.d.ts.map +1 -0
- package/dist/canvasQuadBatch.js +64 -0
- package/dist/canvasQuadBatch.js.map +1 -0
- package/dist/canvasRegistration.d.ts +4 -0
- package/dist/canvasRegistration.d.ts.map +1 -0
- package/dist/canvasRegistration.js +39 -0
- package/dist/canvasRegistration.js.map +1 -0
- package/dist/canvasRenderState.d.ts +5 -0
- package/dist/canvasRenderState.d.ts.map +1 -0
- package/dist/canvasRenderState.js +44 -0
- package/dist/canvasRenderState.js.map +1 -0
- package/dist/canvasRenderTarget.d.ts +16 -0
- package/dist/canvasRenderTarget.d.ts.map +1 -0
- package/dist/canvasRenderTarget.js +66 -0
- package/dist/canvasRenderTarget.js.map +1 -0
- package/dist/canvasRichText.d.ts +7 -0
- package/dist/canvasRichText.d.ts.map +1 -0
- package/dist/canvasRichText.js +127 -0
- package/dist/canvasRichText.js.map +1 -0
- package/dist/canvasScale9Mapper.d.ts +10 -0
- package/dist/canvasScale9Mapper.d.ts.map +1 -0
- package/dist/canvasScale9Mapper.js +148 -0
- package/dist/canvasScale9Mapper.js.map +1 -0
- package/dist/canvasScale9Shape.d.ts +5 -0
- package/dist/canvasScale9Shape.d.ts.map +1 -0
- package/dist/canvasScale9Shape.js +156 -0
- package/dist/canvasScale9Shape.js.map +1 -0
- package/dist/canvasShape.d.ts +5 -0
- package/dist/canvasShape.d.ts.map +1 -0
- package/dist/canvasShape.js +79 -0
- package/dist/canvasShape.js.map +1 -0
- package/dist/canvasShapeCommands.d.ts +19 -0
- package/dist/canvasShapeCommands.d.ts.map +1 -0
- package/dist/canvasShapeCommands.js +352 -0
- package/dist/canvasShapeCommands.js.map +1 -0
- package/dist/canvasShapeRegistry.d.ts +5 -0
- package/dist/canvasShapeRegistry.d.ts.map +1 -0
- package/dist/canvasShapeRegistry.js +17 -0
- package/dist/canvasShapeRegistry.js.map +1 -0
- package/dist/canvasSprite.d.ts +5 -0
- package/dist/canvasSprite.d.ts.map +1 -0
- package/dist/canvasSprite.js +59 -0
- package/dist/canvasSprite.js.map +1 -0
- package/dist/canvasTextInput.d.ts +4 -0
- package/dist/canvasTextInput.d.ts.map +1 -0
- package/dist/canvasTextInput.js +67 -0
- package/dist/canvasTextInput.js.map +1 -0
- package/dist/canvasTextLabel.d.ts +4 -0
- package/dist/canvasTextLabel.d.ts.map +1 -0
- package/dist/canvasTextLabel.js +55 -0
- package/dist/canvasTextLabel.js.map +1 -0
- package/dist/canvasTextMeasure.d.ts +3 -0
- package/dist/canvasTextMeasure.d.ts.map +1 -0
- package/dist/canvasTextMeasure.js +15 -0
- package/dist/canvasTextMeasure.js.map +1 -0
- package/dist/canvasTilemap.d.ts +4 -0
- package/dist/canvasTilemap.d.ts.map +1 -0
- package/dist/canvasTilemap.js +50 -0
- package/dist/canvasTilemap.js.map +1 -0
- package/dist/canvasTransform.d.ts +3 -0
- package/dist/canvasTransform.d.ts.map +1 -0
- package/dist/canvasTransform.js +9 -0
- package/dist/canvasTransform.js.map +1 -0
- package/dist/canvasVideo.d.ts +4 -0
- package/dist/canvasVideo.d.ts.map +1 -0
- package/dist/canvasVideo.js +26 -0
- package/dist/canvasVideo.js.map +1 -0
- package/dist/index.d.ts +30 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +30 -0
- package/dist/index.js.map +1 -0
- package/package.json +50 -0
- package/src/canvasBackground.test.ts +65 -0
- package/src/canvasBitmap.test.ts +92 -0
- package/src/canvasCSSFilterBinding.test.ts +86 -0
- package/src/canvasCache.test.ts +189 -0
- package/src/canvasClip.test.ts +12 -0
- package/src/canvasClipRectangle.test.ts +101 -0
- package/src/canvasDisplayObject.test.ts +117 -0
- package/src/canvasElement.test.ts +21 -0
- package/src/canvasFillPattern.test.ts +96 -0
- package/src/canvasMaterialRegistry.test.ts +69 -0
- package/src/canvasMaterials.test.ts +85 -0
- package/src/canvasParticleEmitter.test.ts +105 -0
- package/src/canvasQuadBatch.test.ts +119 -0
- package/src/canvasRegistration.test.ts +57 -0
- package/src/canvasRenderState.test.ts +186 -0
- package/src/canvasRenderTarget.test.ts +154 -0
- package/src/canvasRichText.test.ts +89 -0
- package/src/canvasScale9Mapper.test.ts +53 -0
- package/src/canvasScale9Shape.test.ts +89 -0
- package/src/canvasShape.test.ts +183 -0
- package/src/canvasShapeCommands.test.ts +448 -0
- package/src/canvasShapeRegistry.test.ts +42 -0
- package/src/canvasSprite.test.ts +90 -0
- package/src/canvasTextInput.test.ts +67 -0
- package/src/canvasTextLabel.test.ts +32 -0
- package/src/canvasTextMeasure.test.ts +9 -0
- package/src/canvasTilemap.test.ts +69 -0
- package/src/canvasTransform.test.ts +42 -0
- package/src/canvasVideo.test.ts +43 -0
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { createImageResource } from '@flighthq/image';
|
|
2
|
+
import { getOrCreateRenderProxy2D, prepareDisplayObjectRender } from '@flighthq/render';
|
|
3
|
+
import { createTilemap, setTilemapTile } from '@flighthq/sprite';
|
|
4
|
+
import { addTextureAtlasRegion, createTextureAtlas } from '@flighthq/textureatlas';
|
|
5
|
+
import { buildTilesetRegions, createTileset } from '@flighthq/tileset';
|
|
6
|
+
|
|
7
|
+
import { createCanvasRenderState } from './canvasRenderState';
|
|
8
|
+
import { drawCanvasTilemap } from './canvasTilemap';
|
|
9
|
+
|
|
10
|
+
function makeState() {
|
|
11
|
+
const canvas = document.createElement('canvas');
|
|
12
|
+
canvas.width = 400;
|
|
13
|
+
canvas.height = 400;
|
|
14
|
+
return createCanvasRenderState(canvas);
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
function makeTilesetAtlas(tileWidth = 32, tileHeight = 32, cols = 2, rows = 1) {
|
|
18
|
+
const img = document.createElement('img') as HTMLImageElement;
|
|
19
|
+
const source = createImageResource(img);
|
|
20
|
+
source.width = tileWidth * cols;
|
|
21
|
+
source.height = tileHeight * rows;
|
|
22
|
+
const atlas = createTextureAtlas({ image: source });
|
|
23
|
+
for (let r = 0; r < rows; r++) {
|
|
24
|
+
for (let c = 0; c < cols; c++) {
|
|
25
|
+
addTextureAtlasRegion(atlas, c * tileWidth, r * tileHeight, tileWidth, tileHeight);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
const tileset = createTileset({ atlas, tileWidth, tileHeight, columns: cols, rows });
|
|
29
|
+
buildTilesetRegions(tileset);
|
|
30
|
+
return tileset;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
describe('drawCanvasTilemap', () => {
|
|
34
|
+
it('does not draw when tileset is null', () => {
|
|
35
|
+
const state = makeState();
|
|
36
|
+
const tilemap = createTilemap();
|
|
37
|
+
prepareDisplayObjectRender(state, tilemap);
|
|
38
|
+
const renderProxy = getOrCreateRenderProxy2D(state, tilemap);
|
|
39
|
+
const spy = vi.spyOn(state.context, 'drawImage');
|
|
40
|
+
drawCanvasTilemap(state, renderProxy);
|
|
41
|
+
expect(spy).not.toHaveBeenCalled();
|
|
42
|
+
});
|
|
43
|
+
|
|
44
|
+
it('draws each non-empty tile with drawImage', () => {
|
|
45
|
+
const state = makeState();
|
|
46
|
+
const tileset = makeTilesetAtlas(32, 32, 2, 1);
|
|
47
|
+
const tilemap = createTilemap({ data: { columns: 2, rows: 1, tileset } });
|
|
48
|
+
setTilemapTile(tilemap, 0, 0, 0);
|
|
49
|
+
setTilemapTile(tilemap, 1, 0, 1);
|
|
50
|
+
prepareDisplayObjectRender(state, tilemap);
|
|
51
|
+
const renderProxy = getOrCreateRenderProxy2D(state, tilemap);
|
|
52
|
+
const spy = vi.spyOn(state.context, 'drawImage');
|
|
53
|
+
drawCanvasTilemap(state, renderProxy);
|
|
54
|
+
expect(spy).toHaveBeenCalledTimes(2);
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
it('skips cells with id -1', () => {
|
|
58
|
+
const state = makeState();
|
|
59
|
+
const tileset = makeTilesetAtlas(32, 32, 2, 1);
|
|
60
|
+
const tilemap = createTilemap({ data: { columns: 2, rows: 1, tileset } });
|
|
61
|
+
setTilemapTile(tilemap, 0, 0, 0);
|
|
62
|
+
// cell (1,0) remains -1
|
|
63
|
+
prepareDisplayObjectRender(state, tilemap);
|
|
64
|
+
const renderProxy = getOrCreateRenderProxy2D(state, tilemap);
|
|
65
|
+
const spy = vi.spyOn(state.context, 'drawImage');
|
|
66
|
+
drawCanvasTilemap(state, renderProxy);
|
|
67
|
+
expect(spy).toHaveBeenCalledTimes(1);
|
|
68
|
+
});
|
|
69
|
+
});
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { createMatrix } from '@flighthq/geometry';
|
|
2
|
+
import type { CanvasRenderState, Matrix } from '@flighthq/types';
|
|
3
|
+
|
|
4
|
+
import { createCanvasRenderState } from './canvasRenderState';
|
|
5
|
+
import { setCanvasTransform } from './canvasTransform';
|
|
6
|
+
|
|
7
|
+
describe('setCanvasTransform', () => {
|
|
8
|
+
let canvas: HTMLCanvasElement;
|
|
9
|
+
let state: CanvasRenderState;
|
|
10
|
+
let transform: Matrix;
|
|
11
|
+
|
|
12
|
+
beforeEach(() => {
|
|
13
|
+
canvas = document.createElement('canvas');
|
|
14
|
+
state = createCanvasRenderState(canvas);
|
|
15
|
+
transform = createMatrix(1, 2, 3, 4, 5.6789, 9.1011);
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
it('should call setTransform with correct values when roundPixels is false', () => {
|
|
19
|
+
setCanvasTransform(state, state.context, transform);
|
|
20
|
+
expect(state.context.setTransform).toHaveBeenCalledWith(
|
|
21
|
+
transform.a,
|
|
22
|
+
transform.b,
|
|
23
|
+
transform.c,
|
|
24
|
+
transform.d,
|
|
25
|
+
transform.tx,
|
|
26
|
+
transform.ty,
|
|
27
|
+
);
|
|
28
|
+
});
|
|
29
|
+
|
|
30
|
+
it('should call setTransform with frounded tx and ty when roundPixels is true', () => {
|
|
31
|
+
state.roundPixels = true;
|
|
32
|
+
setCanvasTransform(state, state.context, transform);
|
|
33
|
+
expect(state.context.setTransform).toHaveBeenCalledWith(
|
|
34
|
+
transform.a,
|
|
35
|
+
transform.b,
|
|
36
|
+
transform.c,
|
|
37
|
+
transform.d,
|
|
38
|
+
Math.fround(transform.tx),
|
|
39
|
+
Math.fround(transform.ty),
|
|
40
|
+
);
|
|
41
|
+
});
|
|
42
|
+
});
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { createVideo } from '@flighthq/displayobject';
|
|
2
|
+
import { registerRenderer } from '@flighthq/render';
|
|
3
|
+
import { getOrCreateRenderProxy2D } from '@flighthq/render';
|
|
4
|
+
import { VideoKind } from '@flighthq/types';
|
|
5
|
+
|
|
6
|
+
import { createCanvasRenderState } from './canvasRenderState';
|
|
7
|
+
import { defaultCanvasVideoRenderer, drawCanvasVideo } from './canvasVideo';
|
|
8
|
+
|
|
9
|
+
function makeState() {
|
|
10
|
+
const canvas = document.createElement('canvas');
|
|
11
|
+
canvas.width = 200;
|
|
12
|
+
canvas.height = 200;
|
|
13
|
+
const state = createCanvasRenderState(canvas);
|
|
14
|
+
registerRenderer(state, VideoKind, defaultCanvasVideoRenderer);
|
|
15
|
+
return state;
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
describe('defaultCanvasVideoRenderer', () => {
|
|
19
|
+
it('has submit, and createData functions', () => {
|
|
20
|
+
expect(typeof defaultCanvasVideoRenderer.submit).toBe('function');
|
|
21
|
+
expect(typeof defaultCanvasVideoRenderer.createData).toBe('function');
|
|
22
|
+
});
|
|
23
|
+
});
|
|
24
|
+
|
|
25
|
+
describe('drawCanvasVideo', () => {
|
|
26
|
+
it('does not throw when source is null', () => {
|
|
27
|
+
const state = makeState();
|
|
28
|
+
const video = createVideo();
|
|
29
|
+
const renderProxy = getOrCreateRenderProxy2D(state, video);
|
|
30
|
+
expect(() => drawCanvasVideo(state, renderProxy)).not.toThrow();
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
it('skips drawImage when element has not loaded', () => {
|
|
34
|
+
const state = makeState();
|
|
35
|
+
const video = createVideo();
|
|
36
|
+
const el = document.createElement('video');
|
|
37
|
+
video.data.source = { element: el } as never;
|
|
38
|
+
const renderProxy = getOrCreateRenderProxy2D(state, video);
|
|
39
|
+
const spy = vi.spyOn(state.context, 'drawImage');
|
|
40
|
+
drawCanvasVideo(state, renderProxy);
|
|
41
|
+
expect(spy).not.toHaveBeenCalled();
|
|
42
|
+
});
|
|
43
|
+
});
|