draw method

  1. @override
void draw(
  1. TextCanvas canvas
)
override

Implementation

@override
void draw(TextCanvas canvas) {
  final height = measureHeight();

  final alignment = cell.canonicalStyle.alignment ?? TextAlignment.TopLeft;

  final top = () {
    switch (alignment) {
      case TextAlignment.TopLeft:
      case TextAlignment.TopCenter:
      case TextAlignment.TopRight:
        return topPadding;
      case TextAlignment.MiddleLeft:
      case TextAlignment.MiddleCenter:
      case TextAlignment.MiddleRight:
        return ((canvas.height - height) ~/ 2) + topPadding;
      case TextAlignment.BottomLeft:
      case TextAlignment.BottomCenter:
      case TextAlignment.BottomRight:
        return canvas.height - height + topPadding;
    }
  }();

  var index = 0;

  for (final line in cell.cell.content.split('\n')) {
    final lineWidth = leftPadding +
        (cell.canonicalStyle.paddingRight ?? 0) +
        line.visualCodePointCount;
    final left = () {
      switch (alignment) {
        case TextAlignment.TopLeft:
        case TextAlignment.MiddleLeft:
        case TextAlignment.BottomLeft:
          return leftPadding;
        case TextAlignment.TopCenter:
        case TextAlignment.MiddleCenter:
        case TextAlignment.BottomCenter:
          return ((canvas.width - lineWidth) ~/ 2) + leftPadding;
        case TextAlignment.TopRight:
        case TextAlignment.MiddleRight:
        case TextAlignment.BottomRight:
          return canvas.width - lineWidth + leftPadding;
      }
    }();

    canvas.write(top + index, left, line);
    index++;
  }
}