use crate::{Point, Rect};
pub struct Canvas {
_private: (),
}
impl Canvas {
pub fn create(width: i32, height: i32) -> Option<Self> {
let ok = unsafe { m5unified_sys::m5u_canvas_create(width, height) };
ok.then_some(Self { _private: () })
}
pub fn push(&mut self, x: i32, y: i32) {
unsafe { m5unified_sys::m5u_canvas_push(x, y) }
}
pub fn fill_screen(&mut self, color: u16) {
unsafe { m5unified_sys::m5u_canvas_fill_screen(color) }
}
pub fn fill_smooth_circle(&mut self, center: Point, r: i32, color: u16) {
unsafe { m5unified_sys::m5u_canvas_fill_smooth_circle(center.x, center.y, r, color) }
}
pub fn draw_circle(&mut self, x: i32, y: i32, r: i32, color: u16) {
unsafe { m5unified_sys::m5u_canvas_draw_circle(x, y, r, color) }
}
pub fn fill_circle(&mut self, x: i32, y: i32, r: i32, color: u16) {
unsafe { m5unified_sys::m5u_canvas_fill_circle(x, y, r, color) }
}
pub fn fill_rect(&mut self, x: i32, y: i32, w: i32, h: i32, color: u16) {
unsafe { m5unified_sys::m5u_canvas_fill_rect(x, y, w, h, color) }
}
pub fn fill_smooth_round_rect(&mut self, rect: Rect, r: i32, color: u16) {
unsafe {
m5unified_sys::m5u_canvas_fill_smooth_round_rect(
rect.x, rect.y, rect.w, rect.h, r, color,
)
}
}
pub fn fill_arc(
&mut self,
center: Point,
r_inner: i32,
r_outer: i32,
angle0: f32,
angle1: f32,
color: u16,
) {
unsafe {
m5unified_sys::m5u_canvas_fill_arc(
center.x, center.y, r_inner, r_outer, angle0, angle1, color,
)
}
}
pub fn fill_ellipse(&mut self, x: i32, y: i32, rx: i32, ry: i32, color: u16) {
unsafe { m5unified_sys::m5u_canvas_fill_ellipse(x, y, rx, ry, color) }
}
pub fn draw_ellipse(&mut self, x: i32, y: i32, rx: i32, ry: i32, color: u16) {
unsafe { m5unified_sys::m5u_canvas_draw_ellipse(x, y, rx, ry, color) }
}
}
impl Drop for Canvas {
fn drop(&mut self) {
unsafe { m5unified_sys::m5u_canvas_delete() }
}
}