use std::ptr;
use crate::{
SCREEN, NCurseswError,
gen::{ColorType, ColorsType},
shims::ncurses,
extend::{ColorPair, Colors}
};
pub fn alloc_pair(colors: Colors) -> result!(ColorPair) {
assert!(colors.screen().is_none(), "alloc_pair() : colors.screen().is_some()");
let number = ncurses::alloc_pair(colors.foreground().number(), colors.background().number());
if number.is_negative() {
Err(ncurses_function_error_with_rc!("alloc_pair", number))
} else {
Ok(ColorPair::_from(None, number))
}
}
pub fn find_pair(colors: Colors) -> Option<ColorPair> {
assert!(colors.screen().is_none(), "find_pair() : colors.screen().is_some()");
let number = ncurses::find_pair(colors.foreground().number(), colors.background().number());
if number.is_negative() {
None
} else {
Some(ColorPair::_from(None, number))
}
}
pub fn alloc_pair_sp(screen: SCREEN, colors: Colors) -> result!(ColorPair) {
assert!(colors.screen().map_or_else(|| false, |colors_scr| ptr::eq(screen, colors_scr)), "alloc_pair_sp() : screen.is_null() || screen != colors.screen()");
let number = unsafe { ncurses::alloc_pair_sp(screen, colors.foreground().number(), colors.background().number()) };
if number.is_negative() {
Err(ncurses_function_error_with_rc!("alloc_pair_sp", number))
} else {
Ok(ColorPair::_from(Some(screen), number))
}
}
pub fn find_pair_sp(screen: SCREEN, colors: Colors) -> Option<ColorPair> {
assert!(colors.screen().map_or_else(|| false, |colors_scr| ptr::eq(screen, colors_scr)), "find_pair_sp() : screen.is_null() || screen != colors.screen()");
let number = unsafe { ncurses::find_pair_sp(screen, colors.foreground().number(), colors.background().number()) };
if number.is_negative() {
None
} else {
Some(ColorPair::_from(Some(screen), number))
}
}