op->bb = ptsBB (op->op.u.polygon.pts, op->op.u.polygon.cnt, &bb);
break;
case xd_text :
-#if 1
op->span = NEW(textspan_t);
op->span->str = strdup (op->op.u.text.text);
op->span->just = adjust [op->op.u.text.align];
tf.size = fontsize;
op->span->font = dtinsert(gvc->textfont_dt, &tf);
sz = textspan_size (gvc, op->span);
-#else
-// thinking about it ....
- op->span = new_textspan(gvc, op->op.u.text.text, adjust [op->op.u.text.align], NULL, fontname, fontsize, 0);
-#endif
bb0 = textBB (op->op.u.text.x, op->op.u.text.y, op->span);
op->bb = bb0;
expandBB (&bb, bb0.LL);
return rv;
}
+/* free_textspan:
+ * Free resources related to textspan_t.
+ * tl is an array of cnt textspan_t's.
+ * It is also assumed that the text stored in the str field
+ * is all stored in one large buffer shared by all of the textspan_t,
+ * so only the first one needs to free its tlp->str.
+ */
+void free_textspan(textspan_t * tl, int cnt)
+{
+ int i;
+ textspan_t* tlp = tl;
+
+ if (!tl) return;
+ for (i = 0; i < cnt; i++) {
+ if ((i == 0) && tlp->str)
+ free(tlp->str);
+ if (tlp->layout && tlp->free_layout)
+ tlp->free_layout (tlp->layout);
+ tlp++;
+ }
+ free(tl);
+}
+
void free_label(textlabel_t * p)
{
if (p) {
angle = -0.25 * M_PI;
else if (angle == M_PI * 0.5)
angle = 0;
-/* clang complains about self assignemnt:
else if (angle == M_PI * 0.25)
angle = angle;
- */
else if (angle == 0)
angle = M_PI * 0.5;
else if (angle == M_PI * -0.25)
angle = M_PI * 0.75;
else if (angle == M_PI * -0.5)
angle = M_PI;
-/* clang complains about self assignemnt:
else if (angle == M_PI * -0.75)
angle = angle;
- */
break;
}
return angle;
assert(span->font);
font = span->font;
- span->color = span->font->color;
-
assert(font->name);
/* only need to find alias once per font, since they are unique in dict */
return span->size;
}
-#if 0
-textspan_t * new_textspan(GVC_t *gvc, const char* str, const char *affinity, const char *color, const textfont_t *font)
-{
- textspan_t *ts;
-
- ts = calloc(1, sizeof(textspan_t));
- assert(ts);
-
- ts->str = strdup(str);
- assert(ts->str);
-
-// ts->affinity = strdup(affinity);
-// assert(ts->affinity);
-
-// ts->color = strdup(color);
-// assert(ts->color)
-
- ts->font = dtinsert(gvc->textfont_dt, font);
- assert(ts->font);
-
- textspan_size(gvc, ts);
-
- return ts;
-}
-#endif
-
-/* free_textspan:
- * Free resources related to textspan_t.
- * ts is an array of cnt textspan_t's.
- * It is also assumed that the text stored in the str field
- * is all stored in one large buffer shared by all of the textspan_t,
- * so only the first one needs to free its tsp->str.
- */
-void free_textspan(textspan_t * ts, int cnt)
-{
- int i;
- textspan_t* tsp = ts;
-
- if (!ts) return;
- for (i = 0; i < cnt; i++) {
- if ((i == 0) && tsp->str)
- free(tsp->str);
- if (tsp->layout && tsp->free_layout)
- tsp->free_layout (tsp->layout);
- tsp++;
- }
- free(ts);
-}
-
static Void_t* textfont_makef(Dt_t* dt, Void_t* obj, Dtdisc_t* disc)
{
textfont_t *f1 = (textfont_t*)obj;
int rc;
textfont_t *f1 = (textfont_t*)key1, *f2 = (textfont_t*)key2;
- // C-locale sorted comparison of name, incl. dealing with null
if (f1->name || f2->name) {
if (! f1->name) return -1;
if (! f2->name) return 1;
rc = strcmp(f1->name, f2->name);
if (rc) return rc;
}
-#if 0
- // FIXME - color is not a useful differentiator of font from a layout pov - move to textspan
- // C-locale sorted comparison of name, incl. dealing with null
if (f1->color || f2->color) {
if (! f1->color) return -1;
if (! f2->color) return 1;
rc = strcmp(f1->color, f2->color);
if (rc) return rc;
}
-#endif
- // integer comparison of flags
rc = (f1->flags - f2->flags);
if (rc) return rc;
- // comparison of size doubles - FIXME does this need some tolerance?
if (f1->size < f2->size) return -1;
if (f1->size > f2->size) return 1;
return 0;
/* atomic unit of text emitted using a single htmlfont_t */
typedef struct {
char *str; /* stored in utf-8 */
- char *color;
textfont_t *font;
void *layout;
void (*free_layout) (void *layout); /* FIXME - this is ugly */
{
gvrender_engine_t *gvre = job->render.engine;
pointf PF;
- gvcolor_t *color = &(job->obj->pencolor);
if (span->str && span->str[0]
&& (!job->obj /* because of xdgen non-conformity */
else
PF = gvrender_ptf(job, p);
if (gvre) {
-#if 1
- if (span->font->color) {
- gvrender_resolve_color(job->render.features, span->font->color, color);
- if (gvre->resolve_color)
- gvre->resolve_color(job, color);
- }
-#endif
if (gvre->textspan)
gvre->textspan(job, PF, span);
}