UNPKG

fabric

Version:

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

1 lines 2.92 kB
{"version":3,"file":"transform_matrix_removal.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":";;;;;;;;;AAgBA,MAAM,+BACJ,WACG;AACH,KAAI,OAAO,iBAAiB;EAC1B,MAAM,EAAE,QAAQ,QAAQ,OAAO,UAAU,YACvC,OAAO,gBACR;AACD,SAAO,QAAQ;AACf,SAAO,QAAQ;AACf,SAAO,IAAI,SAAS,OAAO;AAC3B,SAAO,IAAI,SAAS,OAAO;AAC3B,SAAO,QAAQ;AACf,SAAO,QAAQ;AACf,SAAO,QAAQ;;;;;;;;;AAUnB,MAAa,sCACX,QACA,+BACG;CACH,IAAI,SAAS,OAAO,wBAAwB;AAC5C,KAAI,OAAO,iBAAiB;AAC1B,8BAA4B,OAAO;AACnC,WAAS,OAAO,UAAU,OAAO,gBAAgB;;AAEnD,QAAO,OAAO;AACd,KAAI,4BAA4B;AAC9B,SAAO,UAAU,2BAA2B;AAC5C,SAAO,UAAU,2BAA2B;AAC3C,SAAuB,QAAQ,2BAA2B;AAC1D,SAAuB,QAAQ,2BAA2B;AAC3D,SAAO,KAAK,2BAA2B;AACvC,SAAO,KAAK,2BAA2B;AACvC,SAAO,QAAQ,2BAA2B;AAC1C,SAAO,SAAS,2BAA2B;;AAE7C,QAAO,oBAAoB,QAAQ,QAAQ,OAAO"}