Current section
Files
Jump to
Current section
Files
native/skia_native/src/generated_shapes.rs
// Generated by mix skia.codegen. Do not edit by hand.
fn draw_clear<'a>(canvas: &skia_safe::Canvas, command: Term<'a>) -> NifResult<()> {
let args = decode_args(command)?;
draw_clear_impl(canvas, args)
}
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<'a>(canvas: &skia_safe::Canvas, command: Term<'a>) -> NifResult<()> {
let opts = decode_opts(command)?;
let decoded_opts = generated_opts::decode_rect_opts(&opts)?;
draw_rect_impl(canvas, decoded_opts, &opts)
}
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 stroke_paint_value = stroke_paint(
color,
opts.stroke_width.unwrap_or(1.0),
raw_opts,
)?;
draw_rect_shape(canvas, rect, radius, &stroke_paint_value);
}
Ok(())
}
fn draw_oval<'a>(canvas: &skia_safe::Canvas, command: Term<'a>) -> NifResult<()> {
let opts = decode_opts(command)?;
let decoded_opts = generated_opts::decode_oval_opts(&opts)?;
draw_oval_impl(canvas, decoded_opts, &opts)
}
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 stroke_paint_value = stroke_paint(
color,
opts.stroke_width.unwrap_or(1.0),
raw_opts,
)?;
canvas.draw_oval(rect, &stroke_paint_value);
}
Ok(())
}
fn draw_arc<'a>(canvas: &skia_safe::Canvas, command: Term<'a>) -> NifResult<()> {
let opts = decode_opts(command)?;
let decoded_opts = generated_opts::decode_arc_opts(&opts)?;
draw_arc_impl(canvas, decoded_opts, &opts)
}
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 stroke_paint_value = stroke_paint(
color,
opts.stroke_width.unwrap_or(1.0),
raw_opts,
)?;
canvas
.draw_arc(
rect,
opts.start_degrees,
opts.sweep_degrees,
use_center,
&stroke_paint_value,
);
}
Ok(())
}
fn draw_circle<'a>(canvas: &skia_safe::Canvas, command: Term<'a>) -> NifResult<()> {
let opts = decode_opts(command)?;
let decoded_opts = generated_opts::decode_circle_opts(&opts)?;
draw_circle_impl(canvas, decoded_opts, &opts)
}
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 stroke_paint_value = stroke_paint(
color,
opts.stroke_width.unwrap_or(1.0),
raw_opts,
)?;
canvas.draw_circle(center, opts.radius, &stroke_paint_value);
}
Ok(())
}
fn draw_vertices<'a>(canvas: &skia_safe::Canvas, command: Term<'a>) -> NifResult<()> {
let args = decode_args(command)?;
let opts = decode_opts(command)?;
let decoded_opts = generated_opts::decode_vertices_opts(&opts)?;
draw_vertices_impl(canvas, args, decoded_opts, &opts)
}
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 mut paint = match opts.fill {
Some(term) => decode_paint(term)?,
None => fill_paint(Color::WHITE),
};
apply_paint_effects(&mut paint, raw_opts)?;
canvas.draw_vertices(&vertices, blend_mode, &paint);
Ok(())
}
fn draw_line<'a>(canvas: &skia_safe::Canvas, command: Term<'a>) -> NifResult<()> {
let opts = decode_opts(command)?;
let decoded_opts = generated_opts::decode_line_opts(&opts)?;
draw_line_impl(canvas, decoded_opts, &opts)
}
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);
};
()
}