fabric
Version:
Object model for HTML5 canvas, and SVG-to-canvas parser. Backed by jsdom and node-canvas.
1 lines • 4.1 kB
Source Map (JSON)
{"version":3,"file":"transform_matrix_removal.mjs","sources":["../../../src/util/transform_matrix_removal.ts"],"sourcesContent":["import { CENTER, SCALE_X, SCALE_Y } from '../constants';\nimport type { FabricImage } 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?: any,\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"],"names":["_assignTransformMatrixProps","object","transformMatrix","scaleX","scaleY","angle","skewX","qrDecompose","flipX","flipY","set","SCALE_X","SCALE_Y","skewY","removeTransformMatrixForSvgParsing","preserveAspectRatioOptions","center","_findCenterFromElement","transform","cropX","cropY","x","offsetLeft","y","offsetTop","width","height","setPositionByOrigin","CENTER"],"mappings":";;;AAUA;AACA;AACA;AACA;AACA;AACA;AACA,MAAMA,2BAA2B,GAC/BC,MAAuC,IACpC;EACH,IAAIA,MAAM,CAACC,eAAe,EAAE;IAC1B,MAAM;MAAEC,MAAM;MAAEC,MAAM;MAAEC,KAAK;AAAEC,MAAAA,KAAAA;AAAM,KAAC,GAAGC,WAAW,CAClDN,MAAM,CAACC,eACT,CAAC,CAAA;IACDD,MAAM,CAACO,KAAK,GAAG,KAAK,CAAA;IACpBP,MAAM,CAACQ,KAAK,GAAG,KAAK,CAAA;AACpBR,IAAAA,MAAM,CAACS,GAAG,CAACC,OAAO,EAAER,MAAM,CAAC,CAAA;AAC3BF,IAAAA,MAAM,CAACS,GAAG,CAACE,OAAO,EAAER,MAAM,CAAC,CAAA;IAC3BH,MAAM,CAACI,KAAK,GAAGA,KAAK,CAAA;IACpBJ,MAAM,CAACK,KAAK,GAAGA,KAAK,CAAA;IACpBL,MAAM,CAACY,KAAK,GAAG,CAAC,CAAA;AAClB,GAAA;AACF,CAAC,CAAA;;AAED;AACA;AACA;AACA;AACA;AACA;MACaC,kCAAkC,GAAGA,CAChDb,MAAuC,EACvCc,0BAAgC,KAC7B;AACH,EAAA,IAAIC,MAAM,GAAGf,MAAM,CAACgB,sBAAsB,EAAE,CAAA;EAC5C,IAAIhB,MAAM,CAACC,eAAe,EAAE;IAC1BF,2BAA2B,CAACC,MAAM,CAAC,CAAA;IACnCe,MAAM,GAAGA,MAAM,CAACE,SAAS,CAACjB,MAAM,CAACC,eAAe,CAAC,CAAA;AACnD,GAAA;EACA,OAAOD,MAAM,CAACC,eAAe,CAAA;AAC7B,EAAA,IAAIa,0BAA0B,EAAE;AAC9Bd,IAAAA,MAAM,CAACE,MAAM,IAAIY,0BAA0B,CAACZ,MAAM,CAAA;AAClDF,IAAAA,MAAM,CAACG,MAAM,IAAIW,0BAA0B,CAACX,MAAM,CAAA;AACjDH,IAAAA,MAAM,CAAiBkB,KAAK,GAAGJ,0BAA0B,CAACI,KAAK,CAAA;AAC/DlB,IAAAA,MAAM,CAAiBmB,KAAK,GAAGL,0BAA0B,CAACK,KAAK,CAAA;AAChEJ,IAAAA,MAAM,CAACK,CAAC,IAAIN,0BAA0B,CAACO,UAAU,CAAA;AACjDN,IAAAA,MAAM,CAACO,CAAC,IAAIR,0BAA0B,CAACS,SAAS,CAAA;AAChDvB,IAAAA,MAAM,CAACwB,KAAK,GAAGV,0BAA0B,CAACU,KAAK,CAAA;AAC/CxB,IAAAA,MAAM,CAACyB,MAAM,GAAGX,0BAA0B,CAACW,MAAM,CAAA;AACnD,GAAA;EACAzB,MAAM,CAAC0B,mBAAmB,CAACX,MAAM,EAAEY,MAAM,EAAEA,MAAM,CAAC,CAAA;AACpD;;;;"}