作図ソフト dia の改良版
修訂 | c158797dc1e9de793e479e7c6937cb612d2df504 (tree) |
---|---|
時間 | 2009-10-04 21:48:41 |
作者 | Hans Breuer <hans@breu...> |
Commiter | Hans Breuer |
diagram-as-element: fix some typical bugs and leaks
TODO:
@@ -76,11 +76,13 @@ _dae_create (Point *startpoint, | ||
76 | 76 | void *user_data, |
77 | 77 | Handle **handle1, |
78 | 78 | Handle **handle2); |
79 | +static DiaObject * | |
80 | +_dae_load (ObjectNode obj_node, int version, const char *filename); | |
79 | 81 | |
80 | 82 | static ObjectTypeOps _dae_type_ops = |
81 | 83 | { |
82 | 84 | (CreateFunc) _dae_create, |
83 | - (LoadFunc) object_load_using_properties, | |
85 | + (LoadFunc) _dae_load, /* can't use object_load_using_properties, signature mismatch */ | |
84 | 86 | (SaveFunc) object_save_using_properties, |
85 | 87 | (GetDefaultsFunc) NULL, |
86 | 88 | (ApplyDefaultsFunc) NULL |
@@ -91,8 +93,9 @@ DiaObjectType diagram_as_element_type = | ||
91 | 93 | "Misc - Diagram", /* name */ |
92 | 94 | 0, /* version */ |
93 | 95 | (char **) diagram_as_element_xpm, /* pixmap */ |
94 | - | |
95 | - &_dae_type_ops /* ops */ | |
96 | + &_dae_type_ops, /* ops */ | |
97 | + NULL, /* pixmap_file */ | |
98 | + 0 /* default_uder_data */ | |
96 | 99 | }; |
97 | 100 | |
98 | 101 | static void _dae_update_data (DiagramAsElement *dae); |
@@ -197,14 +200,16 @@ _dae_draw(DiagramAsElement *dae, DiaRenderer *renderer) | ||
197 | 200 | gchar *imgfname = NULL; |
198 | 201 | gint fd = g_file_open_tmp ("diagram-as-elementXXXXXX.png", &imgfname, NULL); |
199 | 202 | if (fd != -1) { |
200 | - DiaExportFilter *ef = filter_guess_export_filter (imgfname); | |
201 | - | |
203 | + DiaExportFilter *ef = filter_get_by_name ("cairo-alpha-png"); | |
204 | + if (!ef) /* prefer cairo with alpha, but don't require it */ | |
205 | + ef = filter_guess_export_filter (imgfname); | |
202 | 206 | close(fd); |
203 | 207 | if (ef) { |
204 | 208 | ef->export_func (dae->data, imgfname, dae->filename, ef->user_data); |
205 | 209 | /* TODO: change export_func to return success or GError* */ |
206 | 210 | dae->image = dia_image_load (imgfname); |
207 | 211 | } |
212 | + g_unlink (imgfname); | |
208 | 213 | g_free (imgfname); |
209 | 214 | } |
210 | 215 | } |
@@ -255,6 +260,9 @@ _dae_destroy(DiagramAsElement *dae) | ||
255 | 260 | g_object_unref(dae->data); |
256 | 261 | |
257 | 262 | g_free(dae->filename); |
263 | + | |
264 | + if (dae->image) | |
265 | + g_object_unref (dae->image); | |
258 | 266 | |
259 | 267 | element_destroy(&dae->element); |
260 | 268 | } |
@@ -317,3 +325,10 @@ _dae_create (Point *startpoint, | ||
317 | 325 | *handle2 = obj->handles[7]; |
318 | 326 | return &dae->element.object; |
319 | 327 | } |
328 | + | |
329 | +static DiaObject * | |
330 | +_dae_load (ObjectNode obj_node, int version, const char *filename) | |
331 | +{ | |
332 | + return object_load_using_properties (&diagram_as_element_type, | |
333 | + obj_node, version, filename); | |
334 | +} |