raqote 0.2.2

2D graphics library
Documentation

A pure Rust 2D Graphics Library.

Build Status Crates.io

Raqote aims to be a small, simple, fast software 2D graphics library with roughly the same capabilities as the cairo image backend.

Current functionality

  • path filling
  • stroking
  • dashing
  • image, solid, and gradient fills
  • rectangular and path clipping

Planned functionality

  • layers
  • blend modes
  • perspective image drawing
  • shadows?

Example:


    let mut dt = DrawTarget::new(400, 400);

    let mut pb = PathBuilder::new();
    pb.move_to(100., 10.);
    pb.cubic_to(150., 40., 175., 0., 200., 10.);
    pb.quad_to(120., 100., 80., 200.);
    pb.quad_to(150., 180., 300., 300.);
    pb.close();
    let path = pb.finish();

    let gradient = Source::RadialGradient(
        Gradient {
            stops: vec![
                GradientStop {
                    position: 0.2,
                    color: 0xff00ff00,
                },
                GradientStop {
                    position: 0.8,
                    color: 0xffffffff,
                },
                GradientStop {
                    position: 1.,
                    color: 0xffff00ff,
                },
            ],
        },
        euclid::Transform2D::create_translation(-150., -150.),
    );
    dt.fill(&path, &gradient, Winding::NonZero);

    let mut pb = PathBuilder::new();
    pb.move_to(100., 100.);
    pb.line_to(300., 300.);
    pb.line_to(200., 300.);
    let path = pb.finish();

    dt.stroke(
        &path,
        &StrokeStyle {
            cap: LineCap::Round,
            join: LineJoin::Round,
            width: 10.,
            mitre_limit: 2.,
            dash_array: vec![10., 18.],
            dash_offset: 16.,
        },
        &Source::Solid(SolidSource {
            r: 0x0,
            g: 0x0,
            b: 0x80,
            a: 0x80,
        }),
    );

    dt.write_png("example.png");

Produces:

example.png