libnotcurses_sys/direct/
reimplemented.rs1use core::{
4 ffi::c_char,
5 ptr::{null, null_mut},
6};
7
8use crate::{
9 c_api::{self, NcChannels_u64, NcResult_i32, NcRgb_u32},
10 cstring, NcCapabilities, NcDirect, NcInput, NcTime,
11};
12
13#[inline]
15pub fn ncdirect_cantruecolor(ncd: &NcDirect) -> bool {
16 ncdirect_capabilities(ncd).rgb
17}
18
19#[inline]
21pub fn ncdirect_canchangecolor(ncd: &NcDirect) -> bool {
22 c_api::nccapability_canchangecolor(&ncdirect_capabilities(ncd))
23}
24
25#[inline]
27pub fn ncdirect_canfade(ncd: &NcDirect) -> bool {
28 ncdirect_canchangecolor(ncd) || ncdirect_cantruecolor(ncd)
29}
30
31#[inline]
33pub fn ncdirect_canopen_videos(_ncd: &NcDirect) -> bool {
34 unsafe { c_api::notcurses_canopen_videos(null()) }
35}
36
37#[inline]
39pub fn ncdirect_canopen_images(_ncd: &NcDirect) -> bool {
40 unsafe { c_api::notcurses_canopen_images(null()) }
41}
42
43#[inline]
45pub fn ncdirect_canhalfblock(ncd: &NcDirect) -> bool {
46 unsafe { c_api::ncdirect_canutf8(ncd) }
47}
48
49#[inline]
51pub fn ncdirect_canquadrant(ncd: &NcDirect) -> bool {
52 (unsafe { c_api::ncdirect_canutf8(ncd) }) && ncdirect_capabilities(ncd).quadrants
53}
54
55#[inline]
57pub fn ncdirect_cansextant(ncd: &NcDirect) -> bool {
58 (unsafe { c_api::ncdirect_canutf8(ncd) }) && ncdirect_capabilities(ncd).sextants
59}
60
61#[inline]
63pub fn ncdirect_canbraille(ncd: &NcDirect) -> bool {
64 (unsafe { c_api::ncdirect_canutf8(ncd) }) && ncdirect_capabilities(ncd).braille
65}
66
67#[inline]
69pub fn ncdirect_capabilities(ncd: &NcDirect) -> NcCapabilities {
70 unsafe { *crate::c_api::ffi::ncdirect_capabilities(ncd) }
71}
72
73#[inline]
81pub fn ncdirect_get_blocking(ncd: &mut NcDirect, input: Option<&mut NcInput>) -> NcResult_i32 {
82 let input_ptr = if let Some(i) = input { i as *mut _ } else { null_mut() };
83 unsafe { c_api::ncdirect_get(ncd, null(), input_ptr) as NcResult_i32 }
84}
85
86#[inline]
96pub fn ncdirect_get_nblock(ncd: &mut NcDirect, input: Option<&mut NcInput>) -> NcResult_i32 {
97 let input_ptr = if let Some(i) = input { i as *mut _ } else { null_mut() };
98 unsafe {
99 let ts = NcTime::new(0, 0);
100 c_api::ncdirect_get(ncd, &ts, input_ptr) as NcResult_i32
101 }
102}
103
104#[inline]
108pub fn ncdirect_set_fg_rgb8(ncd: &mut NcDirect, red: u8, green: u8, blue: u8) -> NcResult_i32 {
109 let rgb = (red as NcRgb_u32) << 16 | (green as NcRgb_u32) << 8 | blue as NcRgb_u32;
110 unsafe { c_api::ncdirect_set_fg_rgb(ncd, rgb) }
111}
112
113#[inline]
117pub fn ncdirect_set_bg_rgb8(ncd: &mut NcDirect, red: u8, green: u8, blue: u8) -> NcResult_i32 {
118 let rgb = (red as NcRgb_u32) << 16 | (green as NcRgb_u32) << 8 | blue as NcRgb_u32;
119 unsafe { c_api::ncdirect_set_bg_rgb(ncd, rgb) }
120}
121
122#[inline]
135pub fn ncdirect_hline_interp(
136 ncd: &mut NcDirect,
137 egc: &str,
138 len: u32,
139 h1: impl Into<NcChannels_u64>,
140 h2: impl Into<NcChannels_u64>,
141) -> NcResult_i32 {
142 let cs = cstring![egc];
143 let egc_ptr = cs.as_ptr() as *const c_char;
144
145 unsafe { crate::c_api::ffi::ncdirect_hline_interp(ncd, egc_ptr, len, h1.into(), h2.into()) }
146}
147
148#[inline]
160pub fn ncdirect_vline_interp(
161 ncd: &mut NcDirect,
162 egc: &str,
163 len: u32,
164 h1: impl Into<NcChannels_u64>,
165 h2: impl Into<NcChannels_u64>,
166) -> NcResult_i32 {
167 let cs = cstring![egc];
168 let egc_ptr = cs.as_ptr() as *const c_char;
169
170 unsafe { crate::c_api::ffi::ncdirect_vline_interp(ncd, egc_ptr, len, h1.into(), h2.into()) }
171}