Commit Graph

617 Commits

Author SHA1 Message Date
nick black
fa92e0ffe8
purge stray #undef #1046 2020-10-07 04:24:49 -04:00
nick black
c6c157a5ad
notcurses_stats_alloc() everywhere 2020-10-07 04:24:10 -04:00
nick black
0a3f697bc7
c++ ncplane: braces around initializer 2020-10-07 02:24:01 -04:00
nick black
f9e2c7863b
add notcurses_stats_alloc #1043 2020-10-06 23:33:28 -04:00
nick black
270b1b20ee implement notcurses_render_to_buffer() #214 2020-10-04 11:43:25 -04:00
nick black
b4f1065f69 declare notcurses_render_to_buffer() #214 2020-10-04 11:43:25 -04:00
nick black
29c7f960cc add writeout_ stats, document stats #1039 2020-10-04 10:04:02 -04:00
Marek Habersack
a29bfe9c42 [C++] Deal with widgets grabbing full ownership of Panel
Fixes: https://github.com/dankamongmen/notcurses/issues/1009

Whenever a widget is created with its `*_create` function it currently
claims full ownership of the passed panel, including its destruction.
However, the C++ wrapper around the panel is not aware of this and will
attempt to destroy the native panel in the destructor, leading to
segfaults.

Fix this by introduction of a `Widget` class which contains the logic to
properly modify the `Panel` instance to not double-destroy the native
panel.  The solution is a bit fragile since the `Panel` instance is left
intact (we can't free it for the user) in a state that's safe for the
C++ wrapper, but calling any C function via the wrapper **will** pass a
`NULL` pointer in the panel argument - therefore the C functions MUST be
proofed against this.  The proofing belongs in the C backend code since
this protects also C and other language binding users from such abuse.

The Widget class will first verify that the passed `Plane` instance
hasn't already been "disowned" and will throw an exception to the effect
if it was.  Next, it will proceed to take over ownership of the native
panel instance and mark the passed `Panel` as "invalid" (i.e. not owning
any native panel instance anymore)

The above changes require modification of `Panel` instances and so all
the widget constructors taking `const*` or `const&` have been removed
from widget classes.
2020-10-03 13:19:49 -04:00
nick black
683217ef07 normalize style setters #1034 2020-09-29 13:09:44 -04:00
nick black
174a00b56c
add deprecated nctablet_ncplane() for old binaries 2020-09-29 11:59:33 -04:00
nick black
6ddf105746
uninline ncplane_new() so older binaries continue to link 2020-09-29 11:52:48 -04:00
nick black
c236b65266 name standard plane 'std' 2020-09-28 07:08:17 -04:00
nick black
a591e11c96 retain nctablet_ncplane() as deprecated alias 2020-09-28 07:08:17 -04:00
nick black
afd444cea3
kill stray decl ncdirect_getc_nonblocking() #1028 2020-09-28 01:28:46 -04:00
nick black
20bf1ae2d4
nctablet_ncplane() -> nctablet_plane() 2020-09-27 16:46:39 -04:00
nick black
ec85dd1c3b
ncreel_destroy: return void 2020-09-27 15:57:03 -04:00
Marek Habersack
943e23535f [C++] API sync
Fixes: https://github.com/dankamongmen/notcurses/issues/1025

Added:
  * Direct: flush (`ncdirect_flush`)
  * Direct: getc (`ncdirect_getc_blocking` and `ncdirect_getc_nblock`)
  * Direct: getc (`ncdirect_getc`)
  * Direct: get_inputready_fd (`ncdirect_inputready_fd`)
  * NotCurses: align (`notcurses_align`)
  * NotCurses: ucs32_to_utf8 (`notcurses_ucs32_to_utf8`)
  * NotCurses: get_bottom (`notcurses_bottom`)
  * Plane: resize_realign (`ncplane_resize_realign`)
  * Plane: get_x (`ncplane_x`)
  * Plane: get_y (`ncplane_y`)
  * Plane: mergedown (`ncplane_mergedown`)
  * Plane: putwc_stained (`ncplane_putwc_stained`)
  * Plane: putstr_stained (`ncplane_putstr_stained`)
  * Plane: set_fchannel (`ncplane_set_fchannel`)
  * Plane: set_bchannel (`ncplane_set_bchannel`)
  * Plane: get_styles (`ncplane_styles`)
  * Plane: get_above (`ncplane_above`)
  * Reader: move_left (`ncreader_move_left`)
  * Reader: move_right (`ncreader_move_right`)
  * Reader: move_up (`ncreader_move_up`)
  * Reader: move_down (`ncreader_move_down`)
  * Reader: write_egc (`ncreader_write_egc`)
  * Visual: get_default_blitter (`ncvisual_default_blitter`)

Fixed:
  * NotCurses: `cursor_{enable,disable}` must use `NOEXCEPT_MAYBE`
  * Plane: renamed `putcw` to `putwc`
2020-09-27 15:32:25 -04:00
nick black
2f26f06386
alignment: add NCALIGN_UNALIGNED, preserve align type #364 2020-09-20 11:46:49 -04:00
nick black
2d9598b913
introduce ncplane_resize_realign #364 2020-09-20 10:14:05 -04:00
nick black
7b51bab79a add resizecb to ncplane_options struct #869 2020-09-20 08:54:56 -04:00
nick black
73f9973a2c Plane.hh: fix up indentation #1020 2020-09-20 05:52:27 -04:00
nick black
36aed3c521 add ncplane_create() + ncplane_options #1020 2020-09-20 05:52:27 -04:00
nick black
607c03edc4
rename _rgb_clipped functions rgb8_clipped 2020-09-19 21:55:01 -04:00
nick black
a4367fcfb5 rip out ncplane_ creation functions #985 2020-09-18 17:46:57 -04:00
nick black
e42dbdfd60 _stainable() -> _stained() #985 2020-09-18 02:02:08 -04:00
nick black
c5c608b22e add ncplane_putwc_stainable, ncplane_putwstr_stainable #985 2020-09-18 02:02:08 -04:00
nick black
b7a57eaab7 convert all channel rgb calls #985 2020-09-18 01:39:21 -04:00
nick black
0e34bec3fb start converting rgb->rgb8 #985 2020-09-18 01:39:21 -04:00
nick black
4bb1f3fc85 mbswidth -> ncstrwidth() #985 2020-09-15 01:39:42 -04:00
nick black
dab7247cdd
mbswidth: use utf8_egc_len() for segmentation #1014 2020-09-15 00:29:53 -04:00
nick black
dca9db9687
ncreel: conform to the New Way #627 2020-09-13 14:18:42 -04:00
nick black
c3e5e47a2a
ncreader: conform to the New Way #627 2020-09-13 13:53:11 -04:00
nick black
4f04f1bc31 remove bgchannels field from selector_options #627 2020-09-13 13:22:58 -04:00
nick black
306948507f ncmultiselect: normalize per new widget API #627 #1006 2020-09-13 13:22:58 -04:00
nick black
8839d44454 selector: transfer ownership of ncplane #1006 #627 2020-09-13 13:22:58 -04:00
nick black
a801f975a6
all widget creators get attribute ((nonnull)) #627 2020-09-13 04:51:49 -04:00
nick black
3f726edd4c
all widgets check flags and warn on undefined #627 2020-09-13 04:42:18 -04:00
nick black
89a4b6f726
all widget options structs end in flagword #627 2020-09-11 09:19:55 -04:00
nick black
af05ae7a92 man pages: document NCREADER_OPTION_CURSOR 2020-09-06 23:10:16 -04:00
nick black
f88c8ae79c
expose ncvisual_default_blitter(), name blitter in notcurses-view #995 2020-09-06 12:56:16 -04:00
nick black
3afcfc97d6
ncreader: define NCREADER_OPTIONS_EMACSKEYS 2020-08-31 22:43:42 -04:00
nick black
2f28420034 rename ncplane_putsimple() -> ncplane_putchar() #912 2020-08-31 21:14:29 -04:00
nick black
4c7a1d0427 ncdirect_init: add flags parameter #976 2020-08-30 13:38:33 -04:00
nick black
5fc6705ce3
add notcurses_ucs32_to_utf8() 2020-08-30 04:43:27 -04:00
nick black
5901fce433 unite putegc_yx+putc_yx into ncplane_put #961 2020-08-29 20:29:04 -04:00
nick black
0cee9bdb5c ReelsGap unit test #901 2020-08-29 18:24:45 -04:00
nick black
66f80c77f9
add ncplane_y() and ncplane_x() 2020-08-29 15:50:45 -04:00
Nick Black
d4ad59f285 FreeBSD compilation fixes 2020-08-27 14:26:44 -04:00
nick black
9f84c1524e
cell_load_simple: need an ntole() #906 2020-08-27 12:25:57 -04:00
nick black
c24ca8ab56
introduce ntole() #906 2020-08-27 06:59:11 -04:00
nick black
c66d8f52d5
Endianness fixes for inlined egcs #906 2020-08-27 06:02:37 -04:00
nick black
8f65211bf8 declare ncdirect input layer #919 2020-08-26 23:12:59 -04:00
nick black
9d75f575db
ncplane_set_[fb]channels 2020-08-25 17:28:29 -04:00
nick black
70a28feb63
ncreader: horizontal scrolling mostly works #839 2020-08-25 08:58:49 -04:00
nick black
7cbb2e9110 zoo demo: show cursor in reader box #835 2020-08-25 06:29:03 -04:00
nick black
a53d5a21a8 disable/enable cursor for rasterize 2020-08-25 04:55:06 -04:00
nick black
cab19cf790 Cursor work (placement, drop RETAIN_CURSOR) #953
notcurses_enable_cursor() now accepts placement arguments.
both it and notcurses_disable_cursor() now return int rather
than void. add notcurses_cursor_move_yx().
2020-08-25 03:11:50 -04:00
nick black
df33f381e5 c++ wrappers: cursor_{en,dis}able, iprefix() #952 2020-08-25 01:41:06 -04:00
nick black
4dd1d6a4c8 Annihilate nc_err_e and all infrastructure #948 2020-08-24 17:20:29 -04:00
nick black
026b94969d cffi heap allocations are zero-initialized #942 2020-08-23 22:27:50 -04:00
Nick Black
73dc0a7d69
Zoo 2, electric boogaloo (#939)
* Reimplement the widget zoo demo. The previous PoC
  was a multithreaded monster with behavior dependent
  on screen geometry. Replace it with a single thread state
  machine. Closes #936.
* Support titles for ncplot. Adds title to the ncplot_options
  struct, which may be NULL. Closes #941 .
* Properly color ncplot according to maxchannels and
  minchannels. Closes #940
* Add tools/function-table.sh script for generating public API list.
2020-08-23 12:44:53 -04:00
nick black
32d352173b
ncdirect_flush: struct ncdirect is const 2020-08-23 01:00:00 -04:00
nick black
14d6129007 take-no-prisoners overhaul of ncplane_puttext() #829 2020-08-22 12:51:32 -04:00
nick black
5c533c9f1a
ncplot: support legend styling 2020-08-21 07:34:50 -04:00
nick black
6bb8f447b5
add ncdirect_flush() #926 2020-08-21 02:27:58 -04:00
Nick Black
359ad1d36d
Generalized mergedown #779 (#932)
* Rename ncplane_mergedown -> ncplane_mergedown_simple()
* New ncplane_mergedown(), fully general projection of src to dst
2020-08-20 23:51:35 -04:00
nick black
567ad27455
add comment to ncdirect_putstr() about flushing #926 2020-08-20 22:41:45 -04:00
nick black
706d492ecd add channels_set_*_palindex() 2020-08-20 21:07:20 -04:00
nick black
2e5a8b78d5
add trivial new iprefix() 2020-08-20 17:37:12 -04:00
Nick Black
e1cf346ddb
internalize highgradient_sized implementation #920 (#922)
internalize highgradient_sized implementation #920
2020-08-19 13:15:26 -04:00
nick black
1e334fa63e
new 'gradients' PoC #920 2020-08-19 12:33:47 -04:00
nick black
05da44b06b
hide blending functions #917 2020-08-18 08:41:55 -04:00
José Luis Cruz
3e3c8c1514
minor fix: use already defined variable 2020-08-18 14:09:01 +02:00
José Luis Cruz
c4498e485e
proposal to remove the comment and update the type
Maybe the type may reflect that it's not supposed to be a long now.

Although for what I've learnt about C, in practice it will probably still be a long. And I can't be sure whether in some platforms where it will indeed be a short the code will keep compiling, so maybe it's safer just to remove the outdated comment, or whatever you decide.

I'm just finding things while I work in the bindings =) And I was surprised to learn about the little guarantees C gives regarding the types sizes...
2020-08-17 20:54:15 +02:00
nick black
a2c95814b7 Remove cell_simple_p()
Get notcurses-tetris working again, since its collision
detection relied on simple vs non-simple EGCs, which are
no longer an operative concept. Closes #899.
2020-08-16 15:57:32 -04:00
nick black
18d79c195d
python: get us linking once more... 2020-08-16 10:02:14 -04:00
nick black
f9eed1c412 palette_size is unsigned #891 2020-08-16 01:51:34 -04:00
nick black
16ff667325 blissful endianness-opacity
not caring about endianness is the opiate of the masses.
happy, happy masses. remove endianness.h and all its baleful
influence by explicitly breaking up the cell structure. #892
2020-08-16 01:44:36 -04:00
nick black
7811663223 inlined EGCs + styling unit tests #830 2020-08-15 17:38:20 -04:00
nick black
3b76db1166 fuck the bullshit it's time to throw down 2020-08-15 17:38:20 -04:00
nick black
40e85c4143 rotate: use cell_extended_gcluster() #830 2020-08-15 17:38:20 -04:00
nick black
3f142961b3 comments 2020-08-15 17:38:20 -04:00
nick black
226c00c74d egcelide: detect endianness, define NCSTYLE_* accordingly 2020-08-15 17:38:20 -04:00
nick black
fb8efe03e0 cell_strdup(): fix for inline egcs 2020-08-15 17:38:20 -04:00
nick black
b0f7f36995 egc inlining #830 2020-08-15 17:38:20 -04:00
nick black
26899f3544
s/8 bit/8-bit/g 2020-08-13 11:56:18 -04:00
José Luis Cruz
e596f9230f fix ncpixel alpha mask 2020-08-13 11:55:36 -04:00
nick black
52103af364
Cell: overlap RGB and palette indices #884 2020-08-13 11:35:53 -04:00
Nick Black
c3508d524b
ncplane_puttext() work for longer lines (#880)
* The zoo demo made manifest that we had some serious problems handling sequences of longer lines in ncplane_puttext(). This remedies most of the problems, though it's not yet perfect. #871
* Guard notcurses* for NULL in log*() #878 #879
* Fix memory leak in ncdirect_dump_plane()
2020-08-12 02:43:52 -04:00
Nick Black
e7ad2829e9
Merge branch 'master' into joseluis-patch-1 2020-08-11 16:46:18 -04:00
joseLuís
7070e532d6 fix typos 2020-08-11 17:04:09 +02:00
joseLuís
7abda11404 add comments for ncpixel functions 2020-08-11 16:59:39 +02:00
José Luis Cruz
7bd29c9c17
fix return types
I bet those two return types shoud be unsigned
2020-08-11 11:56:25 +02:00
joseLuís
7790913d2f fix typos & improve comments 2020-08-11 11:38:30 +02:00
Nick Black
11d6a4eb89
New reel layout algorithm #818 (#870)
New reel layout algorithm based on trimming and sifting. Fixes the original issue of #818, though I'm not marking that bug fixed until I've resolved the little issues remaining with this one.
Back off CMake version dependency, see if we can get by with 3.11.4 for EPEL8 #851
Simplify tablet drawing tremendously by separating tablet border and data planes. Callbacks no longer need worry about the borders; they can simply fill the plane they're handed. #833
Improve notcurses_debug() a bit
Add ncplane_new_named() and friends to expose plane naming to the user.
Add internal ncplane_genocide() to kill a plane and all its bound descendents
New industrial-strength ncreel unit testing
notcurses-ncreel now accepts -ln for log level n
Add ncplane_parent() and ncplane_parent_const()
2020-08-09 17:40:59 -04:00
joseLuís
2842ffb751 add remaining channel functions 2020-08-08 10:53:32 -04:00
nick black
3bb95824fc update some terminology 2020-08-08 10:53:32 -04:00
nick black
9ae3fe4728 update some terminology 2020-08-07 16:31:50 -04:00
nick black
4c822f80a9
comment and move ncpixel API 2020-08-07 14:34:00 -04:00
José Luis Cruz
7aef3e4fca fix typo
foreground > background
2020-08-07 13:23:36 -04:00