1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
//! `NcPalette` methods and associated functions.
use crate::{c_api, error, Nc, NcChannel, NcComponent, NcPalette, NcPaletteIndex, NcResult, NcRgb};
impl NcPalette {
/// New `NcPalette`.
///
/// *C style function: [ncpalette_new()][c_api::ncpalette_new].*
pub fn new<'a>(nc: &mut Nc) -> &'a mut Self {
unsafe { &mut *c_api::ncpalette_new(nc) }
}
/// Frees this `NcPalette`.
///
/// *C style function: [ncpalette_free()][c_api::ncpalette_free].*
pub fn free(&mut self) {
unsafe {
c_api::ncpalette_free(self);
}
}
/// Attempts to configure the terminal with this NcPalette.
///
/// *C style function: [ncpalette_use()][c_api::ncpalette_use].*
pub fn r#use(&self, nc: &mut Nc) -> NcResult<()> {
error![unsafe { c_api::ncpalette_use(nc, self) }]
}
/// Returns the [`NcComponent`]s from the [`NcChannel`] in this `NcPalette`.
///
/// *C style function: [ncpalette_get_rgb()][c_api::ncpalette_get_rgb8].*
pub fn get_rgb8(&self, index: NcPaletteIndex) -> (NcComponent, NcComponent, NcComponent) {
let (mut r, mut g, mut b) = (0, 0, 0);
c_api::ncchannel_rgb8(self.chans[index as usize], &mut r, &mut g, &mut b);
(r, g, b)
}
/// Extracts the [`NcComponent`]s from an [`NcChannel`] entry inside
/// this NcPalette, and returns the NcChannel.
///
/// *C style function: [ncpalette_get_rgb()][c_api::ncpalette_get_rgb8].*
pub fn get_rgb(&self, index: NcPaletteIndex) -> NcChannel {
let (mut r, mut g, mut b) = (0, 0, 0);
c_api::ncchannel_rgb8(self.chans[index as usize], &mut r, &mut g, &mut b)
}
/// Sets the [`NcRgb`] value of the [`NcChannel`][crate::NcChannel] entry
/// inside this NcPalette.
///
/// *C style function: [ncpalette_set()][c_api::ncpalette_set].*
pub fn set(&mut self, index: NcPaletteIndex, rgb: NcRgb) {
c_api::ncchannel_set(&mut self.chans[index as usize], rgb);
}
}
