]> granicus.if.org Git - graphviz/commitdiff
gvRenderContext: render to an arbitrary external context
authorglenlow <devnull@localhost>
Wed, 18 Feb 2009 12:36:32 +0000 (12:36 +0000)
committerglenlow <devnull@localhost>
Wed, 18 Feb 2009 12:36:32 +0000 (12:36 +0000)
lib/gvc/gvc.c
lib/gvc/gvc.h

index 23bbbcea28c0db646125c893d5bf160bd0463bc8..e81e24d0712daabf3ab360bf55ada52fbdc06f3c 100644 (file)
@@ -138,6 +138,41 @@ int gvRenderFilename(GVC_t *gvc, graph_t *g, const char *format, const char *fil
     return 0;
 }
 
+/* Render layout in a specified format to an external context */
+int gvRenderContext(GVC_t *gvc, graph_t *g, const char *format, void *context)
+{
+    int rc;
+    GVJ_t *job;
+       
+    g = g->root;
+       
+    /* create a job for the required format */
+    rc = gvjobs_output_langname(gvc, format);
+    job = gvc->job;
+    if (rc == NO_SUPPORT) {
+               agerr(AGERR, "Format: \"%s\" not recognized. Use one of:%s\n",
+                         format, gvplugin_list(gvc, API_device, format));
+               return -1;
+    }
+       
+    job->output_lang = gvrender_select(job, job->output_langname);
+    if (!GD_drawing(g) && !(job->flags & LAYOUT_NOT_REQUIRED)) {
+               fprintf(stderr, "Layout was not done\n");
+               return -1;
+    }
+       
+       job->context = context;
+       job->external_context = TRUE;
+       
+    gvRenderJobs(gvc, g);
+    gvrender_end_job(job);
+    gvdevice_finalize(job);
+    
+       gvjobs_delete(gvc);
+       
+    return 0;
+}
+
 /* Render layout in a specified format to a malloc'ed string */
 int gvRenderData(GVC_t *gvc, graph_t *g, const char *format, char **result, unsigned int *length)
 {
index 8ad4bdfbe067994494333a4352770cee3bc6fb17..44a91f15f3a3871f638fafe0a247d69f68590581 100644 (file)
@@ -80,6 +80,9 @@ extern int gvRender(GVC_t *gvc, graph_t *g, const char *format, FILE *out);
 /* Render layout in a specified format to an open FILE */
 extern int gvRenderFilename(GVC_t *gvc, graph_t *g, const char *format, const char *filename);
 
+/* Render layout in a specified format to an external context */
+extern int gvRenderContext(GVC_t *gvc, graph_t *g, const char *format, void *context);
+
 /* Render layout in a specified format to a malloc'ed string */
 extern int gvRenderData(GVC_t *gvc, graph_t *g, const char *format, char **result, unsigned int *length);