Notcurses-Native.git | lib/Notcurses/Native/ | Direct.rakumod edit


use NativeCall;
use Notcurses::Native::Types;
use Notcurses::Native;
use Notcurses::Native::Str;

unit module Notcurses::Native::Direct;

# 69 bindings — ncdirect_* direct mode API

# === Init/stop ===

sub ncdirect_init(Str $termtype, Pointer $fp, uint64 $flags --> NcdirectHandle)
	is native(&nc-lib) is export { * }

sub ncdirect_core_init(Str $termtype, Pointer $fp, uint64 $flags --> NcdirectHandle)
	is native(&core-lib) is export { * }

sub ncdirect_stop(NcdirectHandle $nc --> int32)
	is native(&core-lib) is export { * }

# === Colors ===

sub ncdirect_set_fg_rgb(NcdirectHandle $nc, uint32 $rgb --> int32)
	is native(&core-lib) is export { * }

sub ncdirect_set_bg_rgb(NcdirectHandle $nc, uint32 $rgb --> int32)
	is native(&core-lib) is export { * }

sub ncdirect_set_fg_rgb8(NcdirectHandle $nc, uint32 $r, uint32 $g, uint32 $b --> int32)
	is native(&ffi-lib) is export { * }

sub ncdirect_set_bg_rgb8(NcdirectHandle $nc, uint32 $r, uint32 $g, uint32 $b --> int32)
	is native(&ffi-lib) is export { * }

sub ncdirect_set_fg_palindex(NcdirectHandle $nc, int32 $pidx --> int32)
	is native(&core-lib) is export { * }

sub ncdirect_set_bg_palindex(NcdirectHandle $nc, int32 $pidx --> int32)
	is native(&core-lib) is export { * }

sub ncdirect_set_fg_default(NcdirectHandle $nc --> int32)
	is native(&core-lib) is export { * }

sub ncdirect_set_bg_default(NcdirectHandle $nc --> int32)
	is native(&core-lib) is export { * }

sub ncdirect_palette_size(NcdirectHandle $nc --> uint32)
	is native(&core-lib) is export { * }

# === Output ===

sub ncdirect_putstr(NcdirectHandle $nc, uint64 $channels, Str $utf8 --> int32)
	is native(&core-lib) is export { * }

sub ncdirect_putegc(NcdirectHandle $nc, uint64 $channels, Str $utf8, int32 $sbytes is rw --> int32)
	is native(&core-lib) is export { * }

sub ncdirect_flush(NcdirectHandle $nc --> int32)
	is native(&core-lib) is export { * }

# Returns a malloc'd input line that the caller must free.
sub _ncdirect_readline_raw(NcdirectHandle $nc, Str $prompt --> Pointer)
	is native(&core-lib) is symbol('ncdirect_readline') { * }

sub ncdirect_readline(NcdirectHandle $nc, Str $prompt --> Str) is export {
	strdup-copy-and-free(_ncdirect_readline_raw($nc, $prompt))
}

# === Printf (variadic) ===

sub ncdirect_printf_aligned(NcdirectHandle $n, int32 $y, int32 $align, Str $fmt, **@args --> int32)
	is native(&core-lib) is export { * }

# === Dimensions ===

sub ncdirect_dim_x(NcdirectHandle $nc --> uint32)
	is native(&core-lib) is export { * }

sub ncdirect_dim_y(NcdirectHandle $nc --> uint32)
	is native(&core-lib) is export { * }

# === Styles ===

sub ncdirect_supported_styles(NcdirectHandle $nc --> uint16)
	is native(&core-lib) is export { * }

sub ncdirect_set_styles(NcdirectHandle $n, uint32 $stylebits --> int32)
	is native(&core-lib) is export { * }

sub ncdirect_on_styles(NcdirectHandle $n, uint32 $stylebits --> int32)
	is native(&core-lib) is export { * }

sub ncdirect_off_styles(NcdirectHandle $n, uint32 $stylebits --> int32)
	is native(&core-lib) is export { * }

