]> git.wh0rd.org Git - fontconfig.git/commitdiff
Add FcFreeTypeQueryFace external API. Bug #7311.
authorKeith Packard <keithp@neko.keithp.com>
Sat, 2 Dec 2006 21:22:27 +0000 (13:22 -0800)
committerKeith Packard <keithp@neko.keithp.com>
Sat, 2 Dec 2006 21:22:27 +0000 (13:22 -0800)
Expose ability to build an FcPattern directly from an FT_Face
object.

configure.in
doc/fcfreetype.fncs
fontconfig/fcfreetype.h
src/fcfreetype.c

index 98604c3ad1bb8540ad6dc1e184bed233bc47b108..2029510bb97ee9630daa2dffa402428c2fc3d694 100644 (file)
@@ -41,11 +41,11 @@ dnl libtool versioning
 dnl bump revision when fixing bugs
 dnl bump current and age, reset revision to zero when adding APIs
 dnl bump current, leave age, reset revision to zero when changing/removing APIS
-LT_CURRENT=2
+LT_CURRENT=3
 LT_REVISION=0
 AC_SUBST(LT_CURRENT)
 AC_SUBST(LT_REVISION)
-LT_AGE=1
+LT_AGE=2
 
 LT_VERSION_INFO="$LT_CURRENT:$LT_REVISION:$LT_AGE"
 AC_SUBST(LT_VERSION_INFO)
index b226561acd866dcb4c28ce9704745f26d2144cf9..dadecca950f903ba24fe9b698f56c9b9be44805e 100644 (file)
@@ -62,8 +62,23 @@ not in 'blanks' are not placed in the returned FcCharSet.
 @TYPE2@         int                            @ARG2@          id      
 @TYPE3@         FcBlanks *                     @ARG3@          blanks      
 @TYPE4@         int *                          @ARG4@          count      
-@PURPOSE@      compute font file pattern
+@PURPOSE@      compute pattern from font file (and index)
 @DESC@
 Constructs a pattern representing the 'id'th font in 'file'.  The number
 of fonts in 'file' is returned in 'count'.
 @@
+
+@SYNOPSIS@
+#include &lt;fontconfig.h&gt;
+#include &lt;fcfreetype.h&gt;
+@RET@           FcPattern *      
+@FUNC@          FcFreeTypeQueryFace
+@TYPE1@                const FT_Face                   @ARG1@          face
+@TYPE2@         const char *                   @ARG2@          file
+@TYPE3@         int                            @ARG3@          id
+@TYPE4@         FcBlanks *                     @ARG4@          blanks
+@PURPOSE@      compute pattern from FT_Face
+@DESC@
+Constructs a pattern representing 'face'. 'file' and 'id' are used solely as
+data for pattern elements (FC_FILE, FC_INDEX and sometimes FC_FAMILY).
+@@
index 0c2a81c45532cb67a827a0fdf4d5439a84cfb7b9..e9be35175061d2ba9b4e5e95f4bc47e888adb04d 100644 (file)
@@ -48,6 +48,12 @@ FcPatternGetFTFace (const FcPattern *p, const char *object, int n, FT_Face *f);
 FcPublic FcBool
 FcPatternAddFTFace (FcPattern *p, const char *object, const FT_Face f);
 
+FcPublic FcPattern *
+FcFreeTypeQueryFace (const FT_Face  face,
+                    const FcChar8  *file,
+                    int            id,
+                    FcBlanks       *blanks);
+
 _FCFUNCPROTOEND
 
 #endif
index 8ca14d79bed7af75a1eb6651869819938230d35f..e2bcb156a27265f40e4cc069fce58bb61bab5ba5 100644 (file)
@@ -1063,12 +1063,11 @@ static const FT_UShort nameid_order[] = {
 
 #define NUM_NAMEID_ORDER  (sizeof (nameid_order) / sizeof (nameid_order[0]))
 FcPattern *
-FcFreeTypeQuery (const FcChar8 *file,
-                int            id,
-                FcBlanks       *blanks,
-                int            *count)
+FcFreeTypeQueryFace (const FT_Face  face,
+                    const FcChar8  *file,
+                    int            id,
+                    FcBlanks       *blanks)
 {
-    FT_Face        face;
     FcPattern      *pat;
     int                    slant = -1;
     int                    weight = -1;
@@ -1077,7 +1076,6 @@ FcFreeTypeQuery (const FcChar8    *file,
     int                    i;
     FcCharSet      *cs;
     FcLangSet      *ls;
-    FT_Library     ftLibrary;
 #if 0
     FcChar8        *family = 0;
 #endif
@@ -1108,14 +1106,6 @@ FcFreeTypeQuery (const FcChar8   *file,
     FcChar8        *style = 0;
     int                    st;
     
-    if (FT_Init_FreeType (&ftLibrary))
-       return 0;
-    
-    if (FT_New_Face (ftLibrary, (char *) file, id, &face))
-       goto bail;
-
-    *count = face->num_faces;
-
     pat = FcPatternCreate ();
     if (!pat)
        goto bail0;
@@ -1785,12 +1775,6 @@ FcFreeTypeQuery (const FcChar8   *file,
      */
     FcCharSetDestroy (cs);
     
-    /*
-     * Deallocate family/style values
-     */
-    
-    FT_Done_Face (face);
-    FT_Done_FreeType (ftLibrary);
     return pat;
 
 bail2:
@@ -1798,13 +1782,35 @@ bail2:
 bail1:
     FcPatternDestroy (pat);
 bail0:
+    return NULL;
+}
+
+FcPattern *
+FcFreeTypeQuery(const FcChar8  *file,
+               int             id,
+               FcBlanks        *blanks,
+               int             *count)
+{
+    FT_Face        face;
+    FT_Library     ftLibrary;
+    FcPattern      *pat = NULL;
+    
+    if (FT_Init_FreeType (&ftLibrary))
+       return NULL;
+    
+    if (FT_New_Face (ftLibrary, (char *) file, id, &face))
+       goto bail;
+
+    *count = face->num_faces;
+
+    pat = FcFreeTypeQueryFace (face, file, id, blanks);
+
     FT_Done_Face (face);
 bail:
     FT_Done_FreeType (ftLibrary);
-    return 0;
+    return pat;
 }
 
-
 /*
  * For our purposes, this approximation is sufficient
  */