use std::ffi::{c_char, c_int};
pub struct TagItem {
text: *mut c_char,
color_code: *mut c_int,
rgb: *mut u32,
font_size: *mut f64,
}
impl TagItem {
pub(crate) unsafe fn new(
text: *mut c_char,
color_code: *mut c_int,
rgb: *mut u32,
font_size: *mut f64,
) -> Self {
Self {
text,
color_code,
rgb,
font_size,
}
}
pub fn set_text(&mut self, text: &str) {
let bytes = text.as_bytes();
let n = bytes.len().min(15);
unsafe {
std::ptr::copy_nonoverlapping(bytes.as_ptr(), self.text.cast::<u8>(), n);
*self.text.add(n) = 0;
}
}
pub fn set_color(&mut self, color: crate::TagColor) {
self.set_color_code(color.to_raw());
}
pub fn set_color_code(&mut self, code: i32) {
unsafe { *self.color_code = code }
}
pub fn set_rgb(&mut self, r: u8, g: u8, b: u8) {
let colorref = u32::from(r) | (u32::from(g) << 8_i32) | (u32::from(b) << 16_i32);
unsafe { *self.rgb = colorref }
}
pub fn set_font_size(&mut self, size: f64) {
unsafe { *self.font_size = size }
}
}