• R/O
  • HTTP
  • SSH
  • HTTPS

Commit

Tags
No Tags

Frequently used words (click to add to your profile)

javac++androidlinuxc#windowsobjective-ccocoa誰得qtpythonphprubygameguibathyscaphec計画中(planning stage)翻訳omegatframeworktwitterdomtestvb.netdirectxゲームエンジンbtronarduinopreviewer

作図ソフト dia の改良版


Commit MetaInfo

Revisãoc158797dc1e9de793e479e7c6937cb612d2df504 (tree)
Hora2009-10-04 21:48:41
AutorHans Breuer <hans@breu...>
CommiterHans Breuer

Mensagem de Log

diagram-as-element: fix some typical bugs and leaks

- objecte_load_using_properties() is not vtable compatible
(maybe I should change the vtable?)
- don't leak the temporary file nor the DiaImage
- prefer rendering with "cairo-alpha-png"

TODO:

- extend the renderer interface to get rid of the extra DiaImage,
at least for some renderers (DiaRenderer::set_matrix?)
- the image gets updated too often, something wrong with mtime check?
- make diagrams directly selecteable in the properties dialog file entry
- allow to open the diagram stand-alone by context menu
- make new object available in the Misc sheet
- normalize filenames during save (parent diagram relative path)

Mudança Sumário

Diff

--- a/objects/Misc/diagram_as_object.c
+++ b/objects/Misc/diagram_as_object.c
@@ -76,11 +76,13 @@ _dae_create (Point *startpoint,
7676 void *user_data,
7777 Handle **handle1,
7878 Handle **handle2);
79+static DiaObject *
80+_dae_load (ObjectNode obj_node, int version, const char *filename);
7981
8082 static ObjectTypeOps _dae_type_ops =
8183 {
8284 (CreateFunc) _dae_create,
83- (LoadFunc) object_load_using_properties,
85+ (LoadFunc) _dae_load, /* can't use object_load_using_properties, signature mismatch */
8486 (SaveFunc) object_save_using_properties,
8587 (GetDefaultsFunc) NULL,
8688 (ApplyDefaultsFunc) NULL
@@ -91,8 +93,9 @@ DiaObjectType diagram_as_element_type =
9193 "Misc - Diagram", /* name */
9294 0, /* version */
9395 (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 */
9699 };
97100
98101 static void _dae_update_data (DiagramAsElement *dae);
@@ -197,14 +200,16 @@ _dae_draw(DiagramAsElement *dae, DiaRenderer *renderer)
197200 gchar *imgfname = NULL;
198201 gint fd = g_file_open_tmp ("diagram-as-elementXXXXXX.png", &imgfname, NULL);
199202 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);
202206 close(fd);
203207 if (ef) {
204208 ef->export_func (dae->data, imgfname, dae->filename, ef->user_data);
205209 /* TODO: change export_func to return success or GError* */
206210 dae->image = dia_image_load (imgfname);
207211 }
212+ g_unlink (imgfname);
208213 g_free (imgfname);
209214 }
210215 }
@@ -255,6 +260,9 @@ _dae_destroy(DiagramAsElement *dae)
255260 g_object_unref(dae->data);
256261
257262 g_free(dae->filename);
263+
264+ if (dae->image)
265+ g_object_unref (dae->image);
258266
259267 element_destroy(&dae->element);
260268 }
@@ -317,3 +325,10 @@ _dae_create (Point *startpoint,
317325 *handle2 = obj->handles[7];
318326 return &dae->element.object;
319327 }
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+}