]> granicus.if.org Git - graphviz/commitdiff
Add code so that, for a given font, fontconfig is always called with
authorerg <devnull@localhost>
Thu, 8 Nov 2007 19:42:15 +0000 (19:42 +0000)
committererg <devnull@localhost>
Thu, 8 Nov 2007 19:42:15 +0000 (19:42 +0000)
the same string.

lib/common/fontmetrics.c
plugin/gd/gvrender_gd.c
plugin/gd/gvtextlayout_gd.c
plugin/pango/gvtextlayout_pango.c

index 981b4eb936ff286f6215e7246ab477851cc33232..f126569f0d7f76abcaf4ad80ca4f74d7e6a859c6 100644 (file)
@@ -219,3 +219,46 @@ pointf textsize(graph_t *g, textpara_t * para, char *fontname, double fontsize)
     size.y = para->height;
     return size;
 }
+
+/* psfontResolve:
+ * Construct alias for postscript fontname.
+ * NB. Uses a static array - non-reentrant.
+ */ 
+
+#define ADD_ATTR(a) \
+  if (a) { \
+       strcat(buf, comma ? " " : ", "); \
+       comma = 1; \
+       strcat(buf, a); \
+  }
+
+char* psfontResolve (PostscriptAlias* pa)
+{
+    static char buf[1024];
+    int comma=0;
+    strcpy(buf, pa->family);
+
+    ADD_ATTR(pa->weight);
+    ADD_ATTR(pa->stretch);
+    ADD_ATTR(pa->style);
+/*
+    if (pa->weight) {
+       strcat(buf, comma ? " " : ", ");
+       comma = 1;
+       strcat(buf, pa->weight);
+    }
+    if (pa->stretch) {
+       strcat(buf, comma ? " " : ", ");
+       comma = 1;
+       strcat(buf, pa->stretch);
+    }
+    if (pa->style) {
+                strcat(buf, comma ? " " : ", ");
+                comma = 1;
+                strcat(buf, pa->style);
+    }
+*/
+
+    return buf;
+}
+
index 7b7fc7bae20b5f59129b0677a3a2a0ba65e85718..d648c049ab9b694aeb4e7fb03b96debb8cde4d8f 100644 (file)
@@ -333,11 +333,14 @@ void gdgen_text(gdImagePtr im, pointf spf, pointf epf, int fontcolor, double fon
     }
 }
 
+extern char* psfontResolve (PostscriptAlias* pa);
+
 static void gdgen_textpara(GVJ_t * job, pointf p, textpara_t * para)
 {
     gdImagePtr im = (gdImagePtr) job->context;
     pointf spf, epf;
     double parawidth = para->width * job->scale.x;
+    char* fontname;
 
     if (!im)
        return;
@@ -367,12 +370,19 @@ static void gdgen_textpara(GVJ_t * job, pointf p, textpara_t * para)
        epf.y = spf.y = p.y - para->yoffset_centerline * job->scale.y;
     }
 
+#ifdef HAVE_GD_FONTCONFIG
+    if (para->postscript_alias)
+       fontname = psfontResolve (para->postscript_alias);
+    else
+#endif
+       fontname = para->fontname;
+
     gdgen_text(im, spf, epf,
             job->obj->pencolor.u.index,
             para->fontsize,
             ROUND(POINTS_PER_INCH * job->scale.x),
             job->rotation ? (PI / 2) : 0,
-            para->fontname,
+            fontname,
             para->str);
 }
 
index f00560633f44d7857c6c4eb545dbb2a81b5660bd..09abb4d9b57c1c7e5747ca382c226c425e38041f 100644 (file)
@@ -100,6 +100,8 @@ char *gd_alternate_fontlist(char *font)
 }
 #endif                         /* HAVE_GD_FONTCONFIG */
 
+extern char* psfontResolve (PostscriptAlias* pa);
+
 static boolean gd_textlayout(textpara_t * para, char **fontpath)
 {
     char *err;
@@ -139,7 +141,10 @@ static boolean gd_textlayout(textpara_t * para, char **fontpath)
        }
        /* call gdImageStringFT with null *im to get brect and to set font cache */
 #ifdef HAVE_GD_FONTCONFIG
-       fontlist = para->fontname;
+       if (para->postscript_alias)
+           fontlist = psfontResolve (para->postscript_alias);
+       else
+           fontlist = para->fontname;
 #else
        fontlist = gd_alternate_fontlist(para->fontname);
 #endif
index a3047917b63fdab3447360115a0e34269120d81b..b89da5771eb1a1c1e108a1659015b463ac093b4f 100644 (file)
@@ -35,6 +35,8 @@ static void pango_free_layout (void *layout)
 
 #define FONT_DPI 96.
 
+extern char* psfontResolve (PostscriptAlias* pa);
+
 static boolean pango_textlayout(textpara_t * para, char **fontpath)
 {
     static char buf[1024];  /* returned in fontpath, only good until next call */
@@ -69,24 +71,7 @@ static boolean pango_textlayout(textpara_t * para, char **fontpath)
        pango_font_description_free (desc);
 
        if (para->postscript_alias) {
-           int comma=0;
-           strcpy(buf, para->postscript_alias->family);
-           if (para->postscript_alias->weight) {
-               strcat(buf, comma ? " " : ", ");
-               comma = 1;
-               strcat(buf, para->postscript_alias->weight);
-           }
-           if (para->postscript_alias->stretch) {
-               strcat(buf, comma ? " " : ", ");
-               comma = 1;
-               strcat(buf, para->postscript_alias->stretch);
-           }
-           if (para->postscript_alias->style) {
-               strcat(buf, comma ? " " : ", ");
-               comma = 1;
-               strcat(buf, para->postscript_alias->style);
-           }
-           fnt = buf;
+           fnt = psfontResolve (para->postscript_alias);
        }
        else
            fnt = fontname;