void emit_label(GVJ_t * job, emit_state_t emit_state, textlabel_t * lp) { obj_state_t *obj = job->obj; int i; pointf p; emit_state_t old_emit_state; old_emit_state = obj->emit_state; obj->emit_state = emit_state; if (lp->html) { emit_html_label(job, lp->u.html, lp); obj->emit_state = old_emit_state; return; } /* make sure that there is something to do */ if (lp->u.txt.nspans < 1) return; gvrender_begin_label(job, LABEL_PLAIN); gvrender_set_pencolor(job, lp->fontcolor); /* position for first span */ switch (lp->valign) { case 't': p.y = lp->pos.y + lp->space.y / 2.0 - lp->fontsize; break; case 'b': p.y = lp->pos.y - lp->space.y / 2.0 + lp->dimen.y - lp->fontsize; break; case 'c': default: p.y = lp->pos.y + lp->dimen.y / 2.0 - lp->fontsize; break; } if (obj->labeledgealigned) p.y -= lp->pos.y; for (i = 0; i < lp->u.txt.nspans; i++) { switch (lp->u.txt.span[i].just) { case 'l': p.x = lp->pos.x - lp->space.x / 2.0; break; case 'r': p.x = lp->pos.x + lp->space.x / 2.0; break; default: case 'n': p.x = lp->pos.x; break; } gvrender_textspan(job, p, &(lp->u.txt.span[i])); /* UL position for next span */ p.y -= lp->u.txt.span[i].size.y; } gvrender_end_label(job); obj->emit_state = old_emit_state; }
void emit_label(GVJ_t * job, int state, textlabel_t * lp, void *obj) { double halfwidth_x; pointf p; int oldstate; oldstate = job->gvc->emit_state; job->gvc->emit_state = state; #ifdef ENABLE_HTML //maks if (lp->html) { emit_html_label(job, lp->u.html, lp, obj); return; } #endif /* make sure that there is something to do */ if (lp->u.txt.nlines < 1) return; p.x = lp->p.x; p.y = lp->p.y; /* dimensions of box for label, no padding, adjusted for resizing */ halfwidth_x = (lp->dimen.x + lp->d.x) / 2.0; emit_textlines(job, lp->u.txt.nlines, lp->u.txt.line, p, halfwidth_x, lp->fontname, lp->fontsize, lp->fontcolor); job->gvc->emit_state = oldstate; }