use oxivgl_sys::*;
use super::area::Area;
use super::dsc::*;
pub const DRAW_TASK_TYPE_FILL: u32 = 1;
pub struct Layer {
ptr: *mut lv_layer_t,
}
impl core::fmt::Debug for Layer {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
f.debug_struct("Layer").finish_non_exhaustive()
}
}
impl Layer {
pub(crate) fn from_raw(ptr: *mut lv_layer_t) -> Self {
Self { ptr }
}
pub fn draw_rect(&self, dsc: &DrawRectDsc, area: Area) {
let area_lv: lv_area_t = area.into();
unsafe { lv_draw_rect(self.ptr, &dsc.inner, &area_lv) };
}
pub fn draw_image(&self, dsc: &DrawImageDsc<'_>, area: Area) {
let area_lv: lv_area_t = area.into();
unsafe { lv_draw_image(self.ptr, dsc.as_ptr(), &area_lv) };
}
pub fn draw_label(&self, dsc: &DrawLabelDscOwned, area: Area, text: &str) {
let mut buf = [0u8; 64];
let len = text.len().min(buf.len() - 1);
buf[..len].copy_from_slice(&text.as_bytes()[..len]);
buf[len] = 0;
let mut local_dsc = dsc.inner;
local_dsc.text = buf.as_ptr() as *const _;
local_dsc.set_text_local(1);
let area_lv: lv_area_t = area.into();
unsafe { lv_draw_label(self.ptr, &local_dsc, &area_lv) };
}
}
pub fn image_header_info(src: &lv_image_dsc_t) -> Option<(i32, i32)> {
let w = src.header.w() as i32;
let h = src.header.h() as i32;
if w > 0 && h > 0 { Some((w, h)) } else { None }
}