{"version":3,"file":"X_Connector.mjs","sources":["../../../../src/shapes/canvasx/X_Connector.ts"],"sourcesContent":["import { Path } from '../Path';\nimport { Control } from '../../controls/Control';\nimport { invertTransform, multiplyTransformMatrices } from '../../util';\nimport { Point, XY } from '../../Point';\nimport { TMat2D } from '../../typedefs';\nimport { InteractiveFabricObject } from '../Object/InteractiveObject';\nimport { createObjectDefaultControls } from '../../controls/commonControls';\nimport { FabricObject } from '../Object/Object';\nimport { Transform } from '../../EventTypeDefs';\n\nconst getPath = (\n  fromPoint: XY,\n  toPoint: XY,\n  control1: XY,\n  control2: XY,\n  offset: XY,\n  style: any,\n  isMoving = false\n) => {\n  let path: string = '';\n  if (!isMoving) {\n    offset = { x: -1, y: -1 };\n  }\n\n  path = `M ${fromPoint.x + offset.x} ${fromPoint.y + offset.y} C ${\n    control1.x + offset.x\n  }, ${control1.y + offset.y}, ${control2.x + offset.x} ${\n    control2.y + offset.y\n  }, ${toPoint.x + offset.x} ${toPoint.y + offset.y}`;\n\n  return path;\n};\n\nclass X_Connector extends Path {\n  fromPoint: XY;\n  toPoint: XY;\n  control1: XY;\n  control2: XY;\n  offset: XY;\n  style: any;\n  prevLeft: number;\n  prevTop: number;\n  preCenter: Point;\n  preTransform: TMat2D | null;\n  fromObjectId: string;\n  toObjectId: string;\n\n  constructor(\n    fromPoint: XY,\n    toPoint: XY,\n    control1: XY,\n    control2: XY,\n    style: any = {},\n    options = {}\n  ) {\n    const path = getPath(\n      fromPoint,\n      toPoint,\n      control1,\n      control2,\n      { x: 0, y: 0 },\n      style\n    );\n    super(path, options);\n    this.initialize();\n    this.type = 'X_Connector';\n    this.objectCaching = false;\n\n    const localFromPoint = TransformPointFromCanvasToObject(\n      this,\n      new Point(fromPoint)\n    );\n    const localToPoint = TransformPointFromCanvasToObject(\n      this,\n      new Point(toPoint)\n    );\n    const localControl1 = TransformPointFromCanvasToObject(\n      this,\n      new Point(control1)\n    );\n    const localControl2 = TransformPointFromCanvasToObject(\n      this,\n      new Point(control2)\n    );\n    // if (!this.canvas) return;\n    // let from = new Point(fromPoint).transform(this.canvas!.viewportTransform);\n    // let to = new Point(toPoint).transform(this.canvas!.viewportTransform);\n    // let control11 = new Point(control1).transform(\n    //   this.canvas!.viewportTransform\n    // );\n    // let control21 = new Point(control2).transform(\n    //   this.canvas!.viewportTransform\n    // );\n\n    this.set({\n      fromPoint: localFromPoint,\n      toPoint: localToPoint,\n      control1: localControl1,\n      control2: localControl2,\n      style,\n    });\n\n    this.controls = {\n      ...createObjectDefaultControls,\n      start: new Control({\n        x: 0,\n        y: 0,\n        offsetX: localFromPoint.x,\n        offsetY: localFromPoint.y,\n        mouseDownHandler: this._mouseDownControl.bind(this),\n        mouseUpHandler: this._mouseUpControl.bind(this),\n        positionHandler: this._positionControl.bind(this),\n        actionHandler: this.dragActionHandler.bind(this, 'start'),\n        cursorStyle: 'crosshair',\n        render: this._renderControl.bind(this, 'start'),\n      }),\n      end: new Control({\n        x: 0,\n        y: 0,\n        offsetX: localToPoint.x,\n        offsetY: localToPoint.y,\n        mouseDownHandler: this._mouseDownControl.bind(this),\n        mouseUpHandler: this._mouseUpControl.bind(this),\n        positionHandler: this._positionControl.bind(this),\n        actionHandler: this.dragActionHandler.bind(this, 'end'),\n        cursorStyle: 'crosshair',\n        render: this._renderControl.bind(this, 'end'),\n      }),\n      control1: new Control({\n        x: 0,\n        y: 0,\n        offsetX: localControl1.x,\n        offsetY: localControl1.y,\n        mouseDownHandler: this._mouseDownControl.bind(this),\n        mouseUpHandler: this._mouseUpControl.bind(this),\n        positionHandler: this._positionControl.bind(this),\n        actionHandler: this.dragActionHandler.bind(this, 'control1'),\n        cursorStyle: 'crosshair',\n        render: this._renderControl.bind(this, 'control1'),\n      }),\n      control2: new Control({\n        x: 0,\n        y: 0,\n        offsetX: localControl2.x,\n        offsetY: localControl2.y,\n        mouseDownHandler: this._mouseDownControl.bind(this),\n        mouseUpHandler: this._mouseUpControl.bind(this),\n        positionHandler: this._positionControl.bind(this),\n        actionHandler: this.dragActionHandler.bind(this, 'control2'),\n        cursorStyle: 'crosshair',\n        render: this._renderControl.bind(this, 'control2'),\n      }),\n    };\n  }\n\n  initialize() {\n    // this.setDimensions();\n\n    const { left, top, width, height, pathOffset } = this._calcDimensions();\n    console.log(' path initialize ', left, top, width, height, pathOffset);\n    this.set({\n      left,\n      top,\n      width,\n      height,\n      pathOffset,\n    });\n    this.canvas?.renderAll();\n  }\n\n  update({ fromPoint, toPoint, control1, control2, style }: any) {\n    let localFromPoint, localToPoint, localControl1, localControl2;\n\n    let newFrom, newTo, newControl1, newControl2;\n\n    this.prevLeft = this.left;\n    this.prevTop = this.top;\n    this.preCenter = this.getCenterPoint();\n    this.preTransform = this.calcTransformMatrix();\n\n    if (fromPoint) {\n      newFrom = fromPoint;\n      localFromPoint = TransformPointFromCanvasToObject(\n        this,\n        new Point(fromPoint)\n      );\n    } else {\n      localFromPoint = this.fromPoint;\n      newFrom = TransformPointFromObjectToCanvas(\n        this,\n        new Point(this.fromPoint)\n      );\n    }\n\n    if (toPoint) {\n      newTo = toPoint;\n      localToPoint = TransformPointFromCanvasToObject(this, new Point(toPoint));\n      //   this.toPoint = localToPoint;\n    } else {\n      localToPoint = this.toPoint;\n      newTo = TransformPointFromObjectToCanvas(this, new Point(this.toPoint));\n    }\n    if (control1) {\n      newControl1 = control1;\n      localControl1 = TransformPointFromCanvasToObject(\n        this,\n        new Point(control1)\n      );\n    } else {\n      localControl1 = this.control1;\n      newControl1 = TransformPointFromObjectToCanvas(\n        this,\n        new Point(this.control1)\n      );\n    }\n\n    if (control2) {\n      newControl2 = control2;\n      localControl2 = TransformPointFromCanvasToObject(\n        this,\n        new Point(control2)\n      );\n    } else {\n      localControl2 = this.control2;\n      newControl2 = TransformPointFromObjectToCanvas(\n        this,\n        new Point(this.control2)\n      );\n    }\n    if (style) {\n      this.style = style;\n    }\n\n    Object.assign(this, {\n      fromPoint: newFrom,\n      toPoint: newTo,\n      control1: newControl1,\n      control2: newControl2,\n      style,\n    });\n    console.log(\n      'update path fromPoint',\n      newFrom,\n      'toPoint',\n      newTo,\n      'control1',\n      newControl1,\n      'control2',\n      newControl2,\n      'style',\n      style\n    );\n    this.updatePath(false);\n    // const path = getPath(\n    //   newFrom,\n    //   newTo,\n    //   newControl1,\n    //   newControl2,\n    //   { x: 0, y: 0 },\n    //   style,\n    //   false\n    // );\n    // this.path = new Path(path).path;\n    // console.log('path', JSON.stringify(this.path));\n\n    this.set({\n      fromPoint: localFromPoint,\n      toPoint: localToPoint,\n      control1: localControl1,\n      control2: localControl2,\n      style,\n    });\n    // this.initialize();\n    // this.updateControlOffsets(new Point(0, 0));\n\n    this.updatePath(false);\n    this.setBoundingBox(false);\n    this.setCoords();\n    const offset = {\n      x: this.getCenterPoint().x - this.preCenter.x,\n      y: this.getCenterPoint().y - this.preCenter.y,\n    };\n    // loop all the controls and update the offset\n    this.updateControlOffsets(new Point(offset));\n    this.prevLeft = 0;\n    this.prevTop = 0;\n    this.preCenter = new Point(0, 0);\n    this.preTransform = null;\n\n    // this.setBoundingBox(false);\n    // const path = getPath(\n    //   fromPoint\n    //     ? fromPoint\n    //     : TransformPointFromObjectToCanvas(this, new Point(this.fromPoint)),\n    //   toPoint\n    //     ? toPoint\n    //     : TransformPointFromObjectToCanvas(this, new Point(this.toPoint)),\n    //   control1\n    //     ? control1\n    //     : TransformPointFromObjectToCanvas(this, new Point(this.control1)),\n    //   control2\n    //     ? control2\n    //     : TransformPointFromObjectToCanvas(this, new Point(this.control2)),\n    //   { x: 0, y: 0 },\n    //   style\n    // );\n    // console.log('path', path);\n    // this.set({ path });\n\n    // this.initialize();\n    this.canvas?.renderAll();\n  }\n\n  _mouseDownControl(\n    eventData: any,\n    transform: Transform,\n    x: number,\n    y: number\n  ) {\n    this.prevLeft = transform.target.left;\n    this.prevTop = transform.target.top;\n    this.preCenter = transform.target.getCenterPoint();\n    this.preTransform = transform.target.calcTransformMatrix();\n  }\n\n  _mouseUpControl(eventData: any, transform: Transform, x: number, y: number) {\n    this.updatePath(false);\n    this.setBoundingBox(false);\n    transform.target.setCoords();\n    const offset = {\n      x: transform.target.getCenterPoint().x - this.preCenter.x,\n      y: transform.target.getCenterPoint().y - this.preCenter.y,\n    };\n    // loop all the controls and update the offset\n    this.updateControlOffsets(new Point(offset));\n    this.prevLeft = 0;\n    this.prevTop = 0;\n    this.preCenter = new Point(0, 0);\n    this.preTransform = null;\n  }\n\n  _positionControl(\n    dim: Point,\n    finalMatrix: TMat2D,\n    fabricObject: InteractiveFabricObject,\n    currentControl: Control\n  ) {\n    const point = {\n      x: currentControl.offsetX,\n      y: currentControl.offsetY,\n    };\n    //@ts-ignore\n    const result = fabricObject.transformPointToViewport(point);\n\n    return result;\n  }\n\n  //responding to control movement\n  //control is the control being moved\n  //eventData is the mouse event\n  dragActionHandler(\n    controlType: string,\n    eventData: any,\n    transform: Transform,\n    x: number,\n    y: number\n  ) {\n    const target = transform.target;\n    // const relevantPoint = getLocalPoint(transform, 'center', 'top', x, y);\n    //@ts-ignore\n    const relevantPoint = target.transformPointFromCanvas(new Point(x, y));\n    console.log('dragActionHandler', controlType, x, y, relevantPoint);\n    // relevantPoint.x = relevantPoint.x ;\n    // relevantPoint.y = relevantPoint.y ;\n\n    switch (controlType) {\n      case 'start':\n        target.set({ fromPoint: relevantPoint });\n        target.controls['start'].offsetX = relevantPoint.x;\n        target.controls['start'].offsetY = relevantPoint.y;\n        break;\n      case 'end':\n        target.set({ toPoint: relevantPoint });\n        target.controls['end'].offsetX = relevantPoint.x;\n        target.controls['end'].offsetY = relevantPoint.y;\n\n        break;\n      case 'control1':\n        target.set({ control1: relevantPoint });\n        target.controls['control1'].offsetX = relevantPoint.x;\n        target.controls['control1'].offsetY = relevantPoint.y;\n\n        break;\n      case 'control2':\n        target.set({ control2: relevantPoint });\n        target.controls['control2'].offsetX = relevantPoint.x;\n        target.controls['control2'].offsetY = relevantPoint.y;\n\n        break;\n    }\n\n    const isMoving = true;\n    this.updatePath(isMoving);\n\n    target.dirty = true;\n    target.canvas?.requestRenderAll();\n\n    return true;\n  }\n\n  private updateControlOffsets(offset: Point = new Point(0, 0)) {\n    const target = this;\n    const offsetX = offset.x;\n    const offsetY = offset.y;\n\n    target.controls['start'].offsetX = target.fromPoint.x - offsetX;\n    target.controls['start'].offsetY = target.fromPoint.y - offsetY;\n\n    target.fromPoint.x -= offsetX;\n    target.fromPoint.y -= offsetY;\n\n    target.controls['end'].offsetX = target.toPoint.x - offsetX;\n    target.controls['end'].offsetY = target.toPoint.y - offsetY;\n    target.toPoint.x -= offsetX;\n    target.toPoint.y -= offsetY;\n\n    target.controls['control1'].offsetX = target.control1.x - offsetX;\n    target.controls['control1'].offsetY = target.control1.y - offsetY;\n    target.control1.x -= offsetX;\n    target.control1.y -= offsetY;\n\n    target.controls['control2'].offsetX = target.control2.x - offsetX;\n    target.controls['control2'].offsetY = target.control2.y - offsetY;\n    target.control2.x -= offsetX;\n    target.control2.y -= offsetY;\n  }\n\n  _renderControl(\n    controlType: string,\n    ctx: any,\n    left: number,\n    top: number,\n    styleOverride: any,\n    fabricObject: FabricObject\n  ) {\n    let color = 'white';\n    if (controlType === 'control1' || controlType === 'control2') {\n      color = 'blue';\n    }\n\n    const drawDottedLine = (targetControl: string) => {\n      const point = TransformPointFromObjectToCanvas2(\n        fabricObject,\n        new Point({\n          x: this.controls[targetControl].offsetX,\n          y: this.controls[targetControl].offsetY,\n        })\n      );\n\n      ctx.save();\n      ctx.strokeStyle = 'gray';\n      ctx.setLineDash([5, 5]); // Set the line dash pattern\n      ctx.beginPath();\n      ctx.moveTo(left, top);\n      ctx.lineTo(point.x, point.y);\n      ctx.closePath();\n      ctx.stroke();\n      ctx.restore();\n    };\n\n    if (controlType === 'control1') {\n      drawDottedLine('start');\n    }\n\n    if (controlType === 'control2') {\n      drawDottedLine('end');\n    }\n\n    ctx.save();\n    ctx.fillStyle = color;\n    ctx.strokeStyle = 'gray';\n    ctx.beginPath();\n    ctx.arc(left, top, 5, 0, Math.PI * 2, false);\n    ctx.closePath();\n    ctx.fill();\n    ctx.stroke();\n    ctx.restore();\n  }\n\n  updatePath(isMoving = true) {\n    const path = getPath(\n      this.fromPoint,\n      this.toPoint,\n      this.control1,\n      this.control2,\n      this.pathOffset,\n      this.style,\n      isMoving\n    );\n\n    console.log('updatePath', JSON.stringify(path));\n\n    this.path = new Path(path).path;\n    this.dirty = true;\n  }\n  setBoundingBox(adjustPosition?: boolean) {\n    const preMatrix = this.calcTransformMatrix();\n    const { left, top, width, height, pathOffset } = this._calcDimensions();\n\n    //the new left/top after transformation\n    const newLeftTop = new Point(left, top).transform(preMatrix);\n\n    this.set({\n      left: newLeftTop.x,\n      top: newLeftTop.y,\n      width,\n      height,\n      pathOffset,\n    });\n  }\n}\n\nexport { X_Connector };\n\n// todo: why TransformPointFromObjectToCanvas and TransformPointFromObjectToCanvas2 is different? why it works for one doesn't work for another?\nexport const TransformPointFromObjectToCanvas = (\n  object: FabricObject,\n  point: Point\n) => {\n  const mObject = object.calcOwnMatrix();\n  // const mCanvas = object.getViewportTransform();\n  // const matrix = multiplyTransformMatrices(mCanvas, mObject);\n  const transformedPoint = point.transform(mObject); // transformPoint(point, matrix);\n  return transformedPoint;\n};\n\nexport const TransformPointFromCanvasToObject = (\n  object: FabricObject,\n  point: Point\n) => {\n  const mObject = object.calcOwnMatrix();\n  // const mCanvas = object.canvas!.viewportTransform;\n  // const matrix = multiplyTransformMatrices(mCanvas, mObject);\n  const invertedMatrix = invertTransform(mObject);\n  const transformedPoint = point.transform(invertedMatrix);\n  return transformedPoint;\n};\n\nexport const TransformPointFromObjectToCanvas2 = (\n  object: FabricObject,\n  point: Point\n) => {\n  const mObject = object.calcTransformMatrix();\n  const mCanvas = object.canvas!.viewportTransform;\n  const matrix = multiplyTransformMatrices(mCanvas, mObject);\n  const transformedPoint = point.transform(matrix); // transformPoint(point, matrix);\n  return transformedPoint;\n};\n"],"names":["getPath","fromPoint","toPoint","control1","control2","offset","style","isMoving","arguments","length","undefined","path","x","y","concat","X_Connector","Path","constructor","options","_defineProperty","initialize","type","objectCaching","localFromPoint","TransformPointFromCanvasToObject","Point","localToPoint","localControl1","localControl2","set","controls","_objectSpread","createObjectDefaultControls","start","Control","offsetX","offsetY","mouseDownHandler","_mouseDownControl","bind","mouseUpHandler","_mouseUpControl","positionHandler","_positionControl","actionHandler","dragActionHandler","cursorStyle","render","_renderControl","end","_this$canvas","left","top","width","height","pathOffset","_calcDimensions","console","log","canvas","renderAll","update","_ref","_this$canvas2","newFrom","newTo","newControl1","newControl2","prevLeft","prevTop","preCenter","getCenterPoint","preTransform","calcTransformMatrix","TransformPointFromObjectToCanvas","Object","assign","updatePath","setBoundingBox","setCoords","updateControlOffsets","eventData","transform","target","dim","finalMatrix","fabricObject","currentControl","point","result","transformPointToViewport","controlType","_target$canvas","relevantPoint","transformPointFromCanvas","dirty","requestRenderAll","ctx","styleOverride","color","drawDottedLine","targetControl","TransformPointFromObjectToCanvas2","save","strokeStyle","setLineDash","beginPath","moveTo","lineTo","closePath","stroke","restore","fillStyle","arc","Math","PI","fill","JSON","stringify","adjustPosition","preMatrix","newLeftTop","object","mObject","calcOwnMatrix","transformedPoint","invertedMatrix","invertTransform","mCanvas","viewportTransform","matrix","multiplyTransformMatrices"],"mappings":"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"}