nccell_width() ought simply consult the nccell's width
field to get a column count (it was written before the
rearrangement of nccell). do so. fix up the macros
CELL_CHAR_INITIALIZER and CELL_INITIALIZER to assign a
width of 1 for non-printing characters, matching the
behavior of utf8_egc_len() on whitespace. instead of
hard-coding the logic in ncplane_put() for multicolumn
glyphs, call nccell_wide_right_p() and wide_left_p().
use nccell_width() in ncplane_putc_yx(), fixing it for
glyphs of more than 2 columns.
Replace notcurses_render_to_file() and
notcurses_render_to_buffer() with variants that work
on arbitrary piles (the former only worked on the standard
pile). Rewrite the former as trivial wrappers around the
latter, and deprecate the former. Closes#1770.
All our diagnostic macros required a struct notcurses from
which to extract the loglevel. Eliminate this parameter,
and update all caller sites. Add a library-wide (but not
exported) loglevel variable, and set it from both
notcurses_core_init() and ncdirect_core_init(). Add two
new direct mode flags, NCDIRECT_OPTION_VERBOSE and
NCDIRECT_OPTION_VERY_VERBOSE, mapping them to
NCLOGLEVEL_WARNING and NCLOGLEVEL_INFO respectively.
Closes#1690.
- add type aliases: NcDirectF (NcVisual alias), NcDirectV (NcPlane alias).
- implement wrapper methods for the `ncdirect_*` functions on NcDirectF.
- the methods over NcDirectF are prefixed with `ncdirectf_` to distinguish them
from the other NcVisual methods (since they are both type aliases, they
share their methods).
- fix typos in `direct.h`:
- ncdirect_geom_frame > ncdirectf_geom()
- ncdirect_render_loaded_frame > ncdirectf_render()
- add NcVGeom struct.
- minor fixes & rustfmt.
ncplane_as_rgba: genericize across blitters
ncplane_as_rgba() previously was implemented explicitly
in terms of NCBLIT_2x1. it now uses the `egcs` field of the
`blitset`. this supports NCBLIT_2x2 and NCBLIT_3x2 in
ncplane_rgba(). Closes#1490.
Writing a partial escape can easily lock up a terminal. This
is especially relevant when working with bitmaps, as they're
thousands or even millions of times longer than a typical
escape. Immediately before writing, block SIGINT, SIGQUIT, and
SIGTERM in the writing thread, and unblock them upon emerging
(at which point we'll immediately see any queued signal
get delivered). Don't block signals like SIGSEGV that would
seem indicative of actual problems. For this to actually work,
all other threads must also have the signals masked; we thus
now add them to the signal mask of notcurses_getc(), rather
than deleting them. Closes#1416.
* Paint sprixels in order, bottom-to-top
We don't want to have to track sprixel order whenever someone
moves an ncplane, so just keep a list growing backwards as we
pass top-to-bottom in notcurses_render_internal(). Each time
we hit a sprixel plane, splice it out of the sprixel list, and
add it to the front of our temporary list. When we hit the
bottom, stick this temporary list on the end of our existing
list (any such planes are to be deleted, which comes before
drawing). Closes#1575.
* reorder collected sprixellist; solves kitty but breaks sixel =/ #1575
* remove debugging cruft
* [rust] fix up mergedown mutability