drawEllipse method
void
drawEllipse(})
Draws an ellipse outline at (centerX, centerY) with radiusX and radiusY in sub-pixel coordinates.
Implementation
void drawEllipse(
int centerX,
int centerY,
int radiusX,
int radiusY, {
bool value = true,
bool antiAliased = false,
Style? cellStyle,
}) {
if (radiusX < 0 || radiusY < 0) return;
var x = 0;
var y = radiusY;
final rx2 = radiusX * radiusX;
final ry2 = radiusY * radiusY;
var dx = 2 * ry2 * x;
var dy = 2 * rx2 * y;
// Region 1
var p = (ry2 - rx2 * radiusY + 0.25 * rx2).round();
while (dx < dy) {
_drawEllipsePoints(
centerX,
centerY,
x,
y,
value,
antiAliased: antiAliased,
cellStyle: cellStyle,
);
if (p < 0) {
x++;
dx += 2 * ry2;
p += dx + ry2;
} else {
x++;
y--;
dx += 2 * ry2;
dy -= 2 * rx2;
p += dx - dy + ry2;
}
}
// Region 2
p = (ry2 * (x + 0.5) * (x + 0.5) + rx2 * (y - 1) * (y - 1) - rx2 * ry2)
.round();
while (y >= 0) {
_drawEllipsePoints(
centerX,
centerY,
x,
y,
value,
antiAliased: antiAliased,
cellStyle: cellStyle,
);
if (p > 0) {
y--;
dy -= 2 * rx2;
p += rx2 - dy;
} else {
y--;
x++;
dx += 2 * ry2;
dy -= 2 * rx2;
p += dx - dy + rx2;
}
}
}