renderPlainContainerContent function
String
renderPlainContainerContent(
{ - required String content,
- required int contentHeight,
- required int targetWidth,
- required int targetHeight,
- required int marginLeft,
- required int marginTop,
- required int padLeft,
- required int padTop,
- required int alignedX,
- required int alignedY,
})
Implementation
String renderPlainContainerContent({
required String content,
required int contentHeight,
required int targetWidth,
required int targetHeight,
required int marginLeft,
required int marginTop,
required int padLeft,
required int padTop,
required int alignedX,
required int alignedY,
}) {
final lines = content.split('\n');
final buffer = StringBuffer();
final contentX = marginLeft + padLeft + alignedX;
final contentY = marginTop + padTop + alignedY;
final blankLine = ' ' * targetWidth;
for (var y = 0; y < targetHeight; y++) {
if (y > 0) buffer.write('\n');
final sourceY = y - contentY;
if (sourceY < 0 || sourceY >= contentHeight || sourceY >= lines.length) {
buffer.write(blankLine);
continue;
}
var line = lines[sourceY];
final maxLineWidth = math.max(0, targetWidth - contentX);
if (maxLineWidth <= 0) {
buffer.write(blankLine);
continue;
}
var lineWidth = Layout.visibleLength(line);
if (lineWidth > maxLineWidth) {
line = Layout.truncate(line, maxLineWidth, ellipsis: '');
lineWidth = Layout.visibleLength(line);
}
final prefixWidth = contentX.clamp(0, targetWidth);
final suffixWidth = math.max(0, targetWidth - prefixWidth - lineWidth);
buffer
..write(' ' * prefixWidth)
..write(line);
if (suffixWidth > 0) {
if (_mayLeaveTerminalStateOpen(line)) {
buffer.write(_ansiResetStyleForPlainComposition);
}
buffer.write(' ' * suffixWidth);
}
}
return buffer.toString();
}