From 28e63edca5b51486394add0fcae7c8868b034f94 Mon Sep 17 00:00:00 2001 From: Tim Redfern Date: Wed, 23 Oct 2013 13:50:05 +0100 Subject: svg loader resolution independent --- rotord/src/nodes_drawing.h | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) (limited to 'rotord/src/nodes_drawing.h') diff --git a/rotord/src/nodes_drawing.h b/rotord/src/nodes_drawing.h index 79082cc..b26841e 100644 --- a/rotord/src/nodes_drawing.h +++ b/rotord/src/nodes_drawing.h @@ -232,16 +232,28 @@ namespace Rotor { Svg(map &settings):Svg() { base_settings(settings); rsvg=rsvg_handle_new_from_file((settings["media_path"]+attributes["filename"]->value).c_str(),nullptr); + if (rsvg) { + rsvg_handle_get_dimensions(rsvg,&dims); + cerr<<"Rotor: SVG loaded "<value<<" , "<value< &_settings) { return new Svg(_settings);}; void vector_output(cairo_t * cr,const Frame_spec &frame){ + //to make it resolution independent + //translate the difference between screen and drawing + if (rsvg){ + float scale=frame.w/dims.width; + cairo_save(cr); //not really even necessary? cairo_translate(cr, frame.w/2, frame.h/2); cairo_translate(cr, parameters["x"]->value * frame.w, parameters["y"]->value * frame.h); - cairo_scale(cr, parameters["scale"]->value , parameters["scale"]->value ); + cairo_scale(cr, parameters["scale"]->value*scale, parameters["scale"]->value*scale); cairo_rotate(cr,(parameters["rotation"]->value/180.0f)*M_PI); + cairo_translate(cr, -frame.w/2, -frame.h/2); + cairo_translate(cr, frame.w/2-(dims.width/2), frame.h/2-(dims.height/2)); rsvg_handle_render_cairo(rsvg,cr); @@ -251,6 +263,7 @@ namespace Rotor { } private: RsvgHandle * rsvg; + RsvgDimensionData dims; }; } -- cgit v1.2.3