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