paint method
Default paint implementation.
RenderBox paints no self-content; it forwards painting to its RenderBox children. Subclasses override to draw their own content.
Implementation
@override
void paint(PaintingContext context, Offset offset) {
if (size.width <= 0 || size.height <= 0) return;
final layout = _layout;
if (layout == null) return;
final absoluteX = offset.dx + x;
final absoluteY = offset.dy + y;
final availableWidth = size.width;
final textWidth = layout.maxLineWidth;
final maxLinesLimit = _maxLinesLimit(layout);
final linesToRender = math.min(size.height, maxLinesLimit);
if (linesToRender <= 0) {
return;
}
var textX = absoluteX;
switch (_alignment) {
case TextAlignment.left:
break;
case TextAlignment.center:
textX =
absoluteX +
((availableWidth - textWidth).clamp(0, availableWidth) ~/ 2);
case TextAlignment.right:
textX =
absoluteX + (availableWidth - textWidth).clamp(0, availableWidth);
}
final needsWidthClip = textWidth > availableWidth;
final needsHeightClip = layout.lineCount > linesToRender;
final hasClip = needsWidthClip || needsHeightClip;
context.canvas.drawTextLayout(
layout,
Offset(textX, absoluteY),
sourceRect: hasClip
? Rect.fromLTWH(0, 0, availableWidth, linesToRender)
: null,
selection: _selection,
);
if (_overflow == TextOverflow.ellipsis &&
(needsWidthClip || needsHeightClip)) {
final ellipsis = _ellipsisForWidth(availableWidth);
if (ellipsis.isNotEmpty) {
final ellipsisLineY = absoluteY + linesToRender - 1;
final ellipsisX =
absoluteX + availableWidth - terminalStringWidth(ellipsis);
_paintEllipsis(context, ellipsisX, ellipsisLineY, ellipsis);
}
}
}