summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFederico Mena Quintero <federico@gnome.org>2018-03-15 07:57:22 -0600
committerFederico Mena Quintero <federico@gnome.org>2018-03-16 10:44:54 -0600
commite23e7456cf450e979a8dcea215a99cae8c767df5 (patch)
treead3e07a7e91bcdba27b480b000130d07e538ed03
parent822e022bf86f9dd530989f40adeb41c65777cc2c (diff)
downloadlibrsvg-e23e7456cf450e979a8dcea215a99cae8c767df5.tar.gz
wip: start draw.rs
-rw-r--r--Makefile.am1
-rw-r--r--rsvg_internals/src/draw.rs58
-rw-r--r--rsvg_internals/src/lib.rs1
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;