UNPKG

fabric

Version:

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

66 lines (65 loc) 2.36 kB
import { getDistanceList } from "./basic.mjs"; //#region extensions/aligning_guidelines/util/collect-point.ts function collectVerticalPoint(props) { const { target, isScale, isUniform, corner, point, diagonalPoint, list, isCenter } = props; const { dis, arr } = getDistanceList(point, list, "x"); if (dis > this.margin / this.canvas.getZoom()) return []; let v = arr[arr.length - 1].x - point.x; const dirX = corner.includes("l") ? -1 : 1; v *= dirX; const { width, height, scaleX, scaleY } = target; const dStrokeWidth = target.strokeUniform ? 0 : target.strokeWidth; const scaleWidth = scaleX * width + dStrokeWidth; const sx = (v + scaleWidth) / scaleWidth; if (sx == 0) return []; if (isScale) { target.set("scaleX", scaleX * sx); if (isUniform) target.set("scaleY", scaleY * sx); } else { target.set("width", width * sx); if (isUniform) target.set("height", height * sx); } if (isCenter) target.setRelativeXY(diagonalPoint, "center", "center"); else { const originArr = this.contraryOriginMap; target.setRelativeXY(diagonalPoint, ...originArr[corner]); } target.setCoords(); return arr.map((target) => ({ origin: point, target })); } function collectHorizontalPoint(props) { const { target, isScale, isUniform, corner, point, diagonalPoint, list, isCenter } = props; const { dis, arr } = getDistanceList(point, list, "y"); if (dis > this.margin / this.canvas.getZoom()) return []; let v = arr[arr.length - 1].y - point.y; const dirY = corner.includes("t") ? -1 : 1; v *= dirY; const { width, height, scaleX, scaleY } = target; const dStrokeWidth = target.strokeUniform ? 0 : target.strokeWidth; const scaleHeight = scaleY * height + dStrokeWidth; const sy = (v + scaleHeight) / scaleHeight; if (sy == 0) return []; if (isScale) { target.set("scaleY", scaleY * sy); if (isUniform) target.set("scaleX", scaleX * sy); } else { target.set("height", height * sy); if (isUniform) target.set("width", width * sy); } if (isCenter) target.setRelativeXY(diagonalPoint, "center", "center"); else { const originArr = this.contraryOriginMap; target.setRelativeXY(diagonalPoint, ...originArr[corner]); } target.setCoords(); return arr.map((target) => ({ origin: point, target })); } //#endregion export { collectHorizontalPoint, collectVerticalPoint }; //# sourceMappingURL=collect-point.mjs.map