sub ncdirect_styles(NcdirectHandle $n --> uint16)
	is native(&core-lib) is export { * }

# === Cursor ===

sub ncdirect_cursor_move_yx(NcdirectHandle $n, int32 $y, int32 $x --> int32)
	is native(&core-lib) is export { * }

sub ncdirect_cursor_enable(NcdirectHandle $nc --> int32)
	is native(&core-lib) is export { * }

sub ncdirect_cursor_disable(NcdirectHandle $nc --> int32)
	is native(&core-lib) is export { * }

sub ncdirect_cursor_up(NcdirectHandle $nc, int32 $num --> int32)
	is native(&core-lib) is export { * }

sub ncdirect_cursor_left(NcdirectHandle $nc, int32 $num --> int32)
	is native(&core-lib) is export { * }

sub ncdirect_cursor_right(NcdirectHandle $nc, int32 $num --> int32)
	is native(&core-lib) is export { * }

sub ncdirect_cursor_down(NcdirectHandle $nc, int32 $num --> int32)
	is native(&core-lib) is export { * }

sub ncdirect_cursor_yx(NcdirectHandle $n, uint32 $y is rw, uint32 $x is rw --> int32)
	is native(&core-lib) is export { * }

sub ncdirect_cursor_push(NcdirectHandle $n --> int32)
	is native(&core-lib) is export { * }

sub ncdirect_cursor_pop(NcdirectHandle $n --> int32)
	is native(&core-lib) is export { * }

# === Screen ===

sub ncdirect_clear(NcdirectHandle $nc --> int32)
	is native(&core-lib) is export { * }

# === Drawing ===

# wchars is const wchar_t* — platform-specific, use Pointer
sub ncdirect_box(NcdirectHandle $n, uint64 $ul, uint64 $ur, uint64 $ll, uint64 $lr, Pointer $wchars, uint32 $ylen, uint32 $xlen, uint32 $ctlword --> int32)
	is native(&core-lib) is export { * }

sub ncdirect_light_box(NcdirectHandle $n, uint64 $ul, uint64 $ur, uint64 $ll, uint64 $lr, uint32 $ylen, uint32 $xlen, uint32 $ctlword --> int32)
	is native(&ffi-lib) is export { * }

sub ncdirect_heavy_box(NcdirectHandle $n, uint64 $ul, uint64 $ur, uint64 $ll, uint64 $lr, uint32 $ylen, uint32 $xlen, uint32 $ctlword --> int32)
	is native(&ffi-lib) is export { * }

sub ncdirect_ascii_box(NcdirectHandle $n, uint64 $ul, uint64 $ur, uint64 $ll, uint64 $lr, uint32 $ylen, uint32 $xlen, uint32 $ctlword --> int32)
	is native(&ffi-lib) is export { * }

sub ncdirect_rounded_box(NcdirectHandle $n, uint64 $ul, uint64 $ur, uint64 $ll, uint64 $lr, uint32 $ylen, uint32 $xlen, uint32 $ctlword --> int32)
	is native(&core-lib) is export { * }

sub ncdirect_double_box(NcdirectHandle $n, uint64 $ul, uint64 $ur, uint64 $ll, uint64 $lr, uint32 $ylen, uint32 $xlen, uint32 $ctlword --> int32)
	is native(&core-lib) is export { * }

sub ncdirect_hline_interp(NcdirectHandle $n, Str $egc, uint32 $len, uint64 $h1, uint64 $h2 --> int32)
	is native(&core-lib) is export { * }

sub ncdirect_vline_interp(NcdirectHandle $n, Str $egc, uint32 $len, uint64 $h1, uint64 $h2 --> int32)
	is native(&core-lib) is export { * }

# === Input ===

sub ncdirect_get(NcdirectHandle $n, Timespec $absdl, Ncinput $ni --> uint32)
	is native(&core-lib) is export { * }

sub ncdirect_inputready_fd(NcdirectHandle $n --> int32)
	is native(&core-lib) is export { * }

sub ncdirect_get_nblock(NcdirectHandle $n, Ncinput $ni --> uint32)
	is native(&ffi-lib) is export { * }

