draw method

Size draw(
  1. Canvas canvas,
  2. Paint paint,
  3. String text,
  4. TextDrawConfig config,
)

Implementation

Size draw(Canvas canvas, Paint paint, String text, TextDrawConfig config) {
  if (!show || text.isEmpty) {
    return Size.zero;
  }

  TextOverflow? textOverflow = overFlow == OverFlow.cut ? TextOverflow.clip : null;
  String? ellipsis = textOverflow == TextOverflow.ellipsis ? '\u2026' : null;
  TextPainter painter = textStyle.toPainter(
    text,
    ellipsis: config.ellipsis ?? ellipsis,
    maxLines: config.maxLines,
    textAlign: config.textAlign,
    textDirection: config.textDirection,
    textScaleFactor: config.scaleFactor.toDouble(),
  );
  painter.layout(minWidth: config.minWidth.toDouble(), maxWidth: config.maxWidth.toDouble());
  if (painter.height > config.maxHeight) {
    int maxLineCount = config.maxHeight ~/ (painter.height / painter.computeLineMetrics().length);
    maxLineCount = max(1, maxLineCount);
    painter = textStyle.toPainter(
      text,
      ellipsis: config.ellipsis ?? ellipsis,
      maxLines: maxLineCount,
      textAlign: config.textAlign,
      textDirection: config.textDirection,
      textScaleFactor: config.scaleFactor.toDouble(),
    );
    painter.layout(minWidth: config.minWidth.toDouble(), maxWidth: config.maxWidth.toDouble());
  }

  Offset leftTop = _computeAlignOffset(config.offset, config.align, painter.width, painter.height);
  Offset center = leftTop.translate(painter.width / 2, painter.height / 2);
  canvas.save();
  canvas.translate(center.dx, center.dy);
  if (rotate != 0) {
    canvas.rotate(rotate * pi / 180);
  }
  if (decoration != null) {
    Path path = Path();
    path.addRect(Rect.fromCenter(center: Offset.zero, width: painter.width, height: painter.height));
    decoration?.drawPath(canvas, paint, path);
  }

  Offset textOffset = Offset(-painter.width / 2, -painter.height / 2);
  painter.paint(canvas, textOffset);
  canvas.restore();
  return Size(painter.width, painter.height);
}