diff --git a/ChangeLog b/ChangeLog index 99cc46320..fa9e335e8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -7,6 +7,10 @@ * src/pshinter/pshalgo2.c: changed 'print_zone' to 'psh2_print_zone' * src/pshinter/pshalgo1.c: changed 'print_zone' to 'psh1_print_zone' + * include/freetype/freetype.h, include/freetype/internal/ftobjs.h, + src/base/ftobjs.c, src/base/ftinit.c: adding the new FT_Library_Version + API to return the library's current version in dynamic links. + 2002-03-06 Werner Lemberg diff --git a/include/freetype/freetype.h b/include/freetype/freetype.h index 57e212b57..16e8e8712 100644 --- a/include/freetype/freetype.h +++ b/include/freetype/freetype.h @@ -106,6 +106,7 @@ FT_BEGIN_HEADER /* */ /* FT_Init_FreeType */ /* FT_Done_FreeType */ + /* FT_Library_Version */ /* */ /* FT_New_Face */ /* FT_Done_Face */ @@ -1338,6 +1339,40 @@ FT_BEGIN_HEADER FT_Init_FreeType( FT_Library *alibrary ); + /*************************************************************************/ + /* */ + /* */ + /* FT_Library_Version */ + /* */ + /* */ + /* Return the version of the FreeType library being used. This */ + /* is useful when dynamically linking to the library, since one */ + /* cannot use the macros FT_FREETYPE_MAJOR, FT_FREETYPE_MINOR and */ + /* FT_FREETYPE_PATCH. */ + /* */ + /* */ + /* library :: source library handle. */ + /* */ + /* */ + /* amajor :: major version number */ + /* aminor :: minor version number */ + /* apatch :: patch version number */ + /* */ + /* */ + /* the reason why this function takes a 'library' argument is */ + /* because certain programs implement library initialisation in */ + /* a custom way that doesn't use FT_Init_FreeType. */ + /* */ + /* in certain such cases, the library version cannot be known until */ + /* the library object has been created.. */ + /* */ + FT_EXPORT( void ) + FT_Library_Version( FT_Library library, + FT_Int *amajor, + FT_Int *aminor, + FT_Int *apatch ); + + /*************************************************************************/ /* */ /* */ diff --git a/include/freetype/internal/ftobjs.h b/include/freetype/internal/ftobjs.h index 9d9f0be94..a292ab87d 100644 --- a/include/freetype/internal/ftobjs.h +++ b/include/freetype/internal/ftobjs.h @@ -657,6 +657,10 @@ FT_BEGIN_HEADER FT_Generic generic; + FT_Int version_major; + FT_Int version_minor; + FT_Int version_patch; + FT_UInt num_modules; FT_Module modules[FT_MAX_MODULES]; /* module objects */ diff --git a/src/base/ftinit.c b/src/base/ftinit.c index e2f809d23..8cc0e3bc5 100644 --- a/src/base/ftinit.c +++ b/src/base/ftinit.c @@ -125,7 +125,13 @@ error = FT_New_Library( memory, alibrary ); if ( !error ) + { + (*alibrary)->version_major = FREETYPE_MAJOR; + (*alibrary)->version_minor = FREETYPE_MINOR; + (*alibrary)->version_patch = FREETYPE_PATCH; + FT_Add_Default_Modules( *alibrary ); + } return error; } diff --git a/src/base/ftobjs.c b/src/base/ftobjs.c index 2cb2faaf8..f4d7af31f 100644 --- a/src/base/ftobjs.c +++ b/src/base/ftobjs.c @@ -2300,6 +2300,37 @@ } + /* documentation is in freetype.h */ + + FT_EXPORT_DEF( void ) + FT_Library_Version( FT_Library library, + FT_Int *amajor, + FT_Int *aminor, + FT_Int *apatch ) + { + FT_Int major = 0; + FT_Int minor = 0; + FT_Int patch = 0; + + + if ( library ) + { + major = library->version_major; + minor = library->version_minor; + patch = library->version_patch; + } + + if ( *amajor ) + *amajor = major; + + if ( *aminor ) + *aminor = minor; + + if ( *apatch ) + *apatch = patch; + } + + /* documentation is in ftmodule.h */ FT_EXPORT_DEF( FT_Error )