UNPKG

fabric

Version:

Object model for HTML5 canvas, and SVG-to-canvas parser. Backed by jsdom and node-canvas.

1 lines 2.9 kB
{"version":3,"file":"transform_matrix_removal.min.mjs","names":[],"sources":["../../../src/util/transform_matrix_removal.ts"],"sourcesContent":["import { CENTER, SCALE_X, SCALE_Y } from '../constants';\nimport type { FabricImage, ParsedPAROffsets } from '../shapes/Image';\nimport type { FabricObject } from '../shapes/Object/FabricObject';\nimport type { TMat2D } from '../typedefs';\nimport { qrDecompose } from './misc/matrix';\n\ntype FabricObjectWithTransformMatrix = FabricObject & {\n transformMatrix?: TMat2D;\n};\n\n/**\n * This function is an helper for svg import. it decompose the transformMatrix\n * and assign properties to object.\n * untransformed coordinates\n * @private\n */\nconst _assignTransformMatrixProps = (\n object: FabricObjectWithTransformMatrix,\n) => {\n if (object.transformMatrix) {\n const { scaleX, scaleY, angle, skewX } = qrDecompose(\n object.transformMatrix,\n );\n object.flipX = false;\n object.flipY = false;\n object.set(SCALE_X, scaleX);\n object.set(SCALE_Y, scaleY);\n object.angle = angle;\n object.skewX = skewX;\n object.skewY = 0;\n }\n};\n\n/**\n * This function is an helper for svg import. it removes the transform matrix\n * and set to object properties that fabricjs can handle\n * @private\n * @param {Object} preserveAspectRatioOptions\n */\nexport const removeTransformMatrixForSvgParsing = (\n object: FabricObjectWithTransformMatrix,\n preserveAspectRatioOptions?: ParsedPAROffsets,\n) => {\n let center = object._findCenterFromElement();\n if (object.transformMatrix) {\n _assignTransformMatrixProps(object);\n center = center.transform(object.transformMatrix);\n }\n delete object.transformMatrix;\n if (preserveAspectRatioOptions) {\n object.scaleX *= preserveAspectRatioOptions.scaleX;\n object.scaleY *= preserveAspectRatioOptions.scaleY;\n (object as FabricImage).cropX = preserveAspectRatioOptions.cropX;\n (object as FabricImage).cropY = preserveAspectRatioOptions.cropY;\n center.x += preserveAspectRatioOptions.offsetLeft;\n center.y += preserveAspectRatioOptions.offsetTop;\n object.width = preserveAspectRatioOptions.width;\n object.height = preserveAspectRatioOptions.height;\n }\n object.setPositionByOrigin(center, CENTER, CENTER);\n};\n"],"mappings":"4HAgBA,MAuBa,GACX,EACA,IAAA,CAEA,IAAI,EAAS,EAAO,wBAAA,CAChB,EAAO,mBA3BX,GAAA,CAEA,GAAI,EAAO,gBAAiB,CAC1B,GAAA,CAAM,OAAE,EAAA,OAAQ,EAAA,MAAQ,EAAA,MAAO,GAAU,EACvC,EAAO,gBAAA,CAET,EAAO,MAAA,CAAQ,EACf,EAAO,MAAA,CAAQ,EACf,EAAO,IAAI,EAAS,EAAA,CACpB,EAAO,IAAI,EAAS,EAAA,CACpB,EAAO,MAAQ,EACf,EAAO,MAAQ,EACf,EAAO,MAAQ,KAgBa,EAAA,CAC5B,EAAS,EAAO,UAAU,EAAO,gBAAA,EAAA,OAE5B,EAAO,gBACV,IACF,EAAO,QAAU,EAA2B,OAC5C,EAAO,QAAU,EAA2B,OAC3C,EAAuB,MAAQ,EAA2B,MAC1D,EAAuB,MAAQ,EAA2B,MAC3D,EAAO,GAAK,EAA2B,WACvC,EAAO,GAAK,EAA2B,UACvC,EAAO,MAAQ,EAA2B,MAC1C,EAAO,OAAS,EAA2B,QAE7C,EAAO,oBAAoB,EAAQ,EAAQ,EAAA,EAAA,OAAA,KAAA"}