flush method

TextDrawer<T> flush({
  1. TextDrawerHAlign halign = .left,
  2. TextDrawerVAlign valign = .top,
})

Draws the buffered segments aligned relative to the parent's current cursor, then advances the parent past the sentence.

Implementation

TextDrawer<T> flush({
  TextDrawerHAlign halign = .left,
  TextDrawerVAlign valign = .top,
}) {
  final startX = switch (halign) {
    .left => _parent._x,
    .center => _parent._x - _totalWidth / 2,
    .right => _parent._x - _totalWidth,
  };

  final drawY = switch (valign) {
    .top => _parent._y,
    .middle => _parent._y - _parent._fontSize / 2,
    .bottom => _parent._y - _parent._fontSize,
  };

  var x = startX;
  for (final seg in _segments) {
    if (seg is _TextSegment) {
      _parent.backend.render.drawText(
        seg.content, x, drawY, _parent._fontSize, seg.color ?? .WHITE,
      );
      x += seg.width;
    } else if (seg is _GapSegment) {
      x += seg.width;
    }
  }

  _parent._x = halign == .left ? x : _parent._x;
  return _parent;
}