diff --git a/lib/src/artist.ts b/lib/src/artist.ts index 341b29f..83bb77b 100644 --- a/lib/src/artist.ts +++ b/lib/src/artist.ts @@ -167,6 +167,18 @@ export class Artist { this._context.restore(); } + drawImage2(source: ImageBitmap, position: IPoint, size: ISize) { + this._context.save(); + const scaleY = size.height / source.height; + const scaleX = size.width / source.width; + + this._context.translate(position.x + size.width / 2, position.y + size.height / 2); + this._context.scale(scaleY, scaleX); + + this._context.drawImage(source, -source.width / 2, -source.height / 2); + this._context.restore(); + } + drawPath(path: string) { const path2d = new Path2D(path); this._context.stroke(path2d); diff --git a/lib/src/canvas-2d-renderer.ts b/lib/src/canvas-2d-renderer.ts index ad84df8..9d99920 100644 --- a/lib/src/canvas-2d-renderer.ts +++ b/lib/src/canvas-2d-renderer.ts @@ -92,11 +92,20 @@ export class Canvas2DRenderer implements IRenderer { this._context.globalCompositeOperation = dn.blendMode as GlobalCompositeOperation; this._artist.setTransform(dn.transform); - this._artist.drawImage( - dn.source, - { x: dn.rectangle.x, y: dn.rectangle.y }, - { width: dn.rectangle.width, height: dn.rectangle.height }, - ); + if (dn.source instanceof HTMLImageElement) { + this._artist.drawImage( + dn.source, + { x: dn.rectangle.x, y: dn.rectangle.y }, + { width: dn.rectangle.width, height: dn.rectangle.height }, + ); + } else if (dn.source instanceof ImageBitmap) { + this._artist.drawImage2( + dn.source, + { x: dn.rectangle.x, y: dn.rectangle.y }, + { width: dn.rectangle.width, height: dn.rectangle.height }, + ); + } + this._context.restore(); } if (isRectangleDrawObject(leaf)) { diff --git a/lib/src/package.json b/lib/src/package.json index 6015d0e..0f06800 100644 --- a/lib/src/package.json +++ b/lib/src/package.json @@ -1,6 +1,6 @@ { "name": "@gxc-solutions/renderer-canvas-2d", - "version": "0.0.3", + "version": "0.0.4", "main": "index.js", "author": "GXC Solutions", "publishConfig": { @@ -8,7 +8,7 @@ "registry": "https://npm.gxc-solutions.ru" }, "peerDependencies": { - "@gxc-solutions/math": "^0.0.1", - "@gxc-solutions/renderer-base": "^0.0.9" + "@gxc-solutions/math": "^0.0.2", + "@gxc-solutions/renderer-base": "^0.0.10" } } diff --git a/package-lock.json b/package-lock.json index 6d5acc2..a8c17d2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,8 +9,8 @@ "version": "0.0.0", "license": "ISC", "dependencies": { - "@gxc-solutions/math": "^0.0.1", - "@gxc-solutions/renderer-base": "^0.0.9" + "@gxc-solutions/math": "^0.0.2", + "@gxc-solutions/renderer-base": "^0.0.10" }, "devDependencies": { "@eslint/eslintrc": "^3.3.4", @@ -696,16 +696,16 @@ } }, "node_modules/@gxc-solutions/math": { - "version": "0.0.1", - "resolved": "https://npm.gxc-solutions.ru/@gxc-solutions/math/-/math-0.0.1.tgz", - "integrity": "sha512-m6lxTkjXkyaUoI3+cJKpgt/AQlyApLSJ2p9D2EJ9+XzHCSjOWs29GzczPLgopYdLEWYN/YPr77V4CScGpR7qxw==" + "version": "0.0.2", + "resolved": "https://npm.gxc-solutions.ru/@gxc-solutions/math/-/math-0.0.2.tgz", + "integrity": "sha512-R6zYvbspis+XoHZ7lwyVLAUGZkJwivbeo94VtN7cSZzOA86AgVev+UQeHt9S1Ua4d1FwgxYVasck1/l5WXR7CQ==" }, "node_modules/@gxc-solutions/renderer-base": { - "version": "0.0.9", - "resolved": "https://npm.gxc-solutions.ru/@gxc-solutions/renderer-base/-/renderer-base-0.0.9.tgz", - "integrity": "sha512-aLu3eTyzDcGQw+FsYt25MNg/6gNORXa8FynUX5rtEFinmdFEDdqxOr08dhFViw1FIT3ZdYtJbY9aegFK3V/OcA==", + "version": "0.0.10", + "resolved": "https://npm.gxc-solutions.ru/@gxc-solutions/renderer-base/-/renderer-base-0.0.10.tgz", + "integrity": "sha512-DaGo2ii+Vqz5Mk20zXwNXMpxMCoF7fE8EbC+V37qEu+b/YVLtk7/N//1PyMl43hIIMlGNRps81dfJhPkCgSbdQ==", "peerDependencies": { - "@gxc-solutions/math": "^0.0.1" + "@gxc-solutions/math": "^0.0.2" } }, "node_modules/@humanfs/core": { diff --git a/package.json b/package.json index 1e6222b..924d467 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,7 @@ "vite": "^7.3.1" }, "dependencies": { - "@gxc-solutions/math": "^0.0.1", - "@gxc-solutions/renderer-base": "^0.0.9" + "@gxc-solutions/math": "^0.0.2", + "@gxc-solutions/renderer-base": "^0.0.10" } }