Notcurses-Native.git | lib/Notcurses/Native/ | Plane.rakumod


use NativeCall; use Notcurses::Native::Types; use Notcurses::Native; use Notcurses::Native::Str; unit module Notcurses::Native::Plane; # 128 bindings, 12 skipped (variadic) #|( Batched per-cell copy from C<$src> to C<$dst>: copies a C<$rows × $cols> rectangle starting at (src-y, src-x) in the source plane to (dst-y, dst-x) in the destination, substituting the source plane's base cell when the source cell has an empty glyph (matches notcurses's own C behaviour). This is the C-side port of Selkie::Widget::ViewportedCardList's historical Raku per-cell merge loop. ncplane_mergedown looks like a one-call replacement but composites at absolute pile coordinates (not at the scroll-translated dst we need), so the actual loop has to live somewhere — putting it in C avoids paying the Raku NativeCall tax 5+ times per cell. For a typical chat with 5 visible cards × 5 widget planes × ~3000 cells, that drops ~75,000 NativeCall trips per render to one. Lives in C, compiled by Build.rakumod's !try-compile-shim (see that method's docs for when this lib exists vs. when callers must fall back). Returns 0 on success; negative results from C (cells out of bounds) are skipped silently same as the Raku loop did. ) sub notcurses_native_copy_cells( NcplaneHandle $src, NcplaneHandle $dst, int32 $src-y, int32 $src-x, int32 $dst-y, int32 $dst-x, uint32 $rows, uint32 $cols --> int32 ) is native(&shim-lib) is export { * } sub ncplane_notcurses(NcplaneHandle $n --> NotcursesHandle) is native(&core-lib) is export { * } sub ncplane_notcurses_const(NcplaneHandle $n --> NotcursesHandle) is native(&core-lib) is export { * } sub ncplane_pixel_geom(NcplaneHandle $n, uint32 $pxy is rw, uint32 $pxx is rw, uint32 $celldimy is rw, uint32 $celldimx is rw, uint32 $maxbmapy is rw, uint32 $maxbmapx is rw) is native(&core-lib) is export { * } sub ncplane_resize_maximize(NcplaneHandle $n --> int32) is native(&core-lib) is export { * } sub ncplane_resize_marginalized(NcplaneHandle $n --> int32) is native(&core-lib) is export { * } sub ncplane_resize_realign(NcplaneHandle $n --> int32) is native(&core-lib) is export { * } sub ncplane_resize_placewithin(NcplaneHandle $n --> int32) is native(&core-lib) is export { * } sub ncplane_set_resizecb(NcplaneHandle $n, Pointer $cb) is native(&core-lib) is export { * } # Returns the current resize callback (function pointer) sub ncplane_resizecb(NcplaneHandle $n --> Pointer) is native(&core-lib) is export { * } sub ncplane_set_name(NcplaneHandle $n, Str $name --> int32) is native(&core-lib) is export { * } #| OWNED-BY-LIBRARY: returns a pointer to the plane's internal name #| storage. Caller MUST NOT free. `--> Str` is safe — Raku copies. sub ncplane_name(NcplaneHandle $n --> Str) is native(&core-lib) is export { * } sub ncplane_reparent(NcplaneHandle $n, NcplaneHandle $newparent --> NcplaneHandle) is native(&core-lib) is export { * } sub ncplane_reparent_family(NcplaneHandle $n, NcplaneHandle $newparent --> NcplaneHandle) is native(&core-lib) is export { * } sub ncplane_dup(NcplaneHandle $n, Pointer $opaque --> NcplaneHandle) is native(&core-lib) is export { * } sub ncplane_translate(NcplaneHandle $src, NcplaneHandle $dst, int32 $y is rw, int32 $x is rw) is native(&core-lib) is export { * } sub ncplane_translate_abs(NcplaneHandle $n, int32 $y is rw, int32 $x is rw --> bool) is native(&core-lib) is export { * } sub ncplane_set_scrolling(NcplaneHandle $n, uint32 $scrollp --> bool) is native(&core-lib) is export { * } sub ncplane_scrolling_p(NcplaneHandle $n --> bool) is native(&core-lib) is export { * } sub ncplane_set_autogrow(NcplaneHandle $n, uint32 $growp --> bool) is native(&core-lib) is export { * } sub ncplane_autogrow_p(NcplaneHandle $n --> bool) is native(&core-lib) is export { * } sub ncplane_resize_simple(NcplaneHandle $n, uint32 $ylen, uint32 $xlen --> int32) is native(&ffi-lib) is export { * } sub ncplane_set_base_cell(NcplaneHandle $n, Nccell $c --> int32) is native(&core-lib) is export { * } sub ncplane_set_base(NcplaneHandle $n, Str $egc, uint16 $stylemask, uint64 $channels --> int32) is native(&core-lib) is export { * } sub ncplane_base(NcplaneHandle $n, Nccell $c --> int32) is native(&core-lib) is export { * } sub ncplane_yx(NcplaneHandle $n, int32 $y is rw, int32 $x is rw) is native(&core-lib) is export { * } sub ncplane_y(NcplaneHandle $n --> int32) is native(&core-lib) is export { * } sub ncplane_x(NcplaneHandle $n --> int32) is native(&core-lib) is export { * } sub ncplane_move_rel(NcplaneHandle $n, int32 $y, int32 $x --> int32) is native(&ffi-lib) is export { * } sub ncplane_abs_yx(NcplaneHandle $n, int32 $y is rw, int32 $x is rw) is native(&core-lib) is export { * } sub ncplane_abs_y(NcplaneHandle $n --> int32) is native(&core-lib) is export { * } sub ncplane_abs_x(NcplaneHandle $n --> int32) is native(&core-lib) is export { * } sub ncplane_parent(NcplaneHandle $n --> NcplaneHandle) is native(&core-lib) is export { * } sub ncplane_parent_const(NcplaneHandle $n --> NcplaneHandle) is native(&core-lib) is export { * } sub ncplane_descendant_p(NcplaneHandle $n, NcplaneHandle $ancestor --> int32) is native(&ffi-lib) is export { * } sub ncplane_move_family_above(NcplaneHandle $n, NcplaneHandle $targ --> int32) is native(&core-lib) is export { * } sub ncplane_move_family_below(NcplaneHandle $n, NcplaneHandle $targ --> int32) is native(&core-lib) is export { * } sub ncplane_move_family_top(NcplaneHandle $n) is native(&ffi-lib) is export { * } sub ncplane_move_family_bottom(NcplaneHandle $n) is native(&ffi-lib) is export { * } sub ncplane_family_destroy(Pointer $n --> int32) is native(&core-lib) is export { * } sub ncplane_below(NcplaneHandle $n --> NcplaneHandle) is native(&core-lib) is export { * } sub ncplane_above(NcplaneHandle $n --> NcplaneHandle) is native(&core-lib) is export { * } sub ncplane_scrollup(NcplaneHandle $n, int32 $r --> int32) is native(&core-lib) is export { * } sub ncplane_scrollup_child(NcplaneHandle $n, NcplaneHandle $child --> int32) is native(&core-lib) is export { * } sub ncplane_rotate_cw(NcplaneHandle $n --> int32) is native(&core-lib) is export { * } sub ncplane_rotate_ccw(NcplaneHandle $n --> int32) is native(&core-lib) is export { * } # ncplane_at_cursor / at_yx / contents all return heap-allocated EGC # strings the caller must free. sub _ncplane_at_cursor_raw(NcplaneHandle $n, uint16 $stylemask is rw, uint64 $channels is rw --> Pointer) is native(&core-lib) is symbol('ncplane_at_cursor') { * } sub ncplane_at_cursor(NcplaneHandle $n, uint16 $stylemask is rw, uint64 $channels is rw --> Str) is export { strdup-copy-and-free(_ncplane_at_cursor_raw($n, $stylemask, $channels)) } sub ncplane_at_cursor_cell(NcplaneHandle $n, Nccell $c --> int32) is native(&core-lib) is export { * } sub _ncplane_at_yx_raw(NcplaneHandle $n, int32 $y, int32 $x, uint16 $stylemask is rw, uint64 $channels is rw --> Pointer) is native(&core-lib) is symbol('ncplane_at_yx') { * } sub ncplane_at_yx(NcplaneHandle $n, int32 $y, int32 $x, uint16 $stylemask is rw, uint64 $channels is rw --> Str) is export { strdup-copy-and-free(_ncplane_at_yx_raw($n, $y, $x, $stylemask, $channels)) } sub ncplane_at_yx_cell(NcplaneHandle $n, int32 $y, int32 $x, Nccell $c --> int32) is native(&core-lib) is export { * } sub _ncplane_contents_raw(NcplaneHandle $n, int32 $begy, int32 $begx, uint32 $leny, uint32 $lenx --> Pointer) is native(&core-lib) is symbol('ncplane_contents') { * } sub ncplane_contents(NcplaneHandle $n, int32 $begy, int32 $begx, uint32 $leny, uint32 $lenx --> Str) is export { strdup-copy-and-free(_ncplane_contents_raw($n, $begy, $begx, $leny, $lenx)) } sub ncplane_set_userptr(NcplaneHandle $n, Pointer $opaque --> Pointer) is native(&core-lib) is export { * } sub ncplane_userptr(NcplaneHandle $n --> Pointer) is native(&core-lib) is export { * } sub ncplane_center_abs(NcplaneHandle $n, int32 $y is rw, int32 $x is rw) is native(&core-lib) is export { * } sub ncplane_as_rgba(NcplaneHandle $n, int32 $blit, int32 $begy, int32 $begx, uint32 $leny, uint32 $lenx, uint32 $pxdimy is rw, uint32 $pxdimx is rw --> Pointer) is native(&core-lib) is export { * } sub ncplane_halign(NcplaneHandle $n, int32 $align, int32 $c --> int32) is native(&ffi-lib) is export { * } sub ncplane_valign(NcplaneHandle $n, int32 $align, int32 $r --> int32) is native(&ffi-lib) is export { * } sub ncplane_cursor_y(NcplaneHandle $n --> uint32) is native(&ffi-lib) is export { * } sub ncplane_cursor_x(NcplaneHandle $n --> uint32) is native(&ffi-lib) is export { * } sub ncplane_channels(NcplaneHandle $n --> uint64) is native(&core-lib) is export { * } sub ncplane_styles(NcplaneHandle $n --> uint16) is native(&core-lib) is export { * } sub ncplane_putc_yx(NcplaneHandle $n, int32 $y, int32 $x, Nccell $c --> int32) is native(&core-lib) is export { * } sub ncplane_putc(NcplaneHandle $n, Nccell $c --> int32) is native(&ffi-lib) is export { * } sub ncplane_putchar(NcplaneHandle $n, Pointer $c --> int32) is native(&ffi-lib) is export { * } sub ncplane_putchar_stained(NcplaneHandle $n, Pointer $c --> int32) is native(&core-lib) is export { * } sub ncplane_putegc_yx(NcplaneHandle $n, int32 $y, int32 $x, Str $gclust, Pointer $sbytes --> int32) is native(&core-lib) is export { * } sub ncplane_putegc(NcplaneHandle $n, Str $gclust, Pointer $sbytes --> int32) is native(&ffi-lib) is export { * } sub ncplane_putegc_stained(NcplaneHandle $n, Str $gclust, Pointer $sbytes --> int32) is native(&core-lib) is export { * } sub ncplane_putwegc(NcplaneHandle $n, Pointer $gclust, Pointer $sbytes --> int32) is native(&ffi-lib) is export { * } sub ncplane_putwegc_yx(NcplaneHandle $n, int32 $y, int32 $x, Pointer $gclust, Pointer $sbytes --> int32) is native(&ffi-lib) is export { * } sub ncplane_putwegc_stained(NcplaneHandle $n, Pointer $gclust, Pointer $sbytes --> int32) is native(&core-lib) is export { * } sub ncplane_putstr(NcplaneHandle $n, Str $gclustarr --> int32) is native(&ffi-lib) is export { * } sub ncplane_putstr_stained(NcplaneHandle $n, Str $gclusters --> int32) is native(&ffi-lib) is export { * } sub ncplane_putnstr_aligned(NcplaneHandle $n, int32 $y, int32 $align, size_t $s, Str $str --> int32) is native(&core-lib) is export { * } sub ncplane_putnstr(NcplaneHandle $n, size_t $s, Str $gclustarr --> int32) is native(&ffi-lib) is export { * } sub ncplane_putwstr_yx(NcplaneHandle $n, int32 $y, int32 $x, Pointer $gclustarr --> int32) is native(&ffi-lib) is export { * } sub ncplane_putwstr_aligned(NcplaneHandle $n, int32 $y, int32 $align, Pointer $gclustarr --> int32) is native(&ffi-lib) is export { * } sub ncplane_putwstr_stained(NcplaneHandle $n, Pointer $gclustarr --> int32) is native(&core-lib) is export { * } sub ncplane_putwstr(NcplaneHandle $n, Pointer $gclustarr --> int32) is native(&ffi-lib) is export { * } sub ncplane_pututf32_yx(NcplaneHandle $n, int32 $y, int32 $x, uint32 $u --> int32) is native(&ffi-lib) is export { * } sub ncplane_putwc_yx(NcplaneHandle $n, int32 $y, int32 $x, uint32 $w --> int32) is native(&ffi-lib) is export { * } sub ncplane_putwc(NcplaneHandle $n, uint32 $w --> int32) is native(&ffi-lib) is export { * } sub ncplane_putwc_utf32(NcplaneHandle $n, Pointer $w, uint32 $wchars is rw --> int32) is native(&ffi-lib) is export { * } sub ncplane_putwc_stained(NcplaneHandle $n, uint32 $w --> int32) is native(&ffi-lib) is export { * } sub ncplane_puttext(NcplaneHandle $n, int32 $y, int32 $align, Str $text, Pointer $bytes --> int32) is native(&core-lib) is export { * } sub ncplane_hline_interp(NcplaneHandle $n, Nccell $c, uint32 $len, uint64 $c1, uint64 $c2 --> int32) is native(&core-lib) is export { * } sub ncplane_hline(NcplaneHandle $n, Nccell $c, uint32 $len --> int32) is native(&ffi-lib) is export { * } sub ncplane_vline_interp(NcplaneHandle $n, Nccell $c, uint32 $len, uint64 $c1, uint64 $c2 --> int32) is native(&core-lib) is export { * } sub ncplane_vline(NcplaneHandle $n, Nccell $c, uint32 $len --> int32) is native(&ffi-lib) is export { * } sub ncplane_box(NcplaneHandle $n, Nccell $ul, Nccell $ur, Nccell $ll, Nccell $lr, Nccell $hline, Nccell $vline, uint32 $ystop, uint32 $xstop, uint32 $ctlword --> int32) is native(&core-lib) is export { * } sub ncplane_box_sized(NcplaneHandle $n, Nccell $ul, Nccell $ur, Nccell $ll, Nccell $lr, Nccell $hline, Nccell $vline, uint32 $ystop, uint32 $xstop, uint32 $ctlword --> int32) is native(&ffi-lib) is export { * } sub ncplane_perimeter(NcplaneHandle $n, Nccell $ul, Nccell $ur, Nccell $ll, Nccell $lr, Nccell $hline, Nccell $vline, uint32 $ctlword --> int32) is native(&ffi-lib) is export { * } sub ncplane_polyfill_yx(NcplaneHandle $n, int32 $y, int32 $x, Nccell $c --> int32) is native(&core-lib) is export { * } sub ncplane_gradient(NcplaneHandle $n, int32 $y, int32 $x, uint32 $ylen, uint32 $xlen, Str $egc, uint16 $styles, uint64 $ul, uint64 $ur, uint64 $ll, uint64 $lr --> int32) is native(&core-lib) is export { * } sub ncplane_gradient2x1(NcplaneHandle $n, int32 $y, int32 $x, uint32 $ylen, uint32 $xlen, uint32 $ul, uint32 $ur, uint32 $ll, uint32 $lr --> int32) is native(&core-lib) is export { * } sub ncplane_format(NcplaneHandle $n, int32 $y, int32 $x, uint32 $ylen, uint32 $xlen, uint16 $stylemask --> int32) is native(&core-lib) is export { * } sub ncplane_stain(NcplaneHandle $n, int32 $y, int32 $x, uint32 $ylen, uint32 $xlen, uint64 $ul, uint64 $ur, uint64 $ll, uint64 $lr --> int32) is native(&core-lib) is export { * } sub ncplane_mergedown_simple(NcplaneHandle $src, NcplaneHandle $dst --> int32) is native(&core-lib) is export { * } sub ncplane_mergedown(NcplaneHandle $src, NcplaneHandle $dst, int32 $begsrcy, int32 $begsrcx, uint32 $leny, uint32 $lenx, int32 $dsty, int32 $dstx --> int32) is native(&core-lib) is export { * } sub ncplane_bchannel(NcplaneHandle $n --> uint32) is native(&ffi-lib) is export { * } sub ncplane_fchannel(NcplaneHandle $n --> uint32) is native(&ffi-lib) is export { * } sub ncplane_set_channels(NcplaneHandle $n, uint64 $channels) is native(&core-lib) is export { * } sub ncplane_set_bchannel(NcplaneHandle $n, uint32 $channel --> uint64) is native(&core-lib) is export { * } sub ncplane_set_fchannel(NcplaneHandle $n, uint32 $channel --> uint64) is native(&core-lib) is export { * } sub ncplane_fg_rgb(NcplaneHandle $n --> uint32) is native(&ffi-lib) is export { * } sub ncplane_bg_rgb(NcplaneHandle $n --> uint32) is native(&ffi-lib) is export { * } sub ncplane_fg_alpha(NcplaneHandle $n --> uint32) is native(&ffi-lib) is export { * } sub ncplane_fg_default_p(NcplaneHandle $n --> bool) is native(&ffi-lib) is export { * } sub ncplane_bg_alpha(NcplaneHandle $n --> uint32) is native(&ffi-lib) is export { * } sub ncplane_bg_default_p(NcplaneHandle $n --> bool) is native(&ffi-lib) is export { * } sub ncplane_fg_rgb8(NcplaneHandle $n, uint32 $r is rw, uint32 $g is rw, uint32 $b is rw --> uint32) is native(&ffi-lib) is export { * } sub ncplane_bg_rgb8(NcplaneHandle $n, uint32 $r is rw, uint32 $g is rw, uint32 $b is rw --> uint32) is native(&ffi-lib) is export { * } sub ncplane_set_bg_rgb8_clipped(NcplaneHandle $n, int32 $r, int32 $g, int32 $b) is native(&core-lib) is export { * } sub ncplane_set_fg_rgb8_clipped(NcplaneHandle $n, int32 $r, int32 $g, int32 $b) is native(&core-lib) is export { * } sub ncplane_set_fg_alpha(NcplaneHandle $n, int32 $alpha --> int32) is native(&core-lib) is export { * } sub ncplane_set_bg_alpha(NcplaneHandle $n, int32 $alpha --> int32) is native(&core-lib) is export { * } # fader is fadecb callback, curry is void* sub ncplane_fadeout(NcplaneHandle $n, Timespec $ts, Pointer $fader, Pointer $curry --> int32) is native(&core-lib) is export { * } sub ncplane_fadein(NcplaneHandle $n, Timespec $ts, Pointer $fader, Pointer $curry --> int32) is native(&core-lib) is export { * } sub ncplane_fadeout_iteration(NcplaneHandle $n, NcfadectxHandle $nctx, int32 $iter, Pointer $fader, Pointer $curry --> int32) is native(&core-lib) is export { * } sub ncplane_fadein_iteration(NcplaneHandle $n, NcfadectxHandle $nctx, int32 $iter, Pointer $fader, Pointer $curry --> int32) is native(&core-lib) is export { * } sub ncplane_pulse(NcplaneHandle $n, Timespec $ts, Pointer $fader, Pointer $curry --> int32) is native(&core-lib) is export { * } sub ncplane_rounded_box(NcplaneHandle $n, uint16 $styles, uint64 $channels, uint32 $ystop, uint32 $xstop, uint32 $ctlword --> int32) is native(&ffi-lib) is export { * } sub ncplane_perimeter_rounded(NcplaneHandle $n, uint16 $stylemask, uint64 $channels, uint32 $ctlword --> int32) is native(&ffi-lib) is export { * } sub ncplane_rounded_box_sized(NcplaneHandle $n, uint16 $styles, uint64 $channels, uint32 $ylen, uint32 $xlen, uint32 $ctlword --> int32) is native(&ffi-lib) is export { * } sub ncplane_double_box(NcplaneHandle $n, uint16 $styles, uint64 $channels, uint32 $ylen, uint32 $xlen, uint32 $ctlword --> int32) is native(&ffi-lib) is export { * } sub ncplane_ascii_box(NcplaneHandle $n, uint16 $styles, uint64 $channels, uint32 $ylen, uint32 $xlen, uint32 $ctlword --> int32) is native(&ffi-lib) is export { * } sub ncplane_perimeter_double(NcplaneHandle $n, uint16 $stylemask, uint64 $channels, uint32 $ctlword --> int32) is native(&ffi-lib) is export { * } sub ncplane_double_box_sized(NcplaneHandle $n, uint16 $styles, uint64 $channels, uint32 $ylen, uint32 $xlen, uint32 $ctlword --> int32) is native(&ffi-lib) is export { * } sub ncplane_greyscale(NcplaneHandle $n) is native(&core-lib) is export { * } sub ncplane_qrcode(NcplaneHandle $n, uint32 $ymax is rw, uint32 $xmax is rw, Pointer $data, size_t $len --> int32) is native(&core-lib) is export { * } # === Printf (variadic — requires Rakudo 2025.12+) === sub ncplane_printf(NcplaneHandle $n, Str $format, *@args is raw where { .all ~~ NativeCall::Types::NativelyTyped } --> int32) is native(&ffi-lib) is export { * } sub ncplane_printf_yx(NcplaneHandle $n, int32 $y, int32 $x, Str $format, *@args is raw where { .all ~~ NativeCall::Types::NativelyTyped } --> int32) is native(&ffi-lib) is export { * } sub ncplane_printf_aligned(NcplaneHandle $n, int32 $y, int32 $align, Str $format, *@args is raw where { .all ~~ NativeCall::Types::NativelyTyped } --> int32) is native(&ffi-lib) is export { * } sub ncplane_printf_stained(NcplaneHandle $n, Str $format, *@args is raw where { .all ~~ NativeCall::Types::NativelyTyped } --> int32) is native(&ffi-lib) is export { * }