5 #include <glib/gi18n.h>
7 #include <librsvg/rsvg.h>
8 #include <librsvg/rsvg-cairo.h>
10 #include "tbo-types.h"
12 #define DOODLE_DIR DATA_DIR "/doodle/"
19 image = malloc (sizeof(SVGImage));
20 image->data = malloc(sizeof(char)*255);
21 image->free = tbo_svg_image_free;
22 image->draw = tbo_svg_image_draw;
23 image->save = tbo_svg_image_save;
24 image->clone = tbo_svg_image_clone;
32 tbo_svgimage_new_width_params (int x,
39 image = tbo_svgimage_new ();
43 image->height = height;
44 snprintf (image->data, 255, "%s", path);
52 tbo_svg_image_free (SVGImage *self)
59 tbo_svg_image_draw (SVGImage *self, Frame *frame, cairo_t *cr)
62 RsvgHandle *rsvg_handle = NULL;
63 RsvgDimensionData rsvg_dimension_data;
65 snprintf (path, 255, DOODLE_DIR "%s", self->data);
66 rsvg_handle = rsvg_handle_new_from_file (path, &error);
69 g_print (_("Couldn't load %s\n"), path);
74 g_print ("%s\n", error->message);
80 rsvg_handle_get_dimensions (rsvg_handle, &rsvg_dimension_data);
81 int w = rsvg_dimension_data.width;
82 int h = rsvg_dimension_data.height;
83 if (!self->width) self->width = w;
84 if (!self->height) self->height = h;
86 float factorw = (float)self->width / (float)w;
87 float factorh = (float)self->height / (float)h;
89 cairo_matrix_t mx = {1, 0, 0, 1, 0, 0};
90 tbo_object_get_flip_matrix (self, &mx);
92 cairo_rectangle(cr, frame->x+2, frame->y+2, frame->width-4, frame->height-4);
94 cairo_translate (cr, frame->x+self->x, frame->y+self->y);
95 cairo_rotate (cr, self->angle);
96 cairo_transform (cr, &mx);
97 cairo_scale (cr, factorw, factorh);
99 rsvg_handle_render_cairo (rsvg_handle, cr);
101 cairo_scale (cr, 1/factorw, 1/factorh);
102 cairo_transform (cr, &mx);
103 cairo_rotate (cr, -self->angle);
104 cairo_translate (cr, -(frame->x+self->x), -(frame->y+self->y));
105 cairo_reset_clip (cr);
107 g_object_unref (rsvg_handle);
112 tbo_svg_image_save (SVGImage *self, FILE *file)
116 snprintf (buffer, 1024, " <svgimage x=\"%d\" y=\"%d\" "
117 "width=\"%d\" height=\"%d\" "
118 "angle=\"%f\" flipv=\"%d\" fliph=\"%d\" "
120 self->x, self->y, self->width, self->height,
121 self->angle, self->flipv, self->fliph, (char*)self->data);
122 fwrite (buffer, sizeof (char), strlen (buffer), file);
124 snprintf (buffer, 1024, " </svgimage>\n");
125 fwrite (buffer, sizeof (char), strlen (buffer), file);
129 tbo_svg_image_clone (SVGImage *self)
133 newimage = tbo_svgimage_new_width_params (self->x,
138 newimage->angle = self->angle;
139 newimage->flipv = self->flipv;
140 newimage->fliph = self->fliph;