private void addLineCap(PointFP p1, PointFP p2, int lineCap) {
    if (lineCap == PenFP.LINECAP_BUTT || p1.equals(p2)) {
      return;
    }
    int dx = p2.x - p1.x;
    int dy = p2.y - p1.y;
    int len = PointFP.distance(dx, dy);
    PointFP[] cap =
        lineCap == PenFP.LINECAP_ROUND ? GraphicsPathFP.ROUNDCAP : GraphicsPathFP.SQUARECAP;

    dx = MathFP.mul(ff_rad, MathFP.div(dx, len));
    dy = MathFP.mul(ff_rad, MathFP.div(dy, len));

    MatrixFP m = new MatrixFP(dx, dx, dy, -dy, p2.x, p2.y);
    outline.addMoveTo(new PointFP(0, GraphicsPathFP.ONE).transform(m));
    for (int i = 0; i < cap.length; i++) {
      outline.addLineTo(new PointFP(cap[i]).transform(m));
    }
    outline.addLineTo(new PointFP(0, -GraphicsPathFP.ONE).transform(m));
    outline.addClose();
  }