diff --git a/package.json b/package.json index f3b401b..d428f4d 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "@diffusionstudio/core", "private": false, - "version": "1.0.0", + "version": "1.0.1", "type": "module", "description": "Build bleeding edge video processing applications", "files": [ diff --git a/src/tracks/track/track.spec.ts b/src/tracks/track/track.spec.ts index de91d74..72079ca 100644 --- a/src/tracks/track/track.spec.ts +++ b/src/tracks/track/track.spec.ts @@ -448,6 +448,32 @@ describe('The Track Object', () => { expect(updateFn).toHaveBeenCalledTimes(1); expect(exitFn).toHaveBeenCalledTimes(1); }); + + it('should remove the visible clip when disabled changes', async () => { + const clip = await track.add(new Clip()); + + const exitSpy = vi.spyOn(clip, 'exit'); + const computeFrameSpy = vi.spyOn(comp, 'computeFrame'); + expect(updateMock).toBeCalledTimes(0); + expect(computeFrameSpy).toBeCalledTimes(0); + expect(track.disabled).toBe(false); + expect(track.view.children.length).toBe(1); + + track.disabled = true; + + expect(updateMock).toBeCalledTimes(1); + expect(computeFrameSpy).toBeCalledTimes(1); + expect(exitSpy).toBeCalledTimes(1); + expect(track.view.children.length).toBe(0); + expect(track.disabled).toBe(true); + + track.disabled = false; + + expect(updateMock).toBeCalledTimes(2); + expect(computeFrameSpy).toBeCalledTimes(2); + expect(track.view.children.length).toBe(1); + expect(track.disabled).toBe(false); + }); }); describe("The Track Object's layers method", () => { diff --git a/src/tracks/track/track.ts b/src/tracks/track/track.ts index 3bfcc11..0cbbbf1 100644 --- a/src/tracks/track/track.ts +++ b/src/tracks/track/track.ts @@ -26,11 +26,9 @@ type Events = { } export class Track extends EventEmitterMixin(Serializer) { + private _disabled: boolean = false; + public view = new Container(); - /** - * Controls the visability of the track - */ - public disabled: boolean = false; /** * The clips to be displayed @@ -57,6 +55,24 @@ export class Track extends EventEmitterMixin = new DefaultInsertStrategy(); + /** + * Controls the visability of the track + */ + public get disabled(): boolean { + return this._disabled; + } + + public set disabled(value: boolean) { + if (value && this.clipRef && inGraph(this.clipRef)) { + this.view.removeChild(this.clipRef.view); + this.clipRef?.exit(); + } + + this._disabled = value; + + this.trigger('update', undefined); + } + /** * Connect the track with the composition */