]> granicus.if.org Git - graphviz/commitdiff
add GIF image loader for -Ttk
authorJohn Ellson <john.ellson@comcast.net>
Sat, 3 Aug 2013 21:19:55 +0000 (17:19 -0400)
committerJohn Ellson <john.ellson@comcast.net>
Sat, 3 Aug 2013 21:19:55 +0000 (17:19 -0400)
lib/common/shapes.c
plugin/core/gvloadimage_core.c
plugin/core/gvrender_core_tk.c

index a31f9f3b8805944d99fa8aa5edc281c42ff7db57..76b2d9e3cca2fb3469b71b75c295061bfc54661c 100644 (file)
@@ -2809,6 +2809,41 @@ static void poly_gencode(GVJ_t * job, node_t * n)
        peripheries = 1;
        gvrender_set_pencolor(job, "transparent");
     }
+
+    /* draw peripheries first */
+    for (j = 0; j < peripheries; j++) {
+       for (i = 0; i < sides; i++) {
+           P = vertices[i + j * sides];
+           AF[i].x = P.x * xsize + ND_coord(n).x;
+           AF[i].y = P.y * ysize + ND_coord(n).y;
+       }
+       if (sides <= 2) {
+           if ((style & WEDGED) && (j == 0) && multicolor(fillcolor)) {
+               int rv = wedgedEllipse (job, AF, fillcolor);
+               if (rv > 1)
+                   agerr (AGPREV, "in node %s\n", agnameof(n));
+               filled = 0;
+           }
+           gvrender_ellipse(job, AF, sides, filled);
+           if (style & DIAGONALS) {
+               Mcircle_hack(job, n);
+           }
+       } else if (style & STRIPED) {
+           if (j == 0) {
+               int rv = stripedBox (job, AF, fillcolor, 1);
+               if (rv > 1)
+                   agerr (AGPREV, "in node %s\n", agnameof(n));
+           }
+           gvrender_polygon(job, AF, sides, 0);
+       } else if (SPECIAL_CORNERS(style)) {
+           round_corners(job, AF, sides, style, filled);
+       } else {
+             gvrender_polygon(job, AF, sides, filled);
+       }
+       /* fill innermost periphery only */
+       filled = FALSE;
+    }
+
     usershape_p = FALSE;
     if (ND_shape(n)->usershape) {
        name = ND_shape(n)->name;
@@ -2854,38 +2889,6 @@ static void poly_gencode(GVJ_t * job, node_t * n)
        filled = FALSE;         /* with user shapes, we have done the fill if needed */
     }
 
-    for (j = 0; j < peripheries; j++) {
-       for (i = 0; i < sides; i++) {
-           P = vertices[i + j * sides];
-           AF[i].x = P.x * xsize + ND_coord(n).x;
-           AF[i].y = P.y * ysize + ND_coord(n).y;
-       }
-       if (sides <= 2) {
-           if ((style & WEDGED) && (j == 0) && multicolor(fillcolor)) {
-               int rv = wedgedEllipse (job, AF, fillcolor);
-               if (rv > 1)
-                   agerr (AGPREV, "in node %s\n", agnameof(n));
-               filled = 0;
-           }
-           gvrender_ellipse(job, AF, sides, filled);
-           if (style & DIAGONALS) {
-               Mcircle_hack(job, n);
-           }
-       } else if (style & STRIPED) {
-           if (j == 0) {
-               int rv = stripedBox (job, AF, fillcolor, 1);
-               if (rv > 1)
-                   agerr (AGPREV, "in node %s\n", agnameof(n));
-           }
-           gvrender_polygon(job, AF, sides, 0);
-       } else if (SPECIAL_CORNERS(style)) {
-           round_corners(job, AF, sides, style, filled);
-       } else {
-             gvrender_polygon(job, AF, sides, filled);
-       }
-       /* fill innermost periphery only */
-       filled = FALSE;
-    }
     free (clrs[0]);
 
     emit_label(job, EMIT_NLABEL, ND_label(n));
index ebefe511087ce757453dbf9ccd4cf626dab8a30b..3d3a90e1b5e57891ae0ea45490816db0f320a3f7 100644 (file)
@@ -42,6 +42,7 @@ typedef enum {
     FORMAT_PNG_VRML, FORMAT_GIF_VRML, FORMAT_JPEG_VRML,
     FORMAT_PS_PS, FORMAT_PSLIB_PS, 
     FORMAT_PNG_VML, FORMAT_GIF_VML, FORMAT_JPEG_VML, 
+    FORMAT_GIF_TK,
 } format_type;
 
 static void core_loadimage_svg(GVJ_t * job, usershape_t *us, boxf b, boolean filled)
@@ -240,6 +241,16 @@ static void core_loadimage_vml(GVJ_t * job, usershape_t *us, boxf b, boolean fil
     gvputs(job, " />\n");
 }
 
