pub use crate::{c_api, error, NcBlitter, NcResult, NcVisualOptions};
#[cfg(not(feature = "std"))]
use alloc::format;
use core::ffi::c_void;
impl NcBlitter {
pub const fn cell_height(&self) -> Option<u8> {
if let Some(size) = self.cell_size() {
Some(size.0)
} else {
None
}
}
pub const fn cell_width(&self) -> Option<u8> {
if let Some(size) = self.cell_size() {
Some(size.1)
} else {
None
}
}
pub const fn cell_size(&self) -> Option<(u8, u8)> {
use NcBlitter::*;
match self {
Ascii => Some((1, 1)),
Half => Some((2, 1)),
Quadrant => Some((2, 2)),
Sextant => Some((3, 2)),
Braille => Some((4, 2)),
_4x1 => Some((4, 1)),
_8x1 => Some((8, 1)),
_ => None,
}
}
}
impl NcBlitter {
pub fn blit_rgba(data: &[u8], line_size: usize, vopts: &NcVisualOptions) -> NcResult<usize> {
let data_ptr: *const c_void = data as *const _ as *const c_void;
let res = unsafe { c_api::ncblit_rgba(data_ptr, line_size as i32, vopts) };
error![
res,
&format!["NcBlitter::blit_rgba(data, {}, {:?})", line_size, vopts],
res as usize
];
}
pub fn blit_bgrx(data: &[u8], line_size: usize, vopts: &NcVisualOptions) -> NcResult<usize> {
let data_ptr: *const c_void = data as *const _ as *const c_void;
let res = unsafe { c_api::ncblit_bgrx(data_ptr, line_size as i32, vopts) };
error![
res,
&format!["NcBlitter::blit_bgrx(data, {}, {:?})", line_size, vopts],
res as usize
];
}
pub fn blit_rgb_packed(
data: &[u8],
line_size: usize,
vopts: &NcVisualOptions,
alpha: u8,
) -> NcResult<usize> {
let data_ptr: *const c_void = data as *const _ as *const c_void;
let res =
unsafe { c_api::ncblit_rgb_packed(data_ptr, line_size as i32, vopts, alpha as i32) };
error![
res,
&format![
"NcBlitter::blit_rgb_packed(data, {}, {:?}, {})",
line_size, vopts, alpha
],
res as usize
];
}
pub fn blit_rgb_loose(
data: &[u8],
line_size: usize,
vopts: &NcVisualOptions,
alpha: u8,
) -> NcResult<usize> {
let data_ptr: *const c_void = data as *const _ as *const c_void;
let res =
unsafe { c_api::ncblit_rgb_loose(data_ptr, line_size as i32, vopts, alpha as i32) };
error![
res,
&format![
"NcBlitter::blit_rgb_loose(data, {}, {:?}, {})",
line_size, vopts, alpha
],
res as usize
];
}
}