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; }
static void emit_htextparas(GVJ_t* job, int nparas, htextpara_t* paras, pointf p, double halfwidth_x, htmlfont_t finfo, boxf b) { int i,j; double center_x, left_x, right_x, fsize_; char *fname_ , *fcolor_; textpara_t tl; pointf p_ = {0.0, 0.0}; textpara_t* ti; center_x = p.x; left_x = center_x - halfwidth_x; right_x = center_x + halfwidth_x; /* Initial p is in center of text block; set initial baseline * to top of text block. */ p_.y = p.y + (b.UR.y-b.LL.y)/2.0; gvrender_begin_label(job, LABEL_HTML); for(i=0; i<nparas; i++) { /* set p.x to leftmost point where the line of text begins */ switch (paras[i].just) { case 'l': p.x = left_x; break; case 'r': p.x = right_x - paras[i].size; break; default: case 'n': p.x = center_x - paras[i].size/2.0; break; } p_.y -= paras[i].lfsize; /* move to current base line */ ti = paras[i].items; for(j=0; j<paras[i].nitems; j++) { if (ti->font && (ti->font->size > 0)) fsize_ = ti->font->size; else fsize_ = finfo.size; if (ti->font && ti->font->name) fname_ = ti->font->name; else fname_ = finfo.name; if (ti->font && ti->font->color) fcolor_ = ti->font->color; else fcolor_ = finfo.color; gvrender_set_pencolor(job, fcolor_); tl.str = ti->str; tl.fontname = fname_; tl.fontsize = fsize_; tl.font = ti->font; tl.yoffset_layout = ti->yoffset_layout; /* tl.yoffset_centerline = ti->yoffset_centerline; */ tl.yoffset_centerline = 1; tl.postscript_alias = ti->postscript_alias; tl.layout = ti->layout; tl.width = ti->size; tl.height = paras[i].lfsize; tl.just = 'l'; p_.x = p.x; gvrender_textpara(job, p_, &tl); p.x += ti->size; ti++; } } gvrender_end_label(job); }