summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTim Redfern <tim@eclectronics.org>2013-10-23 13:50:05 +0100
committerTim Redfern <tim@eclectronics.org>2013-10-23 13:50:05 +0100
commit28e63edca5b51486394add0fcae7c8868b034f94 (patch)
treeebddadc0f8aa83cb2223bd476ffc73d620a9296d
parentfd20eb3cf43383b2d2d831915e12804b1a278b18 (diff)
svg loader resolution independent
-rw-r--r--rotord/Makefile2
-rw-r--r--rotord/src/nodes_drawing.h15
2 files changed, 15 insertions, 2 deletions
diff --git a/rotord/Makefile b/rotord/Makefile
index 16380c5..55d2970 100644
--- a/rotord/Makefile
+++ b/rotord/Makefile
@@ -9,7 +9,7 @@ MY_CFLAGS = -Wswitch -fpermissive -std=c++11 -I /usr/include/librsvg-2.0/librsvg
# -I ../ffmpeg
# The linker options.libgstaasinklibgstaasink.so
-MY_LIBS = -lrsvg-2 -lnoise -lffms2 -ljsoncpp -lcairo -lopencv_core -lopencv_video -lopencv_imgproc -lopencv_highgui -lPocoNet -lPocoXML -lPocoUtil -lPocoFoundation -lvamp-hostsdk -lsndfile -L /usr/local/lib -lswscale -lavcodec -lavformat -lavfilter -lavdevice -lavutil -lstdc++ -lm
+MY_LIBS = -lgobject-2.0 -lrsvg-2 -lnoise -lffms2 -ljsoncpp -lcairo -lopencv_core -lopencv_video -lopencv_imgproc -lopencv_highgui -lPocoNet -lPocoXML -lPocoUtil -lPocoFoundation -lvamp-hostsdk -lsndfile -L /usr/local/lib -lswscale -lavcodec -lavformat -lavfilter -lavdevice -lavutil -lstdc++ -lm
#-lopencv_highgui
#MY_LIBS = -lPocoNet -lPocoXML -lPocoUtil -lPocoFoundation -lvamp-hostsdk -lsndfile -L /usr/local/lib -lswscale -lavcodec -lavformat -lavfilter -lavdevice -lavutil $(shell pkg-config gstreamer-0.10 gstreamer-video-0.10 gstreamer-base-0.10 --libs)
# -lgstreamer-0.10 -lgstreamer-video-0.10 -lgstreamer-base-0.10 -lglib-2.0 -lgstapp-0.10
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<string,string> &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 "<<attributes["filename"]->value<<" , "<<dims.width<<"x"<<dims.height<<endl;
+ }
+ else cerr<<"Rotor: SVG failed to load "<<attributes["filename"]->value<<endl;
};
~Svg(){};
Svg* clone(map<string,string> &_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;
};
}