void drawSymbol()

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);
    }
  }