Commit Graph

349 Commits

Author SHA1 Message Date
nick black
e17f7198e7
printf(%lc) is wint_t not wchar_t 2020-08-06 03:08:00 -04:00
nick black
2dcab374c4 mojibake: fix some row overruns #842 2020-07-31 23:05:09 -04:00
nick black
fe904cc8da resize PoC: restore bottom stanza 2020-07-31 23:05:09 -04:00
nick black
c1c1238e7e resize PoC: add some functionality #842 2020-07-31 23:05:09 -04:00
nick black
78a7b4d255 constify ncreader_options->egc 2020-07-30 03:50:44 -04:00
nick black
1a82273231
selector: handle nonzero defidx with zero maxdisplay #834 2020-07-29 08:23:10 -04:00
nick black
2b4b516260
selector PoC: use CHANNELS_RGB_INITIALIZER() 2020-07-29 04:08:32 -04:00
nick black
7174a84e94 zoo: add multiselector 2020-07-29 01:15:50 -04:00
nick black
ab2710cf7a
selector poc: improve background contrast 2020-07-28 22:46:26 -04:00
nick black
bac02bccd0
selector/multiselect: kill itemcount options field #831 2020-07-28 22:42:49 -04:00
nick black
0bd73e2f1f
CMake: drop dirgb from test suite due to excess output 2020-07-22 16:38:23 -04:00
nick black
8e34f7525b
rgb/rgbgb pocs: use alternate screen 2020-07-22 14:59:14 -04:00
Nick Black
82676cd395 linuxconjammer/linuxconsole PoCs: compile on freebsd 2020-07-16 14:33:42 -04:00
nick black
86a75531c6
Support newlines in ncplane_putnstr() when scrolling #793 2020-07-15 18:37:54 -04:00
nick black
1c95241948
fileroller/procroller: check widget destructor for error #793 2020-07-13 05:26:29 -04:00
Nick Black
dbc83c41b3
linuxconsole PoC (#791)
* use ioctl(KDGETMODE) to detect Linux console
* diagnostic on KDGETMODE
* add logdebug()
* unit test for notcurses_drop_planes(), add ncplane_putnstr_aligned()
* linuxconsole PoC
* linuxconsole: dump unicode->font table
* linuxconsole: explode glyphs
* linuxconsole: show 7 glyphs per 'line'
* linuxconjammer: shim console font with half blocks
* signals: handler for SIGTERM
* man pages: update notcurses_init() for options
* add NCOPTION_NO_FONT_CHANGES #201
2020-07-13 01:21:41 -04:00
nick black
a6b002fa77 add ncdirect box-drawing functions #753 2020-07-10 18:41:25 -04:00
nick black
96c6dc8e16 add ncdirect_canopen_images() and ncdirect_canutf8() #753 2020-07-10 18:41:25 -04:00
nick black
c783244185 ncdirect_hline_interp(), ncdirect_vline_interp(), dirlines PoC #753 2020-07-10 18:41:25 -04:00
nick black
750f88b70a split direct into its own header 2020-07-10 18:41:25 -04:00
nick black
718abd648a ncdirect_render_image: add alignment #759 2020-07-03 21:24:00 -04:00
nick black
2fa8de9813 ncdirect: silence ffmpeg #759 2020-07-03 21:24:00 -04:00
nick black
eba7106067 ncdirect_clear: use ->clearscr, kill off bogon ->clear #759 2020-07-03 21:24:00 -04:00
nick black
b829398538 ncdirect_render_image: accept ncalign_e parameter #759 2020-07-03 21:24:00 -04:00
nick black
46d75c072a ncdirect_render_image(): don't take current x into account #759 2020-07-03 21:24:00 -04:00
nick black
74b44506b6 vizdirect: use all three scaling types #759 2020-07-03 21:24:00 -04:00
nick black
f7fc665c13
Acquire and use ttyfd properly in ncdirect #752
When we don't have an actual terminal in ncdirect, return
placeholder 80x24 for ncdirect_dim_y()/ncdirect_dim_x(), but
don't go querying e.g. a redirected file for its dimensions.
Similarly, only request info about cursor position from a true
TTY (we're otherwise likely to hang, or at best get meaningless
data). Rewrite 'direct' PoC to use ncdirect_dim_*().
Add tty_emit(). Closes #752.
2020-07-03 15:28:28 -04:00
Nick Black
415d4b813f
Tight work on unit testing, controlling tty vs output fd (#758)
* Some things go to the FILE* we're provided. Some can only go to a controlling terminal. Check to see if the FILE we're given is a TTY. If not, open up /dev/tty #752.
* term_emit(): fflush() can return EAGAIN. Loop on it to eliminate a rare error on shutdown that particularly affected unit tests (where we start and shut down Notcurses many times in a row).
* sgr poc: check return value of setlocale()
* drone: run all unit tests
* CMake: add some tests using PoCs
* ncneofetch: print even small palettes
2020-07-02 18:03:52 -04:00
nick black
4863c7e3df
ncdirect_image_render: restore NCBLIT_2x2 #751 2020-07-01 01:14:42 -04:00
nick black
8a2f86ea16 vizdirect: use DFSG-safe media only #725 2020-06-30 00:18:02 -04:00
nick black
40d0efcece ncdirect_render_image(): just about working #725 2020-06-30 00:18:02 -04:00
nick black
277cbc9c16 ncdirect_render_image(): getting closer #725 2020-06-30 00:18:02 -04:00
nick black
9fe48f8539 procroller/fileroller: enable scrolling on standard plane 2020-06-28 05:50:42 -04:00
nick black
78c2cef7e9
Use NCBLIT_2x2 by default with NCSCALE_STRETCH
We're not using NCBLIT_2x2 by default because it warps the
aspect ratio. If we're using NCSCALE_STRETCH, though, we've
(1) already indicated that aspect ratio isn't terribly
important to us and (2) are trying to maximize the space.
Since NCBLIT_2x2 is best for large images anyway, make it
the default when NCSCALE_STRECTH is being used.

Remove all explicit uses of NCBLIT_2x2 when NCSCALE_STRETCH
is being used in notcurses-demo.
2020-06-25 14:09:15 -04:00
nick black
cadd0ae283 quadblitter: fix arguments to channel_rgb() #667 2020-06-14 03:54:10 -04:00
Nick Black
0084dbaa6d
qrcode generalization #699 (#713)
Add convenience function ncplane_home(). Add an ncblitter_e param
to ncplane_qrcode(), and split int maxversion into value-result
int* ymax and int* xmax. Write the actual sizes of the resulting
visual into these parameters. Update the qrcode demo. Add the
qrcode PoC. Update demos to ncplane_home(), where possible.

ncplane_qrcode() now takes an ncblitter_e and two value-result int*s
in the place of a single value int. The final size of the displayed qrcode
is written to *ymax and *xmax. If the code can't fit within the specified
dimensions, an error is returned. Standard rules for pluggable blitters
apply regarding fallback etc. #699
2020-06-13 22:24:50 -04:00
nick black
3936d1b528
adapt callers of ncvisual_geom() 2020-06-12 00:53:34 -04:00
nick black
20322fe805
demo improvements for ASCII mode (#696)
* eagle: use new ncvisual_geom() to properly zoom
* qrcode: skip for now (#699)
* luigi: draw with spaces, not full blocks
2020-06-09 05:12:30 -04:00
nick black
1ffd871784
blocks poc: handle std coredump-free #645 2020-06-08 04:37:42 -04:00
nick black
6e7996f1a8
notcurses_init: properly check flags for unknowns 2020-06-07 16:11:21 -04:00
nick black
b2dcc50606
notcurses_options: fold bools into flags 2020-06-07 05:08:46 -04:00
nick black
d863220e23
add pixels PoC 2020-06-06 21:38:05 -04:00
nick black
2c417ddb0c
yield demo: punch up with polyfills 2020-06-06 05:11:45 -04:00
nick black
deda0ff681
mention notcurses_reader.3 in notcurses.3 2020-06-05 05:56:29 -04:00
nick black
9a0f0c66fe
ncblit: accept an ncvisual_options #680 2020-06-05 03:47:13 -04:00
nick black
e1d34c4f43
ncplane_highgradient: only pass a single channel #676 2020-06-05 00:36:42 -04:00
Nick Black
de23139111
Open some whoopass on ncvisual rotation (#677)
Whip the ol' llama's ass (fix ncvisual rotation)

* notcurses: flush cursor change requests #673
* rotator: verify ncplane_rgba and ncblit_rgba
* ncblit: rename, accept ncblitter_e #674
* rotator: render from rgba
* rotator: get to rotation
* rotator: add a pi/4 turn at the end
* normal: reuse incoming plane for rendering #672
* rotator poc: rotate a fullplane gradient #672
* normal demo: place visual correctly
* rotator: verify ncplane_rgba and ncblit_rgba
* ncblit: rename, accept ncblitter_e #674
* rotator: render from rgba
* rotator: add a pi/4 turn at the end
* normal: reuse incoming plane for rendering #672
* rotator poc: rotate a fullplane gradient #672
* normal demo: place visual correctly
* rotator poc: throw some red into gradient
* rotator poc: done #662
* oiio: ncvisual_resize() needs set ibuf pointer #662
* normal: only need erase at top of loop
* visual poc: shorter delay
* normal demo: center rendered visual
* comment ncvisual_resize() call
* ncvisual_rotate: call ncvisual_details_seed()
* ffmpeg ncvisual: fix rotation #662
2020-06-04 22:47:38 -04:00
nick black
efa51e9cf2 quadrant blitter #648
Novel blitter using Unicode quadrant glyphs. 2:1 cell aspect ratio, but
double the horizonal resolution of the half block blitter.
2020-06-02 18:33:04 -04:00
nick black
38c0509d86
notcurses_init: properly initialize rstate cursor
When we first begin operations, we need emit a cursor homing, which
we were not doing for the first line. As a result, the first row
didn't show up until you rendered something else, and even then
didn't show up unless you changed it (as it was otherwise undamaged).
This explains a lot of mystery behavior in notcurses-demo that I've
long told myself I'd hallucinated or imagined. Hurrah! but also
supershittytothemax! Thanks Marek Habersack for pointing out something
which led to an experiment which led to chasing this down once and
forever. Closes #619, w00t!
2020-06-01 09:42:22 -04:00
nick black
0331ae4c4c
introduce NCVISUAL_OPTION_BLEND #652 2020-05-29 14:53:53 -04:00
nick black
33318254b2
absorb first ncvisual_decode into ncvisual_from_file() #655 2020-05-29 08:39:11 -04:00
Nick Black
ebcba82d4b
Fully general ncvisual layer (#647)
This represents an essentially complete rewrite of ncvisual and associated code. It had two major goals:

Improve the ncvisual API based off lessons learned, pursuant to the upcoming API freeze. In particular, I wanted to:

decouple ncvisuals from ncplanes. It should be possible to render a ncvisual to multiple planes, with different scaling each time. It should be possible to create an ncvisual without a plane, etc.
normalize the various ways of constructing an ncvisual -- file, memory, plane, etc.
Support multiple blitters, from 7-bit ASCII to Sixel. This required writing the blitters in several cases, and they're not yet in their final implementations (but the API is fine)
I have not yet unified Plots and Visuals, and might not, given that the Plot code works fine. We could at this point implement Plots in terms of Visuals, though -- the blitter backend range has been unified. Sixel is not yet implemented, though it is listed.

There is a new POC tool, blitter. It renders its arguments using all possible blitter+scaling combinations. Another new POC, resize, displays its argument, then resizes it to the screen size and displays that, explicitly making use of ncvisual_resize() rather than a scaling parameter to ncvisual_render().

This also eliminates some memory leaks and bugs we were seeing in trunk, and brings in Sixel scaffolding.

The C++ wrapper will also need patching back up; I cut most of it down while wrestling with this crap, urk.

Closes #638, #562, and #622.
2020-05-28 21:16:58 -04:00
Marek Habersack
b5d8549bb3 [C++] Allow multiple instances of NotCurses
This is to make it possible, in the future, to create multiple instances
of `NotCurses` for multiple terminals.  The first instance of
`NotCurses` becomes the default one, so that any instances of other
classes that aren't explicitly created with a pointer to another
`NotCurses` instance still work as expected.

Note that currently trying to call `notcurses_init` twice results in the
following error for me:

    0x55555559bfc0 is already registered for signals
    Couldn't drop signals: 0x55555559bfc0 != 0x5555555b6720
    terminate called after throwing an instance of 'ncpp::init_error*'

    Program received signal SIGABRT, Aborted.

The error is signalled by `setup_signals` and the pointer shown in the
message points to the first `struct notcurses` instance created.
2020-05-26 04:34:31 -04:00
nick black
8971bda0c2 ncpp: stop() resets _instance, add unit test #538 2020-05-24 03:34:46 -04:00
nick black
ba8d80d444
procroller: don't recurse on argv[0], whoops 2020-05-22 09:16:41 -04:00
nick black
7e12436196
reader poc: fix Plane memory leak #624 2020-05-21 18:08:19 -04:00
nick black
57fb7fc96a
sgr poc: don't put critical logic in assert() #624 2020-05-21 18:03:36 -04:00
nick black
f9f76046d5
sgr poc: don't put critical logic in assert() #624 2020-05-21 18:02:53 -04:00
nick black
37a4114f42
O(1) z-axis moves #623
Replace the singly-linked z-axis with a doubly-linked list,
and reimplement all z-axis moves as O(1) functions.
Eliminate ncplane_move_{above/below}_unsafe(), as there are no
longer unsafe moves.
2020-05-20 15:32:27 -04:00
nick black
bcdf513e31
direct poc: exit out on bad ncdirect_cursor_up() 2020-05-19 09:08:10 -04:00
nick black
7f2888269f
all PoCs: use NCOPTION_INHIBIT_SETLOCALE 2020-05-19 08:44:39 -04:00
nick black
5081ed048c
do an OIIO rotate() #559 2020-05-13 07:35:31 -04:00
nick black
7aa488f419
ncvisual_rotate: perfect rotate_bounding_box() #599 2020-05-13 02:30:08 -04:00
Nick Black
f602c440a6
ncvisual_rotate() for arbitrary radians (#600)
* normal/visual: need dup stdplane for rotate
* add ncplane_center(), unit tests
* ncplane_center_abs(): add, unit tests
* ncvisual_bounding_box() for #599
* ncvisual_rotate(): works via bounding box #599
* normal demo: comment out broken section
* rotate: resize underlying plane as needed #599
* ncvisual_rotate: support negative rads #599
2020-05-12 22:57:28 -04:00
nick black
9a80750316
notcurses_canopen: split into images/videos #598 2020-05-12 20:10:53 -04:00
nick black
eaaa36f0c8
ncreader: ncplane as first arg #590 2020-05-09 08:41:19 -04:00
nick black
fec423264f
selector: undo switch to notcurses from ncplane 2020-05-09 07:51:23 -04:00
nick black
f6a7adc7e8
reader PoC: print content on exit 2020-05-09 06:44:00 -04:00
nick black
006f430e10
selector poc: kill #ifdef 2020-05-09 03:50:27 -04:00
nick black
3eb99b2447
reader: advance/backspace across lines #585 2020-05-09 01:12:45 -04:00
nick black
1c394dc103 modernize c++ according to clang-tidy-11 2020-05-08 21:42:04 -04:00
nick black
5b0d773fb5 modernize some PoC c++ according to clang-tidy 2020-05-08 21:42:04 -04:00
nick black
ba94919de7 rgbbg: modernize c++ 2020-05-08 21:42:04 -04:00
nick black
06e4b9f06b NEWS: mention ncplane_set_channels() 2020-05-08 21:42:04 -04:00
nick black
989ca7ff9a selector->ncselector, multiselector -> ncmultiselector #580 2020-05-08 21:42:04 -04:00
nick black
196de625c4 reader poc: render after each change to reader area #403 2020-05-08 21:42:04 -04:00
nick black
f2546c0949 reader poc: initialize ncreader_options #403 2020-05-08 21:42:04 -04:00
nick black
48de25821c ncreader man page #403 2020-05-08 21:42:04 -04:00
nick black
980e0ff29a ncreader: use underscore by default #403 2020-05-08 21:42:04 -04:00
nick black
4819c0e1c3 selector/multiselect: accept notcurses 2020-05-08 21:42:04 -04:00
nick black
94e42809fe
notcurses_resize(): kill unnecessary memset() 2020-05-07 01:25:32 -04:00
nick black
3f93d15cda
widestomp: apply clang-tidy-11 fixes 2020-05-07 00:18:12 -04:00
nick black
20d0048838
CMake improvements/cleanup #565
Rather than inspecting CMAKE_BUILD_TYPE manually and setting
DEBUG_OPTIONS based off the results, set CMAKE_{C/CXX}_FLAGS_DEBUG,
and allow that to be picked up by CMake #565. Remove repeated -W
flags that were all over the place, making them global compiler
flags. Remove repeated FORTIFY=2 definition that was all over the
place, making it a global compiler definition. Remove all uses of
${DEBUG_FLAGS}. Also, since CMake doesn't define a CMAKE_BUILD_TYPE
by default, instead just setting neither debugging nor optimization
flags, in what seems a pretty fucking boneheaded move, set it by
default to RelWithDebInfo. ugh. Explicitly disuse unused PoC variables.
2020-05-06 05:24:23 -04:00
Marek Habersack
e23d5baea4 [C++] Sync API changes
Added:

  * class FDPlane (`ncfdplane*`)
  * class Subproc (`ncsubproc*`)
  * NotCurses: get_inputready_fd (`notcurses_inputready_fd`)
  * Plane: qrcode (`ncplane_qrcode`)
  * class PlotBase: templated base class for Plot variations
  * class PlotU: `uint64_t` instantiation of PlotBase (aliased to previous
    `Plot` class for source compatibility), `ncuplot*`
  * class PlotD: `double` instantiation of PlotBase, `ncdplot*`
2020-05-04 05:39:01 -04:00
nick black
6e0fd72e33
proc/fileroller: don't call ncfdplane_destroy() from within callbacks 2020-05-02 03:33:30 -04:00
nick black
7d1e3c77c8 oiio: image scaling #535, subimages for video #536 2020-04-26 18:33:52 -04:00
nick black
f92a5805bd
pocroller/fileroller: destroy widgets 2020-04-25 17:55:59 -04:00
nick black
d904b2b8c1
scroll/cjkscroll: remove unused variables 2020-04-25 17:52:04 -04:00
Nick Black
9a075ae5d0
Support image decoding with OpenImageIO #453 (#534)
* fedora: dep on OpenImageIO, and use it
* fedora: dep on libqrcodegen-devel
* fedora: BuildRequires OpenEXR-devel
* tight check on USE_MULTIMEDIA
* CMake: enable notcurses-view for ffmpeg OR oiio
* notcurses-view: don't reach into libav
* oiio: ncvisual_render() #453
* oiio: need our own properly-offset ncvisual_plane()
* `visual` poc: accept optional command line argument
* oiio: work for 3-channel images #453
* oiio: destroy ncvisual's plane if we own it #453
* notcurses_visual.3: s/FFmpeg/multimedia/g
2020-04-25 15:52:23 -04:00
nick black
0b4ada19b1 Remove AVFrame from API #532 2020-04-24 04:17:56 -04:00
nick black
2037cdfacb move libav.c to nc_err_e #532 2020-04-24 04:17:56 -04:00
nick black
ad0685aa1b switch to nc_err_e #532 2020-04-24 04:17:56 -04:00
nick black
7da3847b50
ncsubproc: get client exit notification #310 2020-04-21 10:14:17 -04:00
nick black
16a336fd21
ncsubproc: tease apart from ncfdplane 2020-04-21 08:45:07 -04:00
nick black
3e853f6635
ncsubproc: map new pipe onto stdio #310 2020-04-21 03:51:54 -04:00
nick black
04f90fa1ea
ncsubproc: launch processes, make pipes
link to LWN article in History section of README.md.
2020-04-21 03:33:04 -04:00
nick black
ee15d4c1f4
new procroller PoC 2020-04-21 01:50:25 -04:00
Nick Black
fe8034b5e0
ncfdplane, fileroller PoC, ncfdplane unit tests, qrcodes #24 #514 (#524)
* first draft of ncsubproc spec
* qrcode first draft #24
* demo: add qrcode demo skeleton, entries #24
* qrcode demo #24
* fedora python build changes from @dcantrell
* ncplane_qrcode() works #24
* add some flash to the qrcode demo #24
* drone: use newest builders
* fix up rgb PoC
* drop jungle demo to 100Hz target
* add fd.c
* ncfd skeletons
* more ncfdplane #514
* ncfdp i/o loop
* ncfp: improve uinit test, write core
* firm up ncfdplane #514
* fileroller PoC #514
* ncplane: allow '\n' in stream when scrolling #523
2020-04-20 23:26:41 -04:00
Nick Black
1c7796a2b0
ncdirect_cursor_yx, ncdirect_cursor_pop, ncdirect_cursor_push #401 (#492)
* ncdirect_cursor_{push, pop, yx} declarations #401
* direct PoC: invoke ncdirect_cursor_yx() #401
* direct PoC: move to top of screen #401
* OTHERS.md: mention blessings
* ncdirect_cursor_yx working #401
* CHANGELOG: mention ncdirect_cursor_*() #401
2020-04-18 07:11:33 -04:00
Nick Black
c6a9997554
Normalize ncplane_at_* / ncplane_set_base() (#479)
* ncplane_at_* and ncplane_at_cursor_*

We had notcurses_at_yx() expanding into three distinct parts of
the cell structure, and ncplane_at_yx() / ncplane_at_cursor()
writing directly to a cell. It was annoying to remember which
was which. The latter two now have a signature matching
notcurses_at_yx(), while the old functionality has been moved
to ncplane_at_yx_cell() and ncplane_at_cursor_yx(). #476
2020-04-18 00:09:14 -04:00
nick black
6ec9b2d250 hrm 2020-04-16 11:41:20 -04:00
nick black
c6aa99afba eliminate infinite loop in mathtext PoC 2020-04-15 16:53:56 -04:00
Marek Habersack
64eeb95f1e [C++] Optionally enable throwing exceptions on errors
Nick prefers error handling based on exceptions in all cases, while I
prefer to save exception handling for truly exceptional situations -
function parameter validation and class constructor. However, there's no
need to not support both approaches, to be chosen at the discretion of
the developer.

NCPP follows RAII and all classes throw exceptions from their
constructors in case they cannot initialize properly. Likewise,
functions taking pointers that are required validate them and throw
exceptions whenever the requirement isn't met.

This commit goes one step further in that it enables optional validation
of notcurses function return values and throwing an
exception (`ncpp::call_error`) should the function signal an error. This
is disabled by default but it can be enabled by defining the
`NCPP_EXCEPTIONS_PLEASE` macro (preferably on the command line or
before *each* inclusion of any NCPP headers).

Out of necessity, this breaks the ABI (plus I found a handful of minor
issues in the code), but I think it's worth having this support in
place.
2020-04-15 12:10:14 -04:00
nick black
a5a2b5646a add PoC scroller #443 2020-04-15 11:37:57 -04:00
Marek Habersack
28976dfef2 [C++] Sync API changes
Been a while, but here goes, sync to the latest API changes.

Added:

  * Direct:   cursor_{up,left,right,down} (`ncdirect_cursor_{up,left,right,down}`)
  * Plane: constructors to use `ncplane_bound`
  * Plane: reparent (`ncplane_reparent`)
  * Plot: definition of `default_options`

Changed:

  * Plane (breaking): the `*gradient*` functions now return `int`
  * Plane (breaking): `polyfill` returns `int`
  * Plane (breaking): `stain` returns `int`
  * Plane (breaking): `blit_bgrx` takes `const void*` for `data`
  * Plane (breaking): `blit_rgba` takes `const void*` for `data`
  * Plot: `plot_optons` -> `ncplot_options`
  * Plot (breaking): `{add,set}_sample` now return `bool`
2020-04-11 20:44:25 -04:00
nick black
f9c85442cd
poc sgr: purge unused variable 2020-04-10 13:00:53 -04:00
nick black
1d0e2d6fd6
pocs (selector/multiselec) kill unused label 2020-04-10 13:00:12 -04:00
nick black
1ccfd9b962
menu poc: remove unused variable 2020-04-10 12:58:48 -04:00
nick black
7d80e81a27
geom: remove unused variables 2020-04-10 12:58:04 -04:00
nick black
2c2da61c72
ncdirect: add relative move functions #419 2020-04-08 09:07:49 -04:00
nick black
a54cc6c85f fix rgbbg PoC for scrolling era 2020-04-08 05:48:51 -04:00
Nick Black
d66549d362
Prep for Fedora packaging (#452)
* jungle demo should be available outside of DFSG builds
* libav: blitters don't need FFMpeg
* CMake: threads independent of ffmpeg
* CMake: add USE_TESTS option to disable tests #450
* tetris: work without ffmpeg
* fedora: flesh out specfile #328
* menu poc: don't use ffmpeg at all
* compile PoCs with binary/include
* multiselect PoC: work without ffmpeg
2020-04-08 02:12:46 -04:00
nick black
312d15d0f9
mathtext poc: enable scrolling 2020-04-07 16:20:08 -04:00
nick black
5e27499194 add notcurses-keyplot #430 2020-04-03 05:51:02 -04:00
nick black
ae1421db15
ncvisual_render() API change/documentation #422
ncvisual_render() now returns the number of cells emitted
rather than just 0/-1. -1 is still returned on failure.
Rather than 0 for length meaning "all possible length", it
now means 0, and -1 means "all possible length". All demos,
tests, and PoCs have been updated. #422
2020-03-24 18:43:10 -04:00
nick black
0432a8a444
poc/zalgo: center output 2020-03-24 01:17:15 -04:00
nick black
12b601e02b
fallin': always push back NULLed out subwindows
I noticed while running benchmarks against ranges of widths that
we failed on certain widths. I traced this down to a repeatable
failure when run with the -c flag at the 104x52 resolution. At this
geometry and PRNG seed, we NULLed out the first subwindow of fallin',
but didn't recompress the window array. On the next loop we thus used
it again, and segfaulted out. This fixes that up. We now pass 100% of
the benchmarks, whereas we were failing about 3% before #407.
2020-03-19 08:25:08 -04:00
Marek Habersack
3e78dd7d1f [C++] API sync
New classes:

   * MultiSelector (`ncmultiselector_*`)

Added:

   * Direct: cursor_{enable,disable}
   * Plane: high_gradient (`ncplane_highgradient`)
   * Plane: high_gradient_sized (`ncplane_highgradient_sized`)
   * Plane: rotate_cw (`ncplane_rotate_cw`)
   * Plane: rotate_ccw (`ncplane_rotate_ccw`)

Updated:

   * NotCurses: added all the margin initializers to the default options
2020-03-14 21:49:32 -04:00
nick black
a46393b035 ncmultiselect: get space rigged up #322 2020-03-09 15:31:16 -04:00
nick black
4abe078eae ncmultiselector #322 2020-03-09 15:31:16 -04:00
nick black
667ac14549 ncmultiselector: draw properly 2020-03-09 15:31:16 -04:00
nick black
a9c64a8c8b yummy covid-19 2020-03-09 15:31:16 -04:00
nick black
635d6e5751 ncmultiselect demo 2020-03-09 15:31:16 -04:00
nick black
c355e26d0f
add zalgo poc 2020-03-03 01:41:42 -05:00
nick black
c6a3f93691
ncmenu: check mouse clicks for presence #306 2020-03-02 23:28:10 -05:00
nick black
5a8107b788
ncdirect: preserve colors on sgr #391 2020-03-02 20:43:30 -05:00
nick black
bb579d0d05
notcurses_directmode()->ncdirect_init() 2020-03-02 20:19:16 -05:00
nick black
b6438e415d
poc/geom: three new stupid unicode tricks 2020-02-24 22:01:16 -05:00
nick black
a09bdc4ade
Add seqnum field to ncinput #374 2020-02-24 18:11:39 -05:00
nick black
a626178b16
ncdirect: cursor movement / geom detection #382 2020-02-24 16:30:51 -05:00
nick black
2b0efddb27 poc/menu: make menu items visible 2020-02-23 23:57:27 -05:00
nick black
773b85e81e poc/menu: kill brown-bagger, add backgrounds #383 2020-02-23 23:57:27 -05:00
nick black
bdd0917ea4
selector: transparent where we aren't 2020-02-23 09:38:58 -05:00
nick black
a9298e89e3
selector: scroll with mouse #305 2020-02-23 04:14:48 -05:00
Nick Black
e6637e81cc
Prep for serious rusting #101 (#354)
* CMake: add USE_PANDOC, USE_DOXYGEN options #101
* README: mention rust
* start integrating rust into build #101
* CMake: add USE_NETWORK option for cargo
* Debian: build-dep on doxygen
* rust: colloquy checks in Cargo.lock
* extract NCKEY defines into their own include
* colloquy: use clap to parse CLI args
* CMake: unify option namespace
* Python: update include path
* Rust: fix up --frozen workings for -DUSE_NETWORK=off
* CMake: abstract out colloquy a little
* Sync direct.hh to the New Way
2020-02-18 12:36:16 -05:00
Marek Habersack
e429724287 [C++] API sync + some (breaking) changes
Added:

 * Plane: gradient (`ncplane_gradient`)
 * Plane: gradient_sized (`ncplane_gradient_sized`)
 * NotCurses: drop_planes (`ncplane_drop_planes`)
 * NcReel: constructor which takes `Plane&`
 * Visual: constructors which take `Plane const*`, `Plane&` and `Plane const&`)
 * ncpp_build: a nonsensical "demo" which exists purely to test whether
   the C++ builds and does absolutely nothing interesting.

Broke:
 * All exceptions throw temporary objects instead of allocated
   instances. Less typing in `catch` :P (and more conventional)
2020-02-18 12:30:13 -05:00
nick black
1130938d4f
remove poc/jungle.c 2020-02-17 17:34:38 -05:00
nick black
ce3e5d112e add ncdirect_clear() #343 2020-02-14 05:38:08 -05:00
nick black
d8c42d4d1e
ncmenu_selected() fills in an ncinput #333 2020-02-12 09:11:28 -05:00
nick black
bfd3d173d9
poc/visual: refer to DFSG media 2020-02-12 07:22:09 -05:00
nick black
204181b706
ncselector_offer_input() and rewrite pocselector #333 2020-02-10 20:25:45 -05:00
nick black
b0c72607c4
ncmenu_offer_input(), use it in demo/pocmenu #333 2020-02-10 20:22:23 -05:00
nick black
74b9690cf3
ncmenu: remove dumb restrictions/special casing 2020-02-10 15:18:28 -05:00
nick black
71dbfd74f7 ncmenu: step around alignment NULL #332 2020-02-09 06:30:17 -05:00
nick black
25e2f59f4b ncmenu: searching for cause of discoloration #329 2020-02-09 06:30:17 -05:00
nick black
5b20651836 demo: add menu, but disable for now 2020-02-07 09:19:08 -05:00
nick black
09ff64e19f
ncdirect_style_*() #321 2020-02-05 02:52:45 -05:00
nick black
ab3a91c5d0
python for ncdirect 2020-02-04 04:16:16 -05:00
nick black
2a9f3c5ab3
ncmenu_selected(), update docs #179 2020-02-04 01:05:51 -05:00
nick black
10a269c963
ncmenu: reject double menu 2020-02-04 00:08:03 -05:00
nick black
79a92fcfb1
ncmenu: highlight shortcut keys for menu items 2020-02-03 22:14:29 -05:00
nick black
553f81da4e
ncmenu: unicode shortcut test 2020-02-03 21:35:41 -05:00
nick black
3821b66bc7
menu: highlight (bold+uline) section shortcuts 2020-02-03 21:32:04 -05:00
nick black
ee6eb1a37b
ncmenu: support iteration within a section 2020-02-03 01:07:58 -05:00
nick black
fa88f9b525
ncmenu: nextsection/prevsection 2020-02-02 19:02:52 -05:00
nick black
ce965fcbcd ncmenu: add unroll and rollup #179 2020-02-02 12:57:32 -05:00
nick black
2118c5d81a menu: draw background only onto header row #179 2020-02-02 12:57:32 -05:00
nick black
db53b36d94 ncmenu: calculate height based off sections #179 2020-02-02 12:57:32 -05:00
nick black
31a07dab33
menu: extend across width of screen #179 2020-02-02 06:02:57 -05:00
nick black
015ce4764e ncmenu: set up the section headers #179 2020-02-02 05:13:40 -05:00
nick black
fdc541c6e5 copy over menu elements #179 2020-02-02 05:13:40 -05:00
nick black
54c57b3487 s/CELL_STYLE/NCSTYLE/ throughout 2020-02-02 05:13:40 -05:00
nick black
8984422f1e basics of menu #179 2020-02-02 05:13:40 -05:00
nick black
6e642f1749 more menu work #179 2020-02-02 05:13:40 -05:00
nick black
44f80694a3
selector: bind with ┴ where appropriate #309 2020-02-01 14:24:56 -05:00
nick black
4716b5f495
selector: bind riser to body #309 2020-02-01 14:01:20 -05:00
nick black
eab1ce0262
selector: align secondary/footer #302 2020-01-31 20:38:58 -05:00
nick black
fad612bd2f
Use column width in selector calculations #302 2020-01-31 19:51:14 -05:00
nick black
d30df23f43
selector: support non-zero default idx #302 2020-01-30 22:42:25 -05:00
nick black
a57f0f234c
selector styling 2020-01-30 22:16:03 -05:00
Nick Black
da0283ac25
Selector widget #166, subtitles #95 (#301)
Get rid of annoying empty line in notcurses-view (and ncvisuals at offsets in general)
Implement most of the Selector widget. Need to add styling and scrolling still. #166
Reenable ubuntu focal build
Subtitles! We decode them, and display them in notcurses-view. If ncvisual_simple_streamer() is provided an extra ncplane, it will use it to display subtitles. #95
We now build Python by default, as things are working much better.
ncplane_set_base() now takes channel, attrword, and EGC, so you can usually avoid having to set up and release a cell. ncplane_set_base_cell() takes over duty from ncplane_set_base() for ease of conversion.
notcurses-demo and notcurses-view now both accept a 0 for delay multiplier, meaning 'go as fast as you possibly can'. Very small multipliers (e.g. 0.00001) no longer cause floating point exceptions.
fading routines no longer cause floating point exceptions on very small timescales.
2020-01-30 08:55:01 -05:00
nick black
4e19d51e57
geom: tighten things up a bit 2020-01-27 00:58:34 -05:00
nick black
652cfbc9f1
more dumb geometry block tricks 2020-01-25 22:35:26 -05:00
nick black
c3d4ac8caa
geom.c: PoC fun with geometric shapes 2020-01-25 22:21:47 -05:00
nick black
81b58234ee
direct mode: reset terminal, check vals #77 2020-01-25 01:37:51 -05:00
nick black
1fd0563093
Direct mode with its own type #77
Introduce the new type 'ncdirect', a stripped-down 'notcurses'
suitable for inline modification of regular output. Used the new
type because otherwise there were going to be if(directmode) checks
everywhere. Direct mode encompasses only colorizing and styling.
Add new man page notcurses_directmode(3). Add new section to README.
Add new PoC using direct mode RGB. Update demo table summary to use
direct mode.
2020-01-25 01:13:04 -05:00
nick black
83e40d3472
direct mode RGB PoC 2020-01-24 23:29:13 -05:00
nick black
2ea10d4b28 Remove clear_screen_start option
As it turns out, we can't portably load the initial terminal contents
(there are some hacks of various EXTREME nature, but none of them are
worth it for the rather limited benefit). The O(1)-time damage
inference requires knowledge of what was previously present to
inibit unnecessary draws. We would then need some special cell value
indicating "not yet written to" to distinguish a purposeful null
cell from an initial cell. Again, we could do this, but for what value?

Finally, the idea of clearing new area on SIGWINCH was always flawed,
as we can't do that from a signal handler.

With the advent of direct mode #77, the reason for this largely goes
away in any case.
2020-01-24 04:06:41 -05:00
Marek Habersack
75a90461dd Add C++ bindings 2020-01-22 06:47:43 -05:00
nick black
02698ebbd1
add jungle demo 2020-01-18 16:08:25 -05:00
nick black
7860e1eace first start of fallin' demo 2020-01-17 08:35:28 -05:00
nick black
adf808110d
convert remaining man1 pages to pandoc 2020-01-14 16:20:24 -05:00
nick black
b1995190c4 don't be an asshole 2020-01-12 07:46:38 -05:00
nick black
b8e11e5ef4 poc mathtext works now #260 2020-01-12 07:46:38 -05:00
nick black
602b34bc0c mathtext: full strings #260 2020-01-12 00:09:37 -05:00
nick black
d055faed9a add mathtext PoC #260 2020-01-12 00:09:37 -05:00
nick black
c7558550f4 drop sprite-enhalfen 2020-01-03 05:51:27 -05:00
Nick Black
2fbc94e41c
Higher planes obliterate bisected wide glyphs #158 (#243)
* higher planes stomp wide glyphs
* broken unit test
* develop out widestomp PoC
* fix notcurses_at_yx()
* fix up dig_visible_cell() return value
* refuse wide glyph on last column #242
* set adjacent cell wide when rendering #158
* xray: eliminate weird color flicker
* witherworm: don't eat wide glyphs
* unit test for boxed glyph
* uniblock: no need to emit so many U+200Es
* witherworm: remove wide glyph hack
2020-01-01 06:41:19 -05:00
nick black
7f82ac6f16 ULTRAMEGAOK: mouse-moveable HUD #162 2019-12-27 02:48:13 -05:00
nick black
7424b3b78c
grid: fix boundary conditions on large displays 2019-12-24 23:55:48 -05:00
nick black
4a7409ebda
sprite-enhalfen tool 2019-12-18 08:16:36 -05:00
Nick Black
957549105b
Wide character rigor (#117) (#157)
* unidamage PoC
* add cell_load_simple()
* clear CELL_WIDEASIAN_MASK in cell_load()
* split out render code
* add CELL_SIMPLE_INITIALIZER
* widecolor: fix message plane
* widecolor: simplify color increments
* document wide character handling
* unit tests for wide obliteration #117
* widechar obliteration hardening #117
* widecolor -> widechomper, update man page
2019-12-18 04:38:43 -05:00
nick black
0f175e58d3
unidamage PoC #117 2019-12-17 00:33:51 -05:00
nick black
a916d929db
RGBtoANSI: fixup lower grey onversions, looks reasonable now #4 2019-12-15 23:13:13 -05:00
Nick Black
ff463d464e
Channels API sanity #119 (#138)
* orthogonalize channel/channels/cells APIs #119
* sync README.md with new ncplane channels api #119
2019-12-14 05:33:34 -05:00
nick black
e71fa57e54
add 'rgb' PoC, fix setlocale() mention 2019-12-12 08:13:14 -05:00
nick black
c0b10a8f32
enable sgr/sgr0 #73 2019-12-12 06:21:16 -05:00
nick black
1ccb747e72
sgr: support disabling ALTCHARSET 2019-12-12 05:06:07 -05:00
nick black
3a79cbf469
proof of concept support. sgr binary 2019-12-12 04:52:59 -05:00