From: Keith Packard Date: Sat, 2 Dec 2006 21:22:27 +0000 (-0800) Subject: Add FcFreeTypeQueryFace external API. Bug #7311. X-Git-Tag: 2.4.2~7 X-Git-Url: https://git.wh0rd.org/?a=commitdiff_plain;h=72ffe6536a6825a32095c8185aff836a12326ac5;p=fontconfig.git Add FcFreeTypeQueryFace external API. Bug #7311. Expose ability to build an FcPattern directly from an FT_Face object. --- diff --git a/configure.in b/configure.in index 98604c3..2029510 100644 --- a/configure.in +++ b/configure.in @@ -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) diff --git a/doc/fcfreetype.fncs b/doc/fcfreetype.fncs index b226561..dadecca 100644 --- a/doc/fcfreetype.fncs +++ b/doc/fcfreetype.fncs @@ -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 <fontconfig.h> +#include <fcfreetype.h> +@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). +@@ diff --git a/fontconfig/fcfreetype.h b/fontconfig/fcfreetype.h index 0c2a81c..e9be351 100644 --- a/fontconfig/fcfreetype.h +++ b/fontconfig/fcfreetype.h @@ -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 diff --git a/src/fcfreetype.c b/src/fcfreetype.c index 8ca14d7..e2bcb15 100644 --- a/src/fcfreetype.c +++ b/src/fcfreetype.c @@ -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 */