1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122
/*! A pure Rust 2D Graphics Library. 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 - blend modes - layers - repeat modes for images - global alpha Planned functionality - perspective image drawing - shadows? ### Notable users - [resvg](https://github.com/RazrFalcon/resvg) supports using raqote as a backend. - [Servo](https://github.com/servo/servo) can use raqote as a canvas backend. Example: ```rust use raqote::*; 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::new_radial_gradient( Gradient { stops: vec![ GradientStop { position: 0.2, color: Color::new(0xff, 0, 0xff, 0), }, GradientStop { position: 0.8, color: Color::new(0xff, 0xff, 0xff, 0xff), }, GradientStop { position: 1., color: Color::new(0xff, 0xff, 0, 0xff), }, ], }, Point::new(150., 150.), 128., Spread::Pad, ); dt.fill(&path, &gradient, &DrawOptions::new()); 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, &Source::Solid(SolidSource { r: 0x0, g: 0x0, b: 0x80, a: 0x80, }), &StrokeStyle { cap: LineCap::Round, join: LineJoin::Round, width: 10., miter_limit: 2., dash_array: vec![10., 18.], dash_offset: 16., }, &DrawOptions::new() ); dt.write_png("example.png"); ``` Produces: ![example.png](https://github.com/jrmuizel/raqote/raw/master/example.png) */ #![warn(missing_copy_implementations)] mod blitter; mod dash; mod draw_target; mod geom; mod rasterizer; mod stroke; mod tests; mod path_builder; pub use path_builder::*; pub use crate::draw_target::{AntialiasMode, FilterMode}; pub use crate::draw_target::{BlendMode, DrawOptions, DrawTarget, SolidSource, Source, Winding, ExtendMode}; pub use crate::stroke::*; pub use sw_composite::{Color, Gradient, GradientStop, Image, Spread}; pub type IntRect = euclid::default::Box2D<i32>; pub type IntPoint = euclid::default::Point2D<i32>; pub type Point = euclid::default::Point2D<f32>; pub type Transform = euclid::default::Transform2D<f32>; pub type Vector = euclid::default::Vector2D<f32>;