renderPlainContainerContent function

String renderPlainContainerContent({
  1. required String content,
  2. required int contentHeight,
  3. required int targetWidth,
  4. required int targetHeight,
  5. required int marginLeft,
  6. required int marginTop,
  7. required int padLeft,
  8. required int padTop,
  9. required int alignedX,
  10. 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();
}