/** @inheritDoc */
  public void lineTo(PointFP point) {
    if (point.equals(currPoint)) {
      return;
    }

    LineFP head, tail;
    calcHeadTail(currPoint, point, head = new LineFP(), tail = new LineFP());

    if (drawingCurve) {
      if (lastCurveTail != null) {
        curvePath1.addLineTo(lastCurveTail.pt1);
        curvePath2.addLineTo(lastCurveTail.pt2);
      }
      lastCurveTail = new LineFP(tail);
    } else {
      if (needDrawStartCap) {
        startCapP1 = new PointFP(currPoint);
        startCapP2 = new PointFP(point);
        needDrawStartCap = false;
      }
      addLineJoin(lastPoint, currPoint, point);

      outline.addMoveTo(head.pt1);
      outline.addLineTo(tail.pt1);
      outline.addLineTo(tail.pt2);
      outline.addLineTo(head.pt2);
      outline.addLineTo(head.pt1);
      outline.addClose();
      lastPoint = new PointFP(currPoint);
    }
    super.lineTo(point);
  }
 /** @inheritDoc */
 public void moveTo(PointFP point) {
   finishCurrentSegment();
   needDrawStartCap = true;
   closed = false;
   startCapP1 = startCapP2 = null;
   super.moveTo(point);
 }
 /** @inheritDoc */
 public void curveTo(PointFP control1, PointFP control2, PointFP point) {
   curveBegin(control1);
   super.curveTo(control1, control2, point);
   curveEnd(control1, control2, point);
 }
 /** @inheritDoc */
 public void quadTo(PointFP control, PointFP point) {
   curveBegin(control);
   super.quadTo(control, point);
   curveEnd(control, control, point);
 }