diff options
author | Federico Mena Quintero <federico@gnome.org> | 2018-03-15 07:57:22 -0600 |
---|---|---|
committer | Federico Mena Quintero <federico@gnome.org> | 2018-03-16 10:44:54 -0600 |
commit | e23e7456cf450e979a8dcea215a99cae8c767df5 (patch) | |
tree | ad3e07a7e91bcdba27b480b000130d07e538ed03 | |
parent | 822e022bf86f9dd530989f40adeb41c65777cc2c (diff) | |
download | librsvg-e23e7456cf450e979a8dcea215a99cae8c767df5.tar.gz |
wip: start draw.rs
-rw-r--r-- | Makefile.am | 1 | ||||
-rw-r--r-- | rsvg_internals/src/draw.rs | 58 | ||||
-rw-r--r-- | rsvg_internals/src/lib.rs | 1 |
3 files changed, 60 insertions, 0 deletions
diff --git a/Makefile.am b/Makefile.am index eb47a972..cd7324a1 100644 --- a/Makefile.am +++ b/Makefile.am @@ -75,6 +75,7 @@ RUST_SRC = \ rsvg_internals/src/cnode.rs \ rsvg_internals/src/color.rs \ rsvg_internals/src/coord_units.rs \ + rsvg_internals/src/draw.rs \ rsvg_internals/src/drawing_ctx.rs \ rsvg_internals/src/error.rs \ rsvg_internals/src/gradient.rs \ diff --git a/rsvg_internals/src/draw.rs b/rsvg_internals/src/draw.rs new file mode 100644 index 00000000..89600f6d --- /dev/null +++ b/rsvg_internals/src/draw.rs @@ -0,0 +1,58 @@ +use cairo; +use glib::translate::*; +use glib_sys; + +use drawing_ctx::{self, RsvgDrawingCtx}; +use path_builder::RsvgPathBuilder; +use state; +/* +#[no_mangle] +pub extern "C" fn rsvg_draw_path_builder(draw_ctx: *mut RsvgDrawingCtx, + raw_builder: *const RsvgPathBuilder, + clipping: glib_sys::gboolean) +{ + assert!(!draw_ctx.is_null()); + assert!(!raw_builder.is_null()); + + let builder = unsafe { &*raw_builder }; + let clipping: bool = from_glib(clipping); + + if !clipping { + drawing_ctx::push_discrete_layer(draw_ctx); + } + + let state = drawing_ctx::get_current_state(draw_ctx); + let cr = drawing_ctx::get_cairo_context(draw_ctx); + let affine = drawing_ctx::get_current_state_affine(draw_ctx); + + drawing_ctx::set_affine_on_cr(draw_ctx, &cr, &affine); + + builder.to_cairo(&cr); + + if clipping { + cr.set_fill_rule(state::get_clip_rule(state)); + } else { + cr.set_fill_rule(state::get_fill_rule(state)); + + stroke_and_fill(&cr, draw_ctx); + + drawing_ctx::pop_discrete_layer(draw_ctx); + } +} + +fn stroke_and_fill(cr: &cairo::Context, draw_ctx: *mut RsvgDrawingCtx) { + let state = drawing_ctx::get_current_state(draw_ctx); + + cr.set_antialias(state::get_shape_rendering_type(state)); + + setup_cr_for_stroke(cr, draw_ctx, state); + + FIXME +} + +fn setup_cr_for_stroke(cairo::Context &cr, draw_ctx: *mut RsvgDrawingCtx, state: *mut RsvgState) +{ + cr.set_line_width(); +} + +*/ diff --git a/rsvg_internals/src/lib.rs b/rsvg_internals/src/lib.rs index 8960ec39..e25632ec 100644 --- a/rsvg_internals/src/lib.rs +++ b/rsvg_internals/src/lib.rs @@ -147,6 +147,7 @@ mod chars; mod clip_path; mod cnode; mod color; +mod draw; mod drawing_ctx; mod error; mod float_eq_cairo; |