Skip to content

Commit 2259cc5

Browse files
authored
Merge pull request #50 from diffusionstudio/konstantin/feat/resize
added resize method
2 parents ffa6b7b + 69bbbcb commit 2259cc5

File tree

5 files changed

+49
-2
lines changed

5 files changed

+49
-2
lines changed

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "@diffusionstudio/core",
33
"private": false,
4-
"version": "1.3.0",
4+
"version": "1.4.0",
55
"type": "module",
66
"description": "Build bleeding edge video processing applications",
77
"files": [

src/composition/composition.spec.ts

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -454,6 +454,31 @@ describe('The composition', () => {
454454
expect(computeMock).toBeCalledTimes(5);
455455
});
456456

457+
it('should be able to resize the canvas', () => {
458+
const div = document.createElement('div');
459+
composition.attachPlayer(div);
460+
461+
const resizeMock = vi.spyOn(composition.renderer!, 'resize');
462+
const resizeFn = vi.fn();
463+
composition.on('resize', resizeFn);
464+
465+
expect(composition.settings.width).toBe(1920);
466+
expect(composition.settings.height).toBe(1080);
467+
expect(composition.canvas?.width).toBe(1920);
468+
expect(composition.canvas?.height).toBe(1080);
469+
470+
computeMock.mockClear();
471+
composition.resize(100, 100);
472+
473+
expect(composition.settings.width).toBe(100);
474+
expect(composition.settings.height).toBe(100);
475+
expect(composition.canvas?.width).toBe(100);
476+
expect(composition.canvas?.height).toBe(100);
477+
expect(resizeMock).toBeCalledTimes(1);
478+
expect(computeMock).toBeCalledTimes(1);
479+
expect(resizeFn).toBeCalledTimes(1);
480+
});
481+
457482
afterEach(() => {
458483
frameMock.mockClear();
459484
playMock.mockClear();

src/composition/composition.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -167,6 +167,20 @@ export class Composition extends EventEmitterMixin<CompositionEvents, typeof Ser
167167
this.trigger('frame', this.fixedDuration?.frames ?? 0);
168168
}
169169

170+
public resize(width: number, height: number) {
171+
this.settings.width = width;
172+
this.settings.height = height;
173+
this.renderer?.resize(width, height);
174+
175+
if (this.canvas) {
176+
this.canvas.height = height;
177+
this.canvas.width = width;
178+
}
179+
180+
this.trigger('resize', undefined);
181+
this.computeFrame();
182+
}
183+
170184
/**
171185
* Set the player as a child of the given html div element
172186
*/

src/composition/composition.types.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ export type CompositionEvents = {
5454
attach: undefined;
5555
detach: undefined;
5656
load: undefined;
57+
resize: undefined;
5758
};
5859

5960
export type CompositionState = 'IDLE' | 'RENDER' | 'PLAY';

vitest.setup.ts

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ Object.assign(globalThis, {
2323
});
2424
vi.mock('pixi.js', async (importOriginal) => {
2525
class Renderer {
26+
private _canvas = document.createElement('canvas');
27+
2628
height: undefined | number;
2729
width: undefined | number;
2830

@@ -32,7 +34,12 @@ vi.mock('pixi.js', async (importOriginal) => {
3234
}
3335

3436
get canvas() {
35-
return document.createElement('canvas');
37+
return this._canvas;
38+
}
39+
40+
resize(width: number, height: number) {
41+
this._canvas.width = width;
42+
this._canvas.height = height;
3643
}
3744

3845
render = vi.fn();

0 commit comments

Comments
 (0)