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");
    }
}
Exemple #2
0
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");
    }
}
Exemple #3
0
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");
        }
    }
}
Exemple #5
0
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");
    }
}