Skip to main content

native/skia_native/src/generated_images.rs

// Generated by mix skia.codegen. Do not edit by hand.

fn draw_image_impl<'a>(
    canvas: &skia_safe::Canvas,
    args: Vec<Term<'a>>,
    opts: generated_opts::ImageOpts<'a>,
    raw_opts: &[(Atom, Term<'a>)],
) -> NifResult<()> {
    let image = image_from_term(*args.first().ok_or(rustler::Error::BadArg)?)?;
    let mut paint = Paint::default();
    paint.set_anti_alias(true);
    if let Some(opacity) = opts.opacity {
        paint.set_alpha((opacity.clamp(0.0, 1.0) * 255.0).round() as u8);
    }
    apply_blend_mode(&mut paint, raw_opts)?;
    let sampling = opt_sampling(raw_opts, atoms::sampling())?;
    let source = match opts.source {
        Some(term) => Some(rect_from_term(term)?),
        None => None,
    };
    match (opts.width, opts.height, source) {
        (Some(width), Some(height), source) => {
            let src = source
                .as_ref()
                .map(|rect| (rect, skia_safe::canvas::SrcRectConstraint::Strict));
            canvas
                .draw_image_rect_with_sampling_options(
                    image,
                    src,
                    Rect::from_xywh(opts.x, opts.y, width, height),
                    sampling,
                    &paint,
                );
        }
        (_, _, Some(source)) => {
            canvas
                .draw_image_rect_with_sampling_options(
                    image,
                    Some((&source, skia_safe::canvas::SrcRectConstraint::Strict)),
                    Rect::from_xywh(opts.x, opts.y, source.width(), source.height()),
                    sampling,
                    &paint,
                );
        }
        _ => {
            canvas
                .draw_image_with_sampling_options(
                    image,
                    (opts.x, opts.y),
                    sampling,
                    Some(&paint),
                );
        }
    }
    Ok(())
}
fn draw_picture_impl<'a>(
    canvas: &skia_safe::Canvas,
    args: Vec<Term<'a>>,
    opts: generated_opts::PictureOpts<'a>,
    raw_opts: &[(Atom, Term<'a>)],
) -> NifResult<()> {
    let picture = picture_from_term(*args.first().ok_or(rustler::Error::BadArg)?)?;
    let mut paint = Paint::default();
    paint.set_anti_alias(true);
    if let Some(opacity) = opts.opacity {
        paint.set_alpha((opacity.clamp(0.0, 1.0) * 255.0).round() as u8);
    }
    apply_blend_mode(&mut paint, raw_opts)?;
    canvas.save();
    canvas.translate((opts.x.unwrap_or(0.0), opts.y.unwrap_or(0.0)));
    canvas.draw_picture(&picture, None, Some(&paint));
    canvas.restore();
    Ok(())
}