addEllipse method

void addEllipse(
  1. double x,
  2. double y,
  3. double width,
  4. double height,
)

Add an ellipse approximated by Bezier curves.

Implementation

void addEllipse(double x, double y, double width, double height) {
  // Approximate ellipse with 4 cubic Bezier curves.
  final cx = x + width / 2;
  final cy = y + height / 2;
  final rx = width / 2;
  final ry = height / 2;
  // Magic number for Bezier approximation of a circle quadrant.
  const k = 0.5522847498;

  moveTo(cx + rx, cy);
  curveTo(cx + rx, cy + ry * k, cx + rx * k, cy + ry, cx, cy + ry);
  curveTo(cx - rx * k, cy + ry, cx - rx, cy + ry * k, cx - rx, cy);
  curveTo(cx - rx, cy - ry * k, cx - rx * k, cy - ry, cx, cy - ry);
  curveTo(cx + rx * k, cy - ry, cx + rx, cy - ry * k, cx + rx, cy);
  closePath();
}