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.
deprecate ncvisual_geom() in favor of new ncvisual_blitter_geom(), which allows caller to get the blitter used. replace the checks and calculations in ncvisual_render() with a call to ncvisual_blitter_geom(), unifying the two paths (and eliminating several bugs in the unloved ncvisual_geom()).
Deprecate ncplane_align(), after rewriting it as a passthrough
to new function ncplane_halign(). Add ncplane_valign(). Update
all callers. Closes#1468.
Add `notcurses_check_pixel_support()` and
`ncdirect_check_pixel_support()` per #1367. Removes
NCOPTION_VERIFY_SIXEL, again per #1367. Adds
`free_terminfo_cache()`, and calls it from both
`notcurses_stop_minimal()` and `ncdirect_stop()`.
Update all documentation. Closes#1371 and #1367.
After a long delay, apologies :)
Added:
* NotCurses: `can_sextant` (`notcurses_cansextant`)
* Notcurses: `linesigs_enable` (`notcurses_linesigs_enable`)
* Notcurses: `linesigs_disable` (`notcurses_linesigs_disable`)
* Pile: `top_with` (`ncpile_top`)
* Pile: `bottom_with` (`ncpile_bottom`)
* Plane: `resize_maximize` (`ncplane_resize_maximize`)
* Plane: `get_abs_x` (`ncplane_abs_x`)
* Plane: `get_abs_y` (`ncplane_abs_y`)
* Plane: `get_abs_yx` (`ncplane_abs_yx`)
* Plane: `load_egc32` (`cell_load_egc32`)
* Plane: `is_descendant_of` (`ncplane_descendant_p`)
* Progbar: new class, wraps `ncprogbar_*`
Changed:
* Plane (ABI break): `at_cursor` overloads now return `int` where
before they returned `bool` because the underlying Notcurses API
only signalled the operation status with the return value while now
it returns actual information.
Don't bias the nccell width by 1, or 0-length EGCs become
255 columns. We weren't actually using the width to drive
much anything until now, so this wasn't a problem, but it
is exposed as an error once we got rid of CELL_WIDE_ASIAN
and start looping through the actual egc column width.
Closes#1278, closes#1277
Add a new member 'sextants' to the terminfo cache (both
notcurses and ncvisual contain one of these, and both
initialize it the same way -- interrogate_terminfo()).
Add a new function, 'notcurses_media_defblitter()', and
deprecate 'ncvisual_default_blitter()' (the latter didn't
receive enough information to return NCBLIT_3x2). Update
all callers. Add new *internal* function rgba_default_blitter(),
so this logic can be freely changed in the future. If
sextants are available, and we're scaling, return NCBLIT_3x2.
Once we detect sextant availability, we'll have sexblitter
as a default -- stay tuned! #1114
Thread out ncls to perform the media decode in different threads, in parallel. Only the display needs be locked. On a directory of 200 files on my 39070X, this speeds ncls from ~5s to ~1s. On 75 files, we go from ~.5s to ~.2s. On a single file, we lose about 5%. To facilitate this, ncdirect_render_image() has been split into two helpers, ncdirect_render_frame() and ncdirect_raster_frame().
CMake:
Simplify cmake target+version config generation and make it actually
work. With the changes it is now possible to detect and use
`Notcurses` in the following way:
find_package(Notcurses REQUIRED)
...
target_link_libraries(myapp PRIVATE notcurses::notcurses)
Also, added the same CMake configuration for `Notcurses++`, to be used
in the following way:
find_package(Notcurses REQUIRED
find_package(Notcurses++ REQUIRED)
...
target_link_libraries(myapp PRIVATE notcurses++::notcurses++)
Docs:
`notcurses_cell(3)`: `cell_styles_{on,off} -> cell_{on,off}_styles`
and `cell_load_simple` -> `cell_load_char`
C++ API:
* Plane: added constructors taking `ncplane_options const&` instead of
the multitude of individual parameters
* Plane: drop `struct` when `ncplane_options` is used.
* Plane: added `strdup` (`cell_strdup`)
* Plane: added `extract` (`cell_extract`)
Added:
* Pile: new class derived from Plane, which implements all the
`ncpile_*` calls
* Plane: `get_parent` (`ncplane_parent`)
* Plane: protected constructor for use by `Pile` (or other derived
classes which cannot provide a valid `ncplane*` when invoking parent
constructor.
* Plane: `set_plane` for use by the derived classes above.
Changed:
* Plane: `to_ncplane` is a `const` method now.