#[non_exhaustive]
#[derive(Clone, Copy, PartialEq, Eq)]
pub enum Blitter {
Default,
Ascii,
Half,
Quadrant,
Sextant,
Braille,
Pixel,
_4x1,
_8x1,
}
#[allow(non_upper_case_globals)]
impl Blitter {
pub const _1x1: Blitter = Blitter::Ascii;
pub const _2x1: Blitter = Blitter::Half;
pub const _2x2: Blitter = Blitter::Quadrant;
pub const _3x2: Blitter = Blitter::Sextant;
}
mod core_impls {
use super::Blitter;
use crate::sys::{c_api::NcBlitter_u32, NcBlitter};
use core::fmt;
impl Default for Blitter {
fn default() -> Self {
Self::Default
}
}
impl fmt::Display for Blitter {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(
f,
"{}",
match self {
Blitter::Default => "Default",
Blitter::Ascii => "Ascii",
Blitter::Half => "Half",
Blitter::Quadrant => "Quadrant",
Blitter::Sextant => "Sextant",
Blitter::Braille => "Braille",
Blitter::Pixel => "Pixel",
Blitter::_4x1 => "4x1",
Blitter::_8x1 => "8x1",
}
)
}
}
impl fmt::Debug for Blitter {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "Blitter::{}", self)
}
}
impl From<NcBlitter> for Blitter {
fn from(nc: NcBlitter) -> Blitter {
match nc {
NcBlitter::Default => Blitter::Default,
NcBlitter::Ascii => Blitter::Ascii,
NcBlitter::Half => Blitter::Half,
NcBlitter::Quadrant => Blitter::Quadrant,
NcBlitter::Sextant => Blitter::Sextant,
NcBlitter::Braille => Blitter::Braille,
NcBlitter::Pixel => Blitter::Pixel,
NcBlitter::_4x1 => Blitter::_4x1,
NcBlitter::_8x1 => Blitter::_8x1,
_ => Blitter::default(),
}
}
}
impl From<Blitter> for NcBlitter {
fn from(blitter: Blitter) -> NcBlitter {
match blitter {
Blitter::Default => NcBlitter::Default,
Blitter::Ascii => NcBlitter::Ascii,
Blitter::Half => NcBlitter::Half,
Blitter::Quadrant => NcBlitter::Quadrant,
Blitter::Sextant => NcBlitter::Sextant,
Blitter::Braille => NcBlitter::Braille,
Blitter::Pixel => NcBlitter::Pixel,
Blitter::_4x1 => NcBlitter::_4x1,
Blitter::_8x1 => NcBlitter::_8x1,
}
}
}
impl From<NcBlitter_u32> for Blitter {
fn from(ncu: NcBlitter_u32) -> Blitter {
NcBlitter::from(ncu).into()
}
}
impl From<Blitter> for NcBlitter_u32 {
fn from(blitter: Blitter) -> NcBlitter_u32 {
NcBlitter::from(blitter).into()
}
}
}
impl Blitter {
pub const fn cell_height(&self) -> Option<u8> {
if let Some(size) = self.cell_size() {
Some(size.1)
} else {
None
}
}
pub const fn cell_width(&self) -> Option<u8> {
if let Some(size) = self.cell_size() {
Some(size.0)
} else {
None
}
}
pub const fn cell_size(&self) -> Option<(u8, u8)> {
match self {
Blitter::Ascii => Some((1, 1)),
Blitter::Half => Some((1, 2)),
Blitter::Quadrant => Some((2, 2)),
Blitter::Sextant => Some((2, 3)),
Blitter::Braille => Some((2, 4)),
Blitter::_4x1 => Some((1, 4)),
Blitter::_8x1 => Some((1, 8)),
_ => None, }
}
}