diff options
author | Quentin Glidic <sardemff7+git@sardemff7.net> | 2017-06-01 13:36:11 +0200 |
---|---|---|
committer | Quentin Glidic <sardemff7+git@sardemff7.net> | 2017-06-01 13:36:11 +0200 |
commit | 1d99363ce99d3412f20604ea93a49c7e3ee02340 (patch) | |
tree | 67e01edae4e4c8fd73576feefcb7355938c30177 /source/helper.c | |
parent | 93cb04e30f1c512a1744709f70f55faa080dbb70 (diff) |
helper: Move cairo_image_surface_create_from_svg to helper.c
Signed-off-by: Quentin Glidic <sardemff7+git@sardemff7.net>
Diffstat (limited to 'source/helper.c')
-rw-r--r-- | source/helper.c | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/source/helper.c b/source/helper.c index a75e8413..e0a0563e 100644 --- a/source/helper.c +++ b/source/helper.c @@ -43,10 +43,10 @@ #include <sys/stat.h> #include <pwd.h> #include <ctype.h> -#include <xcb/xcb.h> #include <pango/pango.h> #include <pango/pango-fontmap.h> #include <pango/pangocairo.h> +#include <librsvg/rsvg.h> #include "xcb.h" #include "helper.h" #include "helper-theme.h" @@ -1024,3 +1024,27 @@ char *helper_get_theme_path ( const char *file ) } return filename; } + +cairo_surface_t* cairo_image_surface_create_from_svg ( const gchar* file, int height ) +{ + cairo_surface_t *surface; + cairo_t *cr; + RsvgHandle * handle; + RsvgDimensionData dimensions; + + handle = rsvg_handle_new_from_file ( file, NULL ); + rsvg_handle_get_dimensions ( handle, &dimensions ); + double scale = (double) height / dimensions.height; + surface = cairo_image_surface_create ( CAIRO_FORMAT_ARGB32, + (double) dimensions.width * scale, + (double) dimensions.height * scale ); + cr = cairo_create ( surface ); + cairo_scale ( cr, scale, scale ); + rsvg_handle_render_cairo ( handle, cr ); + cairo_destroy ( cr ); + + rsvg_handle_close ( handle, NULL ); + g_object_unref ( handle ); + + return surface; +} |