in packages/devtools_app/lib/src/charts/chart.dart [621:711]
void drawSymbol(
Canvas canvas,
PaintCharacteristics characteristics,
double x,
double y,
bool aggregateEvents,
Path symbolPathToDraw,
) {
PaintingStyle firstStyle;
PaintingStyle secondStyle;
switch (characteristics.symbol) {
case ChartSymbol.disc:
case ChartSymbol.filledSquare:
case ChartSymbol.filledTriangle:
case ChartSymbol.filledTriangleDown:
firstStyle = PaintingStyle.fill;
break;
case ChartSymbol.ring:
case ChartSymbol.square:
case ChartSymbol.triangle:
case ChartSymbol.triangleDown:
firstStyle = PaintingStyle.stroke;
break;
case ChartSymbol.concentric:
firstStyle = PaintingStyle.stroke;
secondStyle = PaintingStyle.fill;
break;
case ChartSymbol.dashedLine:
break;
}
final paintFirst = Paint()
..style = firstStyle
..strokeWidth = characteristics.strokeWidth
..color = aggregateEvents
? characteristics.colorAggregate
: characteristics.color;
switch (characteristics.symbol) {
case ChartSymbol.dashedLine:
drawDashed(
canvas,
characteristics,
x,
y,
chartController.tickWidth - 4,
);
break;
case ChartSymbol.disc:
case ChartSymbol.ring:
canvas.drawCircle(Offset(x, y), characteristics.diameter, paintFirst);
break;
case ChartSymbol.concentric:
// Outer ring.
canvas.drawCircle(Offset(x, y), characteristics.diameter, paintFirst);
// Inner disc.
final paintSecond = Paint()
..style = secondStyle
..strokeWidth = 0
// TODO(terry): Aggregate for concentric maybe needed someday.
..color = aggregateEvents
? characteristics.colorAggregate
: characteristics.concentricCenterColor;
canvas.drawCircle(
Offset(x, y),
characteristics.concentricCenterDiameter,
paintSecond,
); // Circle
break;
case ChartSymbol.filledSquare:
case ChartSymbol.filledTriangle:
case ChartSymbol.filledTriangleDown:
case ChartSymbol.square:
case ChartSymbol.triangle:
case ChartSymbol.triangleDown:
// Draw symbol centered on [x,y] point (*).
final path = symbolPathToDraw.shift(
Offset(
x - characteristics.width / 2,
y - characteristics.height / 2,
),
);
canvas.drawPath(path, paintFirst);
break;
default:
final message = 'Unknown symbol ${characteristics.symbol}';
assert(false, message);
logger.log(message, logger.LogLevel.error);
}
}