static void tkgen_polygon(GVJ_t * job, pointf * A, int n, int filled) { obj_state_t *obj = job->obj; if (obj->pen != PEN_NONE) { tkgen_canvas(job); gvputs(job, " create polygon "); gvprintpointflist(job, A, n); gvputs(job, " -fill "); if (filled) tkgen_print_color(job, obj->fillcolor); else if (first_periphery) /* tk polygons default to black fill, some fill * is necessary else "canvas find overlapping" doesn't * work as expected, use white instead */ gvputs(job, "white"); else gvputs(job, "\"\""); if (first_periphery == 1) first_periphery = 0; gvputs(job, " -width "); gvprintdouble(job, obj->penwidth); gvputs(job, " -outline "); tkgen_print_color(job, obj->pencolor); if (obj->pen == PEN_DASHED) gvputs(job, " -dash 5"); if (obj->pen == PEN_DOTTED) gvputs(job, " -dash 2"); tkgen_print_tags(job); gvputs(job, "\n"); } }
static void tkgen_ellipse(GVJ_t * job, pointf * A, int filled) { obj_state_t *obj = job->obj; pointf r; if (obj->pen != PEN_NONE) { /* A[] contains 2 points: the center and top right corner. */ r.x = A[1].x - A[0].x; r.y = A[1].y - A[0].y; A[0].x -= r.x; A[0].y -= r.y; gvdevice_fputs(job, "$c create oval "); gvdevice_printpointflist(job, A, 2); gvdevice_fputs(job, " -fill "); if (filled) tkgen_print_color(job, obj->fillcolor); else /* tk ovals default to no fill, some fill is necessary else "canvas find overlapping" doesn't work as expected, use white instead */ gvdevice_fputs(job, "white"); gvdevice_fputs(job, " -width "); gvdevice_printnum(job, obj->penwidth); gvdevice_fputs(job, " -outline "); tkgen_print_color(job, obj->pencolor); if (obj->pen == PEN_DASHED) gvdevice_fputs(job, " -dash 5"); if (obj->pen == PEN_DOTTED) gvdevice_fputs(job, " -dash 2"); tkgen_print_tags(job); gvdevice_fputs(job, "\n"); } }
static void tkgen_textpara(GVJ_t * job, pointf p, textpara_t * para) { obj_state_t *obj = job->obj; if (obj->pen != PEN_NONE) { gvdevice_fputs(job, "$c create text "); p.y -= para->fontsize * 0.5; /* cl correction */ gvdevice_printpointf(job, p); gvdevice_fputs(job, " -text {"); gvdevice_fputs(job, para->str); gvdevice_fputs(job, "}"); gvdevice_fputs(job, " -fill "); tkgen_print_color(job, obj->pencolor); gvdevice_fputs(job, " -font {"); gvdevice_fputs(job, para->fontname); gvdevice_printf(job, " %g}", para->fontsize); switch (para->just) { case 'l': gvdevice_fputs(job, " -anchor w"); break; case 'r': gvdevice_fputs(job, " -anchor e"); break; default: case 'n': break; } gvdevice_fputs(job, " -state disabled"); tkgen_print_tags(job); gvdevice_fputs(job, "\n"); } }
static void tkgen_textspan(GVJ_t * job, pointf p, textspan_t * span) { obj_state_t *obj = job->obj; const char *font; PostscriptAlias *pA; int size; if (obj->pen != PEN_NONE) { /* determine font size */ /* round fontsize down, better too small than too big */ size = (int)(span->font->size * job->zoom); /* don't even bother if fontsize < 1 point */ if (size) { tkgen_canvas(job); gvputs(job, " create text "); p.y -= size * 0.55; /* cl correction */ gvprintpointf(job, p); gvputs(job, " -text {"); gvputs(job, span->str); gvputs(job, "}"); gvputs(job, " -fill "); tkgen_print_color(job, obj->pencolor); gvputs(job, " -font {"); /* tk doesn't like PostScript font names like "Times-Roman" */ /* so use family names */ pA = span->font->postscript_alias; if (pA) font = pA->family; else font = span->font->name; gvputs(job, "\""); gvputs(job, font); gvputs(job, "\""); /* use -ve fontsize to indicate pixels - see "man n font" */ gvprintf(job, " %d}", size); switch (span->just) { case 'l': gvputs(job, " -anchor w"); break; case 'r': gvputs(job, " -anchor e"); break; default: case 'n': break; } tkgen_print_tags(job); gvputs(job, "\n"); } } }
static void tkgen_polygon(GVJ_t * job, pointf * A, int n, int filled) { obj_state_t *obj = job->obj; if (obj->pen != PEN_NONE) { gvdevice_fputs(job, "$c create polygon "); gvdevice_printpointflist(job, A, n); if (filled) { gvdevice_fputs(job, " -fill "); tkgen_print_color(job, obj->fillcolor); } gvdevice_fputs(job, " -width "); gvdevice_printnum(job, obj->penwidth); gvdevice_fputs(job, " -outline "); tkgen_print_color(job, obj->pencolor); if (obj->pen == PEN_DASHED) gvdevice_fputs(job, " -dash 5"); if (obj->pen == PEN_DOTTED) gvdevice_fputs(job, " -dash 2"); gvdevice_fputs(job, " -state disabled"); tkgen_print_tags(job); gvdevice_fputs(job, "\n"); } }
static void tkgen_polyline(GVJ_t * job, pointf * A, int n) { obj_state_t *obj = job->obj; if (obj->pen != PEN_NONE) { tkgen_canvas(job); gvputs(job, " create line "); gvprintpointflist(job, A, n); gvputs(job, " -fill "); tkgen_print_color(job, obj->pencolor); if (obj->pen == PEN_DASHED) gvputs(job, " -dash 5"); if (obj->pen == PEN_DOTTED) gvputs(job, " -dash 2"); tkgen_print_tags(job); gvputs(job, "\n"); } }
static void tkgen_bezier(GVJ_t * job, pointf * A, int n, int arrow_at_start, int arrow_at_end, int filled) { obj_state_t *obj = job->obj; if (obj->pen != PEN_NONE) { tkgen_canvas(job); gvputs(job, " create line "); gvprintpointflist(job, A, n); gvputs(job, " -fill "); tkgen_print_color(job, obj->pencolor); gvputs(job, " -width "); gvprintdouble(job, obj->penwidth); if (obj->pen == PEN_DASHED) gvputs(job, " -dash 5"); if (obj->pen == PEN_DOTTED) gvputs(job, " -dash 2"); gvputs(job, " -smooth bezier "); tkgen_print_tags(job); gvputs(job, "\n"); } }