+static void core_loadimage_tk(GVJ_t * job, usershape_t *us, boxf b, boolean filled)
+{
+    double graphHeight;
+    graphHeight = (job->bb.UR.y - job->bb.LL.y);
+    gvprintf (job, "image create photo \"photo_%s\" -file \"%s\"\n",
+       us->name, us->name);
+    gvprintf (job, "$c create image %.2f %.2f -image \"photo_%s\"\n",
+       us->name, (b.UR.x + b.LL.x) / 2, (b.UR.y + b.LL.y) / 2);
+}
+
 void core_loadimage_null(GVJ_t *gvc, usershape_t *us, boxf b, boolean filled)
 {
     /* null function - basically suppress the missing loader message */
@@ -277,6 +288,10 @@ static gvloadimage_engine_t engine_vml = {
     core_loadimage_vml
 };
 
+static gvloadimage_engine_t engine_tk = {
+    core_loadimage_tk
+};
+
 gvplugin_installed_t gvloadimage_core_types[] = {
     {FORMAT_PNG_SVG, "png:svg", 1, &engine_svg, NULL},
     {FORMAT_GIF_SVG, "gif:svg", 1, &engine_svg, NULL},
@@ -335,5 +350,7 @@ gvplugin_installed_t gvloadimage_core_types[] = {
     {FORMAT_JPEG_VML, "jpe:vml", 1, &engine_vml, NULL},
     {FORMAT_JPEG_VML, "jpg:vml", 1, &engine_vml, NULL},
 
+    {FORMAT_GIF_TK, "gif:tk", 1, &engine_tk, NULL},
+
     {0, NULL, 0, NULL, NULL}
 };
index 686c1949349c28ae0e583c663dc3846c4b4fcd6e..900961115a695e5819d5035580fffb2f40524340 100644 (file)
@@ -54,7 +54,7 @@ static void tkgen_print_color(GVJ_t * job, gvcolor_t color)
 
 static void tkgen_print_tags(GVJ_t *job)
 {
-    char *ObjType, *ObjPart;
+    char *ObjType;
     unsigned int ObjId;
     obj_state_t *obj = job->obj;
     int ObjFlag;
@@ -65,7 +65,6 @@ static void tkgen_print_tags(GVJ_t *job)
     switch (obj->emit_state) {
     case EMIT_NDRAW:
        ObjType = "node";
-       ObjPart = "shape";
        ObjFlag = 1;
         ObjId = AGSEQ(obj->u.n);
 #ifndef WITH_CGRAPH
@@ -74,7 +73,6 @@ static void tkgen_print_tags(GVJ_t *job)
        break;
     case EMIT_NLABEL:
        ObjType = "node";
-       ObjPart = "label";
        ObjFlag = 0;
         ObjId = AGSEQ(obj->u.n);
 #ifndef WITH_CGRAPH
@@ -85,7 +83,6 @@ static void tkgen_print_tags(GVJ_t *job)
     case EMIT_TDRAW:
     case EMIT_HDRAW:
        ObjType = "edge";
-       ObjPart = "shape";
        ObjFlag = 1;
         ObjId = AGSEQ(obj->u.e);
 #ifndef WITH_CGRAPH
@@ -96,7 +93,6 @@ static void tkgen_print_tags(GVJ_t *job)
     case EMIT_TLABEL:
     case EMIT_HLABEL:
        ObjType = "edge";
-       ObjPart = "label";
        ObjFlag = 0;
         ObjId = AGSEQ(obj->u.e);
 #ifndef WITH_CGRAPH
@@ -105,7 +101,6 @@ static void tkgen_print_tags(GVJ_t *job)
        break;
     case EMIT_GDRAW:
        ObjType = "graph";
-       ObjPart = "shape";
        ObjFlag = 1;
        ObjId = -1;  /* hack! */
 #ifndef WITH_CGRAPH
@@ -113,8 +108,6 @@ static void tkgen_print_tags(GVJ_t *job)
 #endif
        break;
     case EMIT_GLABEL:
-       ObjType = "graph";
-       ObjPart = "label";
        ObjFlag = 0;
        ObjType = "graph label";
        ObjId = -1;  /* hack! */
@@ -124,7 +117,6 @@ static void tkgen_print_tags(GVJ_t *job)
        break;
     case EMIT_CDRAW:
        ObjType = "graph";
-       ObjPart = "shape";
        ObjFlag = 1;
 #ifndef WITH_CGRAPH
        ObjId = obj->u.sg->meta_node->id;
@@ -135,7 +127,6 @@ static void tkgen_print_tags(GVJ_t *job)
        break;
     case EMIT_CLABEL:
        ObjType = "graph";
-       ObjPart = "label";
        ObjFlag = 0;
 #ifndef WITH_CGRAPH
        ObjId = obj->u.sg->meta_node->id;