Fill a single row with ' ' cells of the given style. Cheaper than
calling setGrapheme per cell because it skips the per-cell
stringWidth(' ') lookup, the in-bounds check, and the wide-char
continuation-cell branch — none of which fire for plain space. Used
by the painter to lay down a background colour or attribute strip
before the actual text characters get written on top.
Pop the most recent scissor. Calling with an empty stack is a no-op.
Push a clipping rect onto the scissor stack. Subsequent cell writes are
filtered through the intersection of the current stack — writes outside
the active rect are dropped silently. Pair every push with a popScissor().
Set a single cell. Caller must respect wide-char invariants.
Write a single grapheme cluster at (x, y). Wide characters consume two cells; the second cell is marked as a continuation (width 0).
Plain ASCII output (no ANSI), useful for snapshots.
Convert the frame to a printable string. When ansi is true (default),
SGR sequences are emitted on style changes; when false, only characters
(no escapes) are emitted.
Write a string at (x, y), splitting into grapheme clusters and respecting wide-char widths. Returns the cell width consumed (may be less than the string's natural width if it would overflow). Any cluster that would cross the right edge is dropped.
Fill a rectangle with the given style, leaving chars unchanged.