UNPKG

fabric

Version:

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

1 lines 19.4 kB
{"version":3,"file":"index.mjs","sources":["../../extensions/aligning_guidelines/index.ts"],"sourcesContent":["import {\n type BasicTransformEvent,\n type Canvas,\n type FabricObject,\n type TPointerEvent,\n type Point,\n util,\n} from 'fabric';\nimport {\n collectHorizontalPoint,\n collectVerticalPoint,\n} from './util/collect-point';\nimport {\n drawHorizontalLine,\n drawLine,\n drawPointList,\n drawVerticalLine,\n drawX,\n} from './util/draw';\nimport { collectLine } from './util/collect-line';\nimport type { AligningLineConfig, OriginMap } from './typedefs';\nimport { getObjectsByTarget } from './util/get-objects-by-target';\nimport { getContraryMap, getPointMap } from './util/basic';\n\ntype TransformEvent = BasicTransformEvent<TPointerEvent> & {\n target: FabricObject;\n};\n\nexport class AligningGuidelines {\n canvas: Canvas;\n horizontalLines = new Set<string>();\n verticalLines = new Set<string>();\n cacheMap = new Map<string, Point[]>();\n /**\n * When we drag to resize using center points like mt, ml, mb, and mr,\n * we do not need to draw line segments; we only need to draw the target points.\n */\n onlyDrawPoint = false;\n /** Alignment method is required when customizing. */\n contraryOriginMap: OriginMap = {\n tl: ['right', 'bottom'],\n tr: ['left', 'bottom'],\n br: ['left', 'top'],\n bl: ['right', 'top'],\n mt: ['center', 'bottom'],\n mr: ['left', 'center'],\n mb: ['center', 'top'],\n ml: ['right', 'center'],\n };\n xSize = 2.4;\n lineDash: number[] | undefined;\n /** At what distance from the shape does alignment begin? */\n margin = 4;\n /** Aligning line dimensions */\n width = 1;\n /** Aligning line color */\n color = 'rgba(255,0,0,0.9)';\n /** Close Vertical line, default false. */\n closeVLine = false;\n /** Close horizontal line, default false. */\n closeHLine = false;\n\n constructor(canvas: Canvas, options: Partial<AligningLineConfig> = {}) {\n this.canvas = canvas;\n Object.assign(this, options);\n\n this.mouseUp = this.mouseUp.bind(this);\n this.scalingOrResizing = this.scalingOrResizing.bind(this);\n this.moving = this.moving.bind(this);\n this.beforeRender = this.beforeRender.bind(this);\n this.afterRender = this.afterRender.bind(this);\n\n this.initBehavior();\n }\n initBehavior() {\n this.canvas.on('mouse:up', this.mouseUp);\n this.canvas.on('object:resizing', this.scalingOrResizing);\n this.canvas.on('object:scaling', this.scalingOrResizing);\n this.canvas.on('object:moving', this.moving);\n this.canvas.on('before:render', this.beforeRender);\n this.canvas.on('after:render', this.afterRender);\n }\n /** Returns shapes that can draw aligning lines, default returns all shapes on the canvas excluding groups. */\n getObjectsByTarget(target: FabricObject) {\n return getObjectsByTarget(target);\n }\n /** When the user customizes the controller, this property is set to enable or disable automatic alignment through point scaling/resizing. */\n getPointMap(target: FabricObject) {\n return getPointMap(target);\n }\n /** When the user customizes the controller, this property is used to enable or disable alignment positioning through points. */\n getContraryMap(target: FabricObject) {\n return getContraryMap(target);\n }\n /** Users can customize. */\n getCaCheMapValue(object: FabricObject) {\n const cacheKey = [\n object.calcTransformMatrix().toString(),\n object.width,\n object.height,\n ].join();\n const cacheValue = this.cacheMap.get(cacheKey);\n if (cacheValue) return cacheValue;\n const value = object.getCoords();\n value.push(object.getCenterPoint());\n this.cacheMap.set(cacheKey, value);\n return value;\n }\n drawLine(origin: Point, target: Point) {\n drawLine.call(this, origin, target);\n }\n drawX(point: Point, dir: number) {\n drawX.call(this, point, dir);\n }\n mouseUp() {\n this.verticalLines.clear();\n this.horizontalLines.clear();\n this.cacheMap.clear();\n this.canvas.requestRenderAll();\n }\n\n scalingOrResizing(e: TransformEvent) {\n const target = e.target;\n // We need to obtain the real-time coordinates of the current object, so we need to update them in real-time\n target.setCoords();\n // The value of action can be scaleX, scaleY, scale, resize, etc.\n // If it does not start with \"scale,\" it is considered a modification of size.\n const isScale = String(e.transform.action).startsWith('scale');\n this.verticalLines.clear();\n this.horizontalLines.clear();\n\n const objects = this.getObjectsByTarget(target);\n // When the shape is flipped, the tl obtained through getCoords is actually tr,\n // and tl is actually tr. We need to make correction adjustments.\n // tr <-> tl、 bl <-> br、 mb <-> mt、 ml <-> mr\n let corner = e.transform.corner;\n if (target.flipX) {\n if (corner.includes('l')) corner = corner.replace('l', 'r');\n else if (corner.includes('r')) corner = corner.replace('r', 'l');\n }\n if (target.flipY) {\n if (corner.includes('t')) corner = corner.replace('t', 'b');\n else if (corner.includes('b')) corner = corner.replace('b', 't');\n }\n\n // Obtain the coordinates of the current operation point through the value of corner.\n // users can be allowed to customize and pass in custom corners.\n const pointMap = this.getPointMap(target);\n if (!(corner in pointMap)) return;\n this.onlyDrawPoint = corner.includes('m');\n if (this.onlyDrawPoint) {\n const angle = target.getTotalAngle();\n // When the shape is rotated, it is meaningless to draw points using the center point.\n if (angle % 90 != 0) return;\n }\n // If manipulating tl, then when the shape changes size, it should be positioned by br,\n // and the same applies to others.\n // users can be allowed to customize and pass in custom corners.\n const contraryMap = this.getContraryMap(target);\n const point = pointMap[corner];\n let diagonalPoint = contraryMap[corner];\n // When holding the centerKey (default is altKey), the shape will scale based on the center point, with the reference point being the center.\n const isCenter =\n e.transform.original.originX == 'center' &&\n e.transform.original.originY == 'center';\n if (isCenter) {\n const p = target.group\n ? point.transform(\n util.invertTransform(target.group.calcTransformMatrix()),\n )\n : point;\n diagonalPoint = diagonalPoint.add(p).scalarDivide(2);\n }\n const uniformIsToggled = e.e[this.canvas.uniScaleKey!];\n let isUniform =\n (this.canvas.uniformScaling && !uniformIsToggled) ||\n (!this.canvas.uniformScaling && uniformIsToggled);\n // When controlling through the center point,\n // if isUniform is true, it actually changes the skew, so it is meaningless.\n if (this.onlyDrawPoint) isUniform = false;\n\n const list: Point[] = [];\n for (const object of objects) {\n const d = this.getCaCheMapValue(object);\n list.push(...d);\n }\n\n const props = {\n target,\n point,\n diagonalPoint,\n corner,\n list,\n isScale,\n isUniform,\n isCenter,\n };\n\n // Obtain horizontal and vertical reference lines.\n const noNeedToCollectV =\n this.onlyDrawPoint && (corner.includes('t') || corner.includes('b'));\n const noNeedToCollectH =\n this.onlyDrawPoint && (corner.includes('l') || corner.includes('r'));\n const vList = noNeedToCollectV\n ? []\n : collectVerticalPoint.call(this, props);\n const hList = noNeedToCollectH\n ? []\n : collectHorizontalPoint.call(this, props);\n vList.forEach((o) => {\n // Objects cannot be deduplicated; convert them to strings for deduplication.\n this.verticalLines.add(JSON.stringify(o));\n });\n hList.forEach((o) => {\n // Objects cannot be deduplicated; convert them to strings for deduplication.\n this.horizontalLines.add(JSON.stringify(o));\n });\n }\n moving(e: TransformEvent) {\n const target = e.target;\n // We need to obtain the real-time coordinates of the current object, so we need to update them in real-time\n target.setCoords();\n this.onlyDrawPoint = false;\n this.verticalLines.clear();\n this.horizontalLines.clear();\n\n // Find the shapes associated with the current graphic to draw reference lines for it.\n const objects = this.getObjectsByTarget(target);\n const points: Point[] = [];\n // Collect all the points to draw reference lines.\n for (const object of objects) points.push(...this.getCaCheMapValue(object));\n\n // Obtain horizontal and vertical reference lines.\n const { vLines, hLines } = collectLine.call(this, target, points);\n vLines.forEach((o) => {\n // Objects cannot be deduplicated; convert them to strings for deduplication.\n this.verticalLines.add(JSON.stringify(o));\n });\n hLines.forEach((o) => {\n // Objects cannot be deduplicated; convert them to strings for deduplication.\n this.horizontalLines.add(JSON.stringify(o));\n });\n }\n beforeRender() {\n this.canvas.clearContext(this.canvas.contextTop);\n }\n afterRender() {\n if (this.onlyDrawPoint) {\n drawPointList.call(this);\n } else {\n drawVerticalLine.call(this);\n drawHorizontalLine.call(this);\n }\n }\n\n dispose() {\n this.canvas.off('mouse:up', this.mouseUp);\n this.canvas.off('object:resizing', this.scalingOrResizing);\n this.canvas.off('object:scaling', this.scalingOrResizing);\n this.canvas.off('object:moving', this.moving);\n this.canvas.off('before:render', this.beforeRender);\n this.canvas.off('after:render', this.afterRender);\n }\n}\n"],"names":["AligningGuidelines","constructor","canvas","options","arguments","length","undefined","_defineProperty","Set","Map","tl","tr","br","bl","mt","mr","mb","ml","Object","assign","mouseUp","bind","scalingOrResizing","moving","beforeRender","afterRender","initBehavior","on","getObjectsByTarget","target","getPointMap","getContraryMap","getCaCheMapValue","object","cacheKey","calcTransformMatrix","toString","width","height","join","cacheValue","cacheMap","get","value","getCoords","push","getCenterPoint","set","drawLine","origin","call","drawX","point","dir","verticalLines","clear","horizontalLines","requestRenderAll","e","setCoords","isScale","String","transform","action","startsWith","objects","corner","flipX","includes","replace","flipY","pointMap","onlyDrawPoint","angle","getTotalAngle","contraryMap","diagonalPoint","isCenter","original","originX","originY","p","group","util","invertTransform","add","scalarDivide","uniformIsToggled","uniScaleKey","isUniform","uniformScaling","list","d","props","noNeedToCollectV","noNeedToCollectH","vList","collectVerticalPoint","hList","collectHorizontalPoint","forEach","o","JSON","stringify","points","vLines","hLines","collectLine","clearContext","contextTop","drawPointList","drawVerticalLine","drawHorizontalLine","dispose","off"],"mappings":"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"}