From 49691f81d114063fd3807d1be5081d6df2df5672 Mon Sep 17 00:00:00 2001 From: chenshenhai Date: Thu, 16 Sep 2021 23:11:04 +0800 Subject: [PATCH] feat: @idraw/kernal context-2d add globalCompositeOperation attr --- .../kernal/__tests__/lib/context-2d.test.ts | 13 ++++- packages/kernal/src/lib/context-2d.ts | 53 ++++++++++++------- 2 files changed, 47 insertions(+), 19 deletions(-) diff --git a/packages/kernal/__tests__/lib/context-2d.test.ts b/packages/kernal/__tests__/lib/context-2d.test.ts index 5f49ce7..415ee29 100644 --- a/packages/kernal/__tests__/lib/context-2d.test.ts +++ b/packages/kernal/__tests__/lib/context-2d.test.ts @@ -1,13 +1,24 @@ import Context2d from './../../src/lib/context-2d'; describe('@idraw/kernal: lib/context-2d', () => { + test('Context2d.globalAlpha', async () => { const globalAlpha = 0.55; const ctx2d = new Context2d(); ctx2d.globalAlpha = globalAlpha; expect(ctx2d.globalAlpha).toStrictEqual(globalAlpha); expect(ctx2d.$getAllAttrs()).toStrictEqual({ globalAlpha }); - expect(ctx2d.$getAllRecords()).toStrictEqual([ { name: 'globalAlpha', type: 'attr', args: [ 0.55 ] } ]); + expect(ctx2d.$getAllRecords()).toStrictEqual([ { name: 'globalAlpha', type: 'attr', args: [ globalAlpha ] } ]); + }); + + test('Context2d.globalCompositeOperation', async () => { + const globalCompositeOperation = 'source-over'; + const ctx2d = new Context2d(); + ctx2d.globalCompositeOperation = globalCompositeOperation; + expect(ctx2d.globalCompositeOperation).toStrictEqual(globalCompositeOperation); + expect(ctx2d.$getAllAttrs()).toStrictEqual({ globalCompositeOperation }); + expect(ctx2d.$getAllRecords()).toStrictEqual([ { name: 'globalCompositeOperation', type: 'attr', args: [ globalCompositeOperation ] } ]); + expect(1).toStrictEqual(1); }); }) diff --git a/packages/kernal/src/lib/context-2d.ts b/packages/kernal/src/lib/context-2d.ts index 1447b28..4a6141d 100644 --- a/packages/kernal/src/lib/context-2d.ts +++ b/packages/kernal/src/lib/context-2d.ts @@ -1,22 +1,22 @@ -import { TypeContext, TypeBoardSizeOptions } from '@idraw/types'; +// import { TypeContext, TypeBoardSizeOptions } from '@idraw/types'; -interface CanvasRenderingContext2D extends - CanvasCompositing, - CanvasDrawImage, - CanvasDrawPath, - CanvasFillStrokeStyles, - CanvasFilters, - CanvasImageData, - CanvasImageSmoothing, - CanvasPath, - CanvasPathDrawingStyles, - CanvasRect, - CanvasShadowStyles, - CanvasState, - CanvasText, - CanvasTextDrawingStyles, - CanvasTransform, - CanvasUserInterface {}; +// interface CanvasRenderingContext2D extends +// CanvasCompositing, +// CanvasDrawImage, +// CanvasDrawPath, +// CanvasFillStrokeStyles, +// CanvasFilters, +// CanvasImageData, +// CanvasImageSmoothing, +// CanvasPath, +// CanvasPathDrawingStyles, +// CanvasRect, +// CanvasShadowStyles, +// CanvasState, +// CanvasText, +// CanvasTextDrawingStyles, +// CanvasTransform, +// CanvasUserInterface {}; type ContextRecord = { @@ -27,6 +27,7 @@ type ContextRecord = { type ContextAttr = { globalAlpha?: number; + globalCompositeOperation?: string; } class Context2d { @@ -51,6 +52,22 @@ class Context2d { }) } + get globalCompositeOperation (): string | undefined { + return this._attrs['globalCompositeOperation']; + } + + // source-over source-in source-out source-atop destination-over destination-in destination-out destination-atop lighter copy xor multiply screen overlay darken lighten color-dodge color-burn hard-light soft-light difference exclusion hue saturation color luminosity + set globalCompositeOperation(value: string | undefined) { + this._attrs['globalCompositeOperation'] = value; + this._records.push({ + name: 'globalCompositeOperation', + type: 'attr', + args: [value] + }) + } + + + $getAllRecords(): ContextRecord[] { return this._records; }