mouseMove (mouseX, mouseY) {
      const zoom = svgCanvas.getZoom()
      hasMoved = true
      const drawnPath = svgCanvas.getDrawnPath()
      if (svgCanvas.getCurrentMode() === 'path') {
        if (!drawnPath) { return }
        const seglist = drawnPath.pathSegList
        const index = seglist.numberOfItems - 1

        if (newPoint) {
          // First point
          // if (!index) { return; }

          // Set control points
          const pointGrip1 = svgCanvas.addCtrlGrip('1c1')
          const pointGrip2 = svgCanvas.addCtrlGrip('0c2')

          // dragging pointGrip1
          pointGrip1.setAttribute('cx', mouseX)
          pointGrip1.setAttribute('cy', mouseY)
          pointGrip1.setAttribute('display', 'inline')

          const ptX = newPoint[0]
          const ptY = newPoint[1]

          // set curve
          // const seg = seglist.getItem(index);
          const curX = mouseX / zoom
          const curY = mouseY / zoom
          const altX = (ptX + (ptX - curX))
          const altY = (ptY + (ptY - curY))

          pointGrip2.setAttribute('cx', altX * zoom)
          pointGrip2.setAttribute('cy', altY * zoom)
          pointGrip2.setAttribute('display', 'inline')

          const ctrlLine = svgCanvas.getCtrlLine(1)
          assignAttributes(ctrlLine, {
            x1: mouseX,
            y1: mouseY,
            x2: altX * zoom,
            y2: altY * zoom,
            display: 'inline'
          })

          if (index === 0) {
            firstCtrl = [mouseX, mouseY]
          } else {
            const last = seglist.getItem(index - 1)
            let lastX = last.x
            let lastY = last.y

            if (last.pathSegType === 6) {
              lastX += (lastX - last.x2)
              lastY += (lastY - last.y2)
            } else if (firstCtrl) {
              lastX = firstCtrl[0] / zoom
              lastY = firstCtrl[1] / zoom
            }
            svgCanvas.replacePathSeg(6, index, [ptX, ptY, lastX, lastY, altX, altY], drawnPath)
          }
        } else {
          const stretchy = getElement('path_stretch_line')
          if (stretchy) {
            const prev = seglist.getItem(index)
            if (prev.pathSegType === 6) {
              const prevX = prev.x + (prev.x - prev.x2)
              const prevY = prev.y + (prev.y - prev.y2)
              svgCanvas.replacePathSeg(
                6,
                1,
                [mouseX, mouseY, prevX * zoom, prevY * zoom, mouseX, mouseY],
                stretchy
              )
            } else if (firstCtrl) {
              svgCanvas.replacePathSeg(6, 1, [mouseX, mouseY, firstCtrl[0], firstCtrl[1], mouseX, mouseY], stretchy)
            } else {
              svgCanvas.replacePathSeg(4, 1, [mouseX, mouseY], stretchy)
            }
          }
        }
        return
      }
      // if we are dragging a point, let's move it
      if (path.dragging) {
        const pt = svgCanvas.getPointFromGrip({
          x: path.dragging[0],
          y: path.dragging[1]
        }, path)
        const mpt = svgCanvas.getPointFromGrip({
          x: mouseX,
          y: mouseY
        }, path)
        const diffX = mpt.x - pt.x
        const diffY = mpt.y - pt.y
        path.dragging = [mouseX, mouseY]

        if (path.dragctrl) {
          path.moveCtrl(diffX, diffY)
        } else {
          path.movePts(diffX, diffY)
        }
      } else {
        path.selected_pts = []
        path.eachSeg(function (_i) {
          const seg = this
          if (!seg.next && !seg.prev) { return }

          // const {item} = seg;
          const rubberBox = svgCanvas.getRubberBox()
          const rbb = getBBox(rubberBox)

          const pt = svgCanvas.getGripPt(seg)
          const ptBb = {
            x: pt.x,
            y: pt.y,
            width: 0,
            height: 0
          }

          const sel = rectsIntersect(rbb, ptBb)

          this.select(sel)
          // Note that addPtsToSelection is not being run
          if (sel) { path.selected_pts.push(seg.index) }
        })
      }
    }
@param {Float} mouseX
@param {Float} mouseY
@returns {void}