From: ellson Date: Fri, 29 Sep 2006 17:42:45 +0000 (+0000) Subject: fix ps library shapes X-Git-Tag: LAST_LIBGRAPH~32^2~5844 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=c66503086b236e13e3ece3425a31c40fdd327781;p=graphviz fix ps library shapes --- diff --git a/lib/gvc/gvplugin_render.h b/lib/gvc/gvplugin_render.h index b126995d8..7f100c793 100644 --- a/lib/gvc/gvplugin_render.h +++ b/lib/gvc/gvplugin_render.h @@ -56,6 +56,7 @@ extern "C" { int arrow_at_start, int arrow_at_end, int); void (*polyline) (GVJ_t * job, pointf * A, int n); void (*comment) (GVJ_t * job, char *comment); + void (*library_shape) (GVJ_t * job, char *name, pointf * A, int n, int filled); }; #ifdef __cplusplus diff --git a/lib/gvc/gvrender.c b/lib/gvc/gvrender.c index 58a973d93..8585695ee 100644 --- a/lib/gvc/gvrender.c +++ b/lib/gvc/gvrender.c @@ -37,6 +37,7 @@ #include "gvcproc.h" extern int emit_once(char *str); +extern shape_desc *find_user_shape(char *name); /* storage for temporary hacks until client API is FP */ static pointf *AF; @@ -920,8 +921,13 @@ void gvrender_usershape(GVJ_t * job, char *name, pointf * a, int n, bool filled) int i; pointf *af; - if (! (us = gvusershape_find(name))) + if (! (us = gvusershape_find(name))) { + if (find_user_shape(name)) { + if (gvre && gvre->library_shape) + gvre->library_shape(job, name, a, n, filled); + } return; + } if (job->flags & GVRENDER_DOES_TRANSFORM) af = a; diff --git a/lib/gvc/gvusershape.c b/lib/gvc/gvusershape.c index f4f8107ec..3955f8b16 100644 --- a/lib/gvc/gvusershape.c +++ b/lib/gvc/gvusershape.c @@ -337,18 +337,12 @@ point gvusershape_size(graph_t * g, char *name) dpi = POINTS_PER_INCH; /* no shape file, no shape size */ - if (!name || (*name == '\0')) { + if (!name || (*name == '\0') || !(us = gvusershape_open (name))) { rv.x = rv.y = -1; - return rv; } - - if ((us = gvusershape_open (name))) { + else { rv.x = us->w * dpi / us->dpi; rv.y = us->h * dpi / us->dpi; } - else { - rv.x = rv.y = -1; - } - return rv; } diff --git a/plugin/core/gvrender_core_dot.c b/plugin/core/gvrender_core_dot.c index 682e7d12e..0d924c0cc 100644 --- a/plugin/core/gvrender_core_dot.c +++ b/plugin/core/gvrender_core_dot.c @@ -312,6 +312,7 @@ gvrender_engine_t xdot_engine = { xdot_bezier, xdot_polyline, 0, /* xdot_comment */ + 0, /* xdot_library_shape */ }; gvrender_features_t canon_features = { diff --git a/plugin/core/gvrender_core_fig.c b/plugin/core/gvrender_core_fig.c index 1817b7a9c..165c7d782 100644 --- a/plugin/core/gvrender_core_fig.c +++ b/plugin/core/gvrender_core_fig.c @@ -501,7 +501,8 @@ gvrender_engine_t fig_engine = { fig_polygon, fig_bezier, fig_polyline, - fig_comment + fig_comment, + 0, /* fig_library_shape */ }; diff --git a/plugin/core/gvrender_core_map.c b/plugin/core/gvrender_core_map.c index ca7c2fd85..5e04743d7 100644 --- a/plugin/core/gvrender_core_map.c +++ b/plugin/core/gvrender_core_map.c @@ -282,6 +282,7 @@ static gvrender_engine_t map_engine = { 0, /* map_bezier */ 0, /* map_polyline */ 0, /* map_comment */ + 0, /* map_library_shape */ }; static gvrender_features_t map_features = { diff --git a/plugin/core/gvrender_core_ps.c b/plugin/core/gvrender_core_ps.c index 68283dfc7..1da76c244 100644 --- a/plugin/core/gvrender_core_ps.c +++ b/plugin/core/gvrender_core_ps.c @@ -88,7 +88,9 @@ static void psgen_begin_graph(GVJ_t * job) if (job->common->show_boxes == NULL) core_fputs(job, "%%BoundingBox: (atend)\n"); core_fputs(job, "%%EndComments\nsave\n"); + /* include shape library */ cat_preamble(job, job->common->lib); + /* include epsf */ epsf_define(job->output_file); } isLatin1 = (GD_charset(obj->u.g) == CHAR_LATIN1); @@ -439,6 +441,29 @@ static void psgen_comment(GVJ_t * job, char *str) core_fputs(job, "\n"); } +static void psgen_library_shape(GVJ_t * job, char *name, pointf * A, int n, int filled) +{ + int j; + + if (filled && job->obj->fillcolor.u.HSVA[3] > .5) { + ps_set_color(job, &(job->obj->fillcolor)); + core_fputs(job, "[ "); + for (j = 0; j < n; j++) + core_printf(job, "%g %g ", A[j].x, A[j].y); + core_printf(job, "%g %g ", A[0].x, A[0].y); + core_printf(job, "] %d true %s\n", n, name); + } + if (job->obj->pencolor.u.HSVA[3] > .5) { + ps_set_pen_style(job); + ps_set_color(job, &(job->obj->pencolor)); + core_fputs(job, "[ "); + for (j = 0; j < n; j++) + core_printf(job, "%g %g ", A[j].x, A[j].y); + core_printf(job, "%g %g ", A[0].x, A[0].y); + core_printf(job, "] %d false %s\n", n, name); + } +} + static gvrender_engine_t psgen_engine = { psgen_begin_job, psgen_end_job, @@ -467,6 +492,7 @@ static gvrender_engine_t psgen_engine = { psgen_bezier, psgen_polyline, psgen_comment, + psgen_library_shape, }; static gvrender_features_t psgen_features = { diff --git a/plugin/core/gvrender_core_svg.c b/plugin/core/gvrender_core_svg.c index 38f4129e6..41b0585bd 100644 --- a/plugin/core/gvrender_core_svg.c +++ b/plugin/core/gvrender_core_svg.c @@ -436,6 +436,7 @@ gvrender_engine_t svg_engine = { svg_bezier, svg_polyline, svg_comment, + 0, /* svg_library_shape */ }; gvrender_features_t svg_features = { diff --git a/plugin/gd/gvrender_gd.c b/plugin/gd/gvrender_gd.c index 6346d65ed..dcc1477bf 100644 --- a/plugin/gd/gvrender_gd.c +++ b/plugin/gd/gvrender_gd.c @@ -564,6 +564,7 @@ static gvrender_engine_t gdgen_engine = { gdgen_bezier, gdgen_polyline, 0, /* gdgen_comment */ + 0, /* gdgen_library_shape */ }; static gvrender_features_t gdgen_features_tc = { diff --git a/plugin/gd/gvrender_gd_vrml.c b/plugin/gd/gvrender_gd_vrml.c index a879af53a..e9a401fb1 100644 --- a/plugin/gd/gvrender_gd_vrml.c +++ b/plugin/gd/gvrender_gd_vrml.c @@ -828,6 +828,7 @@ static gvrender_engine_t vrml_engine = { vrml_bezier, vrml_polyline, 0, /* vrml_comment */ + 0, /* vrml_library_shape */ }; static gvrender_features_t vrml_features = { diff --git a/plugin/ming/gvrender_ming.c b/plugin/ming/gvrender_ming.c index 94ed1d4dc..72a3c35c4 100644 --- a/plugin/ming/gvrender_ming.c +++ b/plugin/ming/gvrender_ming.c @@ -245,6 +245,7 @@ static gvrender_engine_t ming_engine = { ming_bezier, ming_polyline, 0, /* ming_comment */ + 0, /* ming_library_shape */ }; static gvrender_features_t ming_features = { diff --git a/plugin/pango/gvrender_pango.c b/plugin/pango/gvrender_pango.c index e04227dc3..c617fb231 100644 --- a/plugin/pango/gvrender_pango.c +++ b/plugin/pango/gvrender_pango.c @@ -415,6 +415,7 @@ static gvrender_engine_t cairogen_engine = { cairogen_bezier, cairogen_polyline, 0, /* cairogen_comment */ + 0, /* cairogen_library_shape */ }; static gvrender_features_t cairogen_features = {