// Generated by mix skia.codegen. Do not edit by hand.
fn draw_clear_impl<'a>(
canvas: &skia_safe::Canvas,
args: Vec<Term<'a>>,
) -> NifResult<()> {
if let Some(color) = args.first().and_then(|term| decode_color(*term).ok()) {
canvas.clear(color);
}
Ok(())
}
fn draw_rect_impl<'a>(
canvas: &skia_safe::Canvas,
opts: generated_opts::RectOpts<'a>,
raw_opts: &[(Atom, Term<'a>)],
) -> NifResult<()> {
let rect = Rect::from_xywh(opts.x, opts.y, opts.width, opts.height);
let radius = opts.radius.unwrap_or(0.0);
if let Some(mut paint) = opt_fill_paint(raw_opts, atoms::fill())? {
apply_blend_mode(&mut paint, raw_opts)?;
draw_rect_shape(canvas, rect, radius, &paint);
}
if let Some(color) = opt_color(raw_opts, atoms::stroke())? {
let paint = stroke_paint(color, opts.stroke_width.unwrap_or(1.0), raw_opts)?;
draw_rect_shape(canvas, rect, radius, &paint);
}
Ok(())
}
fn draw_oval_impl<'a>(
canvas: &skia_safe::Canvas,
opts: generated_opts::OvalOpts<'a>,
raw_opts: &[(Atom, Term<'a>)],
) -> NifResult<()> {
let rect = Rect::from_xywh(opts.x, opts.y, opts.width, opts.height);
if let Some(mut paint) = opt_fill_paint(raw_opts, atoms::fill())? {
apply_blend_mode(&mut paint, raw_opts)?;
canvas.draw_oval(rect, &paint);
}
if let Some(color) = opt_color(raw_opts, atoms::stroke())? {
let paint = stroke_paint(color, opts.stroke_width.unwrap_or(1.0), raw_opts)?;
canvas.draw_oval(rect, &paint);
}
Ok(())
}
fn draw_arc_impl<'a>(
canvas: &skia_safe::Canvas,
opts: generated_opts::ArcOpts<'a>,
raw_opts: &[(Atom, Term<'a>)],
) -> NifResult<()> {
let rect = Rect::from_xywh(opts.x, opts.y, opts.width, opts.height);
let use_center = opts.use_center.unwrap_or(false);
if let Some(mut paint) = opt_fill_paint(raw_opts, atoms::fill())? {
apply_blend_mode(&mut paint, raw_opts)?;
canvas
.draw_arc(rect, opts.start_degrees, opts.sweep_degrees, use_center, &paint);
}
if let Some(color) = opt_color(raw_opts, atoms::stroke())? {
let paint = stroke_paint(color, opts.stroke_width.unwrap_or(1.0), raw_opts)?;
canvas
.draw_arc(rect, opts.start_degrees, opts.sweep_degrees, use_center, &paint);
}
Ok(())
}
fn draw_circle_impl<'a>(
canvas: &skia_safe::Canvas,
opts: generated_opts::CircleOpts<'a>,
raw_opts: &[(Atom, Term<'a>)],
) -> NifResult<()> {
let center = Point::new(opts.x, opts.y);
if let Some(mut paint) = opt_fill_paint(raw_opts, atoms::fill())? {
apply_blend_mode(&mut paint, raw_opts)?;
canvas.draw_circle(center, opts.radius, &paint);
}
if let Some(color) = opt_color(raw_opts, atoms::stroke())? {
let paint = stroke_paint(color, opts.stroke_width.unwrap_or(1.0), raw_opts)?;
canvas.draw_circle(center, opts.radius, &paint);
}
Ok(())
}
fn draw_vertices_impl<'a>(
canvas: &skia_safe::Canvas,
args: Vec<Term<'a>>,
opts: generated_opts::VerticesOpts<'a>,
raw_opts: &[(Atom, Term<'a>)],
) -> NifResult<()> {
let vertices = vertices_from_term(*args.first().ok_or(rustler::Error::BadArg)?)?;
let blend_mode = generated_enums::decode_blend_mode(
opts.blend_mode.unwrap_or(atoms::src_over()),
)?;
let paint = match opts.fill {
Some(term) => decode_paint(term)?,
None => fill_paint(Color::WHITE),
};
let mut paint = paint;
apply_paint_effects(&mut paint, raw_opts)?;
canvas.draw_vertices(&vertices, blend_mode, &paint);
Ok(())
}
fn draw_line_impl<'a>(
canvas: &skia_safe::Canvas,
opts: generated_opts::LineOpts<'a>,
raw_opts: &[(Atom, Term<'a>)],
) -> NifResult<()> {
let color = decode_color(opts.stroke)?;
let paint = stroke_paint(color, opts.stroke_width.unwrap_or(1.0), raw_opts)?;
canvas.draw_line(point_from_term(opts.from)?, point_from_term(opts.to)?, &paint);
Ok(())
}
fn draw_rect_shape(canvas: &skia_safe::Canvas, rect: Rect, radius: f32, paint: &Paint) {
if radius > 0.0 {
canvas.draw_rrect(RRect::new_rect_xy(rect, radius, radius), paint);
} else {
canvas.draw_rect(rect, paint);
}
}