sub ncdirect_get_blocking(NcdirectHandle $n, Ncinput $ni --> uint32)
	is native(&ffi-lib) is export { * }

# === Visual/image (ncdirectv* and ncdirectf* are opaque) ===

sub ncdirect_render_image(NcdirectHandle $n, Str $filename, int32 $align, int32 $blitter, int32 $scale --> int32)
	is native(&core-lib) is export { * }

# Returns ncdirectv* (opaque rendered frame)
sub ncdirect_render_frame(NcdirectHandle $n, Str $filename, int32 $blitter, int32 $scale, int32 $maxy, int32 $maxx --> Pointer)
	is native(&core-lib) is export { * }

# ncdv is ncdirectv* (opaque)
sub ncdirect_raster_frame(NcdirectHandle $n, Pointer $ncdv, int32 $align --> int32)
	is native(&core-lib) is export { * }

# Returns ncdirectf* (opaque loaded frame)
sub ncdirectf_from_file(NcdirectHandle $n, Str $filename --> Pointer)
	is native(&core-lib) is export { * }

# frame is ncdirectf*
sub ncdirectf_free(Pointer $frame)
	is native(&core-lib) is export { * }

# frame is ncdirectf*; returns ncdirectv*
sub ncdirectf_render(NcdirectHandle $n, Pointer $frame, NcvisualOptions $vopts --> Pointer)
	is native(&core-lib) is export { * }

# frame is ncdirectf*
sub ncdirectf_geom(NcdirectHandle $n, Pointer $frame, NcvisualOptions $vopts, Ncvgeom $geom --> int32)
	is native(&core-lib) is export { * }

# streamer is ncstreamcb (callback), curry is void*
sub ncdirect_stream(NcdirectHandle $n, Str $filename, Pointer $streamer, NcvisualOptions $vopts, Pointer $curry --> int32)
	is native(&core-lib) is export { * }

# === Capabilities ===

# Returns a malloc'd terminal name that the caller must free.
sub _ncdirect_detected_terminal_raw(NcdirectHandle $n --> Pointer)
	is native(&core-lib) is symbol('ncdirect_detected_terminal') { * }

sub ncdirect_detected_terminal(NcdirectHandle $n --> Str) is export {
	strdup-copy-and-free(_ncdirect_detected_terminal_raw($n))
}

sub ncdirect_capabilities(NcdirectHandle $n --> Nccapabilities)
	is native(&core-lib) is export { * }

sub ncdirect_cantruecolor(NcdirectHandle $n --> bool)
	is native(&ffi-lib) is export { * }

sub ncdirect_canchangecolor(NcdirectHandle $n --> bool)
	is native(&ffi-lib) is export { * }

sub ncdirect_canfade(NcdirectHandle $n --> bool)
	is native(&ffi-lib) is export { * }

sub ncdirect_canopen_images(NcdirectHandle $n --> bool)
	is native(&ffi-lib) is export { * }

sub ncdirect_canopen_videos(NcdirectHandle $n --> bool)
	is native(&ffi-lib) is export { * }

sub ncdirect_canutf8(NcdirectHandle $n --> bool)
	is native(&core-lib) is export { * }

sub ncdirect_check_pixel_support(NcdirectHandle $n --> int32)
	is native(&core-lib) is export { * }

sub ncdirect_canhalfblock(NcdirectHandle $nc --> bool)
	is native(&ffi-lib) is export { * }

sub ncdirect_canquadrant(NcdirectHandle $nc --> bool)
	is native(&ffi-lib) is export { * }

sub ncdirect_cansextant(NcdirectHandle $nc --> bool)
	is native(&ffi-lib) is export { * }

sub ncdirect_canoctant(NcdirectHandle $nc --> bool)
	is native(&ffi-lib) is export { * }

sub ncdirect_canbraille(NcdirectHandle $nc --> bool)
	is native(&ffi-lib) is export { * }

sub ncdirect_canget_cursor(NcdirectHandle $nc --> bool)
	is native(&core-lib) is export { * }