Load any TrueType fonts that fontconfig knows about.
This commit is contained in:
parent
fc58ef8119
commit
6e12807b55
|
@ -13086,6 +13086,71 @@ cat >>confdefs.h <<_ACEOF
|
||||||
_ACEOF
|
_ACEOF
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
echo "$as_me:$LINENO: checking for -lfontconfig soname" >&5
|
||||||
|
echo $ECHO_N "checking for -lfontconfig soname... $ECHO_C" >&6
|
||||||
|
if test "${ac_cv_lib_soname_fontconfig+set}" = set; then
|
||||||
|
echo $ECHO_N "(cached) $ECHO_C" >&6
|
||||||
|
else
|
||||||
|
ac_get_soname_save_LIBS=$LIBS
|
||||||
|
LIBS="-lfontconfig $LIBS"
|
||||||
|
cat >conftest.$ac_ext <<_ACEOF
|
||||||
|
#line $LINENO "configure"
|
||||||
|
/* confdefs.h. */
|
||||||
|
_ACEOF
|
||||||
|
cat confdefs.h >>conftest.$ac_ext
|
||||||
|
cat >>conftest.$ac_ext <<_ACEOF
|
||||||
|
/* end confdefs.h. */
|
||||||
|
|
||||||
|
/* Override any gcc2 internal prototype to avoid an error. */
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C"
|
||||||
|
#endif
|
||||||
|
/* We use char because int might match the return type of a gcc2
|
||||||
|
builtin and then its argument prototype would still apply. */
|
||||||
|
char FcInit ();
|
||||||
|
int
|
||||||
|
main ()
|
||||||
|
{
|
||||||
|
FcInit ();
|
||||||
|
;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
_ACEOF
|
||||||
|
rm -f conftest.$ac_objext conftest$ac_exeext
|
||||||
|
if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
|
||||||
|
(eval $ac_link) 2>&5
|
||||||
|
ac_status=$?
|
||||||
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
|
(exit $ac_status); } &&
|
||||||
|
{ ac_try='test -s conftest$ac_exeext'
|
||||||
|
{ (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
|
||||||
|
(eval $ac_try) 2>&5
|
||||||
|
ac_status=$?
|
||||||
|
echo "$as_me:$LINENO: \$? = $ac_status" >&5
|
||||||
|
(exit $ac_status); }; }; then
|
||||||
|
ac_cv_lib_soname_fontconfig=`$ac_cv_path_LDD conftest$ac_exeext | grep libfontconfig\\.so | sed 's/^.*\(libfontconfig\.so[^ ]*\).*$/\1/'`
|
||||||
|
if test "x$ac_cv_lib_soname_fontconfig" = "x"
|
||||||
|
then
|
||||||
|
ac_cv_lib_soname_fontconfig="libfontconfig.so"
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "$as_me: failed program was:" >&5
|
||||||
|
sed 's/^/| /' conftest.$ac_ext >&5
|
||||||
|
|
||||||
|
ac_cv_lib_soname_fontconfig="libfontconfig.so"
|
||||||
|
fi
|
||||||
|
rm -f conftest.$ac_objext conftest$ac_exeext conftest.$ac_ext
|
||||||
|
LIBS=$ac_get_soname_save_LIBS
|
||||||
|
fi
|
||||||
|
echo "$as_me:$LINENO: result: $ac_cv_lib_soname_fontconfig" >&5
|
||||||
|
echo "${ECHO_T}$ac_cv_lib_soname_fontconfig" >&6
|
||||||
|
if test "x$ac_cv_lib_soname_fontconfig" != xNONE
|
||||||
|
then
|
||||||
|
cat >>confdefs.h <<_ACEOF
|
||||||
|
#define SONAME_LIBFONTCONFIG "$ac_cv_lib_soname_fontconfig"
|
||||||
|
_ACEOF
|
||||||
|
fi;
|
||||||
|
|
||||||
echo "$as_me:$LINENO: checking for -lssl soname" >&5
|
echo "$as_me:$LINENO: checking for -lssl soname" >&5
|
||||||
echo $ECHO_N "checking for -lssl soname... $ECHO_C" >&6
|
echo $ECHO_N "checking for -lssl soname... $ECHO_C" >&6
|
||||||
if test "${ac_cv_lib_soname_ssl+set}" = set; then
|
if test "${ac_cv_lib_soname_ssl+set}" = set; then
|
||||||
|
@ -13937,6 +14002,7 @@ done
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
for ac_header in \
|
for ac_header in \
|
||||||
|
@ -13946,6 +14012,7 @@ for ac_header in \
|
||||||
direct.h \
|
direct.h \
|
||||||
elf.h \
|
elf.h \
|
||||||
float.h \
|
float.h \
|
||||||
|
fontconfig/fontconfig.h \
|
||||||
getopt.h \
|
getopt.h \
|
||||||
ieeefp.h \
|
ieeefp.h \
|
||||||
io.h \
|
io.h \
|
||||||
|
|
|
@ -935,6 +935,7 @@ then
|
||||||
WINE_GET_SONAME(GL,glXQueryExtension,[$X_LIBS $X_EXTRA_LIBS])
|
WINE_GET_SONAME(GL,glXQueryExtension,[$X_LIBS $X_EXTRA_LIBS])
|
||||||
WINE_GET_SONAME(cups,cupsGetDefault)
|
WINE_GET_SONAME(cups,cupsGetDefault)
|
||||||
WINE_GET_SONAME(jack,jack_client_new)
|
WINE_GET_SONAME(jack,jack_client_new)
|
||||||
|
WINE_GET_SONAME(fontconfig, FcInit);
|
||||||
WINE_GET_SONAME(ssl,SSL_library_init)
|
WINE_GET_SONAME(ssl,SSL_library_init)
|
||||||
WINE_GET_SONAME(crypto,BIO_new_socket)
|
WINE_GET_SONAME(crypto,BIO_new_socket)
|
||||||
WINE_GET_SONAME(ncurses,waddch)
|
WINE_GET_SONAME(ncurses,waddch)
|
||||||
|
@ -1008,6 +1009,7 @@ AC_CHECK_HEADERS(\
|
||||||
direct.h \
|
direct.h \
|
||||||
elf.h \
|
elf.h \
|
||||||
float.h \
|
float.h \
|
||||||
|
fontconfig/fontconfig.h \
|
||||||
getopt.h \
|
getopt.h \
|
||||||
ieeefp.h \
|
ieeefp.h \
|
||||||
io.h \
|
io.h \
|
||||||
|
|
|
@ -105,10 +105,29 @@ MAKE_FUNCPTR(FT_Outline_Translate);
|
||||||
MAKE_FUNCPTR(FT_Select_Charmap);
|
MAKE_FUNCPTR(FT_Select_Charmap);
|
||||||
MAKE_FUNCPTR(FT_Set_Pixel_Sizes);
|
MAKE_FUNCPTR(FT_Set_Pixel_Sizes);
|
||||||
MAKE_FUNCPTR(FT_Vector_Transform);
|
MAKE_FUNCPTR(FT_Vector_Transform);
|
||||||
#undef MAKE_FUNCPTR
|
|
||||||
static void (*pFT_Library_Version)(FT_Library,FT_Int*,FT_Int*,FT_Int*);
|
static void (*pFT_Library_Version)(FT_Library,FT_Int*,FT_Int*,FT_Int*);
|
||||||
static FT_Error (*pFT_Load_Sfnt_Table)(FT_Face,FT_ULong,FT_Long,FT_Byte*,FT_ULong*);
|
static FT_Error (*pFT_Load_Sfnt_Table)(FT_Face,FT_ULong,FT_Long,FT_Byte*,FT_ULong*);
|
||||||
|
|
||||||
|
#ifdef HAVE_FONTCONFIG_FONTCONFIG_H
|
||||||
|
#include <fontconfig/fontconfig.h>
|
||||||
|
MAKE_FUNCPTR(FcConfigGetCurrent);
|
||||||
|
MAKE_FUNCPTR(FcFontList);
|
||||||
|
MAKE_FUNCPTR(FcFontSetDestroy);
|
||||||
|
MAKE_FUNCPTR(FcInit);
|
||||||
|
MAKE_FUNCPTR(FcObjectSetAdd);
|
||||||
|
MAKE_FUNCPTR(FcObjectSetCreate);
|
||||||
|
MAKE_FUNCPTR(FcObjectSetDestroy);
|
||||||
|
MAKE_FUNCPTR(FcPatternCreate);
|
||||||
|
MAKE_FUNCPTR(FcPatternDestroy);
|
||||||
|
MAKE_FUNCPTR(FcPatternGet);
|
||||||
|
#ifndef SONAME_LIBFONTCONFIG
|
||||||
|
#define SONAME_LIBFONTCONFIG "libfontconfig.so"
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#undef MAKE_FUNCPTR
|
||||||
|
|
||||||
|
|
||||||
#define GET_BE_WORD(ptr) MAKEWORD( ((BYTE *)(ptr))[1], ((BYTE *)(ptr))[0] )
|
#define GET_BE_WORD(ptr) MAKEWORD( ((BYTE *)(ptr))[1], ((BYTE *)(ptr))[0] )
|
||||||
|
|
||||||
typedef struct tagFace {
|
typedef struct tagFace {
|
||||||
|
@ -248,7 +267,7 @@ static inline FT_Fixed FT_FixedFromFIXED(FIXED f)
|
||||||
return (FT_Fixed)((long)f.value << 16 | (unsigned long)f.fract);
|
return (FT_Fixed)((long)f.value << 16 | (unsigned long)f.fract);
|
||||||
}
|
}
|
||||||
|
|
||||||
static BOOL AddFontFileToList(char *file, char *fake_family)
|
static BOOL AddFontFileToList(const char *file, char *fake_family)
|
||||||
{
|
{
|
||||||
FT_Face ft_face;
|
FT_Face ft_face;
|
||||||
TT_OS2 *pOS2;
|
TT_OS2 *pOS2;
|
||||||
|
@ -622,6 +641,67 @@ static BOOL ReadFontDir(char *dirname)
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void load_fontconfig_fonts(void)
|
||||||
|
{
|
||||||
|
#ifdef HAVE_FONTCONFIG_FONTCONFIG_H
|
||||||
|
void *fc_handle = NULL;
|
||||||
|
FcConfig *config;
|
||||||
|
FcPattern *pat;
|
||||||
|
FcObjectSet *os;
|
||||||
|
FcFontSet *fontset;
|
||||||
|
FcValue v;
|
||||||
|
int i, len;
|
||||||
|
const char *ext;
|
||||||
|
|
||||||
|
fc_handle = wine_dlopen(SONAME_LIBFONTCONFIG, RTLD_NOW, NULL, 0);
|
||||||
|
if(!fc_handle) {
|
||||||
|
TRACE("Wine cannot find the fontconfig library (%s).\n",
|
||||||
|
SONAME_LIBFONTCONFIG);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
#define LOAD_FUNCPTR(f) if((p##f = wine_dlsym(fc_handle, #f, NULL, 0)) == NULL){WARN("Can't find symbol %s\n", #f); goto sym_not_found;}
|
||||||
|
LOAD_FUNCPTR(FcConfigGetCurrent);
|
||||||
|
LOAD_FUNCPTR(FcFontList);
|
||||||
|
LOAD_FUNCPTR(FcFontSetDestroy);
|
||||||
|
LOAD_FUNCPTR(FcInit);
|
||||||
|
LOAD_FUNCPTR(FcObjectSetAdd);
|
||||||
|
LOAD_FUNCPTR(FcObjectSetCreate);
|
||||||
|
LOAD_FUNCPTR(FcObjectSetDestroy);
|
||||||
|
LOAD_FUNCPTR(FcPatternCreate);
|
||||||
|
LOAD_FUNCPTR(FcPatternDestroy);
|
||||||
|
LOAD_FUNCPTR(FcPatternGet);
|
||||||
|
#undef LOAD_FUNCPTR
|
||||||
|
|
||||||
|
if(!pFcInit()) return;
|
||||||
|
|
||||||
|
config = pFcConfigGetCurrent();
|
||||||
|
pat = pFcPatternCreate();
|
||||||
|
os = pFcObjectSetCreate();
|
||||||
|
pFcObjectSetAdd(os, FC_FILE);
|
||||||
|
fontset = pFcFontList(config, pat, os);
|
||||||
|
if(!fontset) return;
|
||||||
|
for(i = 0; i < fontset->nfont; i++) {
|
||||||
|
if(pFcPatternGet(fontset->fonts[i], FC_FILE, 0, &v) != FcResultMatch)
|
||||||
|
continue;
|
||||||
|
if(v.type != FcTypeString) continue;
|
||||||
|
TRACE("fontconfig: %s\n", v.u.s);
|
||||||
|
|
||||||
|
/* We're just interested in OT/TT fonts for now, so this hack just
|
||||||
|
picks up the standard extensions to save time loading every other
|
||||||
|
font */
|
||||||
|
len = strlen(v.u.s);
|
||||||
|
if(len < 4) continue;
|
||||||
|
ext = v.u.s + len - 3;
|
||||||
|
if(!strcasecmp(ext, "ttf") || !strcasecmp(ext, "ttc") || !strcasecmp(ext, "otf"))
|
||||||
|
AddFontFileToList(v.u.s, NULL);
|
||||||
|
}
|
||||||
|
pFcFontSetDestroy(fontset);
|
||||||
|
pFcObjectSetDestroy(os);
|
||||||
|
pFcPatternDestroy(pat);
|
||||||
|
sym_not_found:
|
||||||
|
#endif
|
||||||
|
return;
|
||||||
|
}
|
||||||
/*************************************************************
|
/*************************************************************
|
||||||
* WineEngAddFontResourceEx
|
* WineEngAddFontResourceEx
|
||||||
*
|
*
|
||||||
|
@ -766,6 +846,7 @@ BOOL WineEngInit(void)
|
||||||
RegCloseKey(hkey);
|
RegCloseKey(hkey);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
load_fontconfig_fonts();
|
||||||
|
|
||||||
/* then look in any directories that we've specified in the config file */
|
/* then look in any directories that we've specified in the config file */
|
||||||
if(RegOpenKeyA(HKEY_LOCAL_MACHINE,
|
if(RegOpenKeyA(HKEY_LOCAL_MACHINE,
|
||||||
|
|
|
@ -80,6 +80,9 @@
|
||||||
/* Define to 1 if you have the <float.h> header file. */
|
/* Define to 1 if you have the <float.h> header file. */
|
||||||
#undef HAVE_FLOAT_H
|
#undef HAVE_FLOAT_H
|
||||||
|
|
||||||
|
/* Define to 1 if you have the <fontconfig/fontconfig.h> header file. */
|
||||||
|
#undef HAVE_FONTCONFIG_FONTCONFIG_H
|
||||||
|
|
||||||
/* Define to 1 if you have the `fpclass' function. */
|
/* Define to 1 if you have the `fpclass' function. */
|
||||||
#undef HAVE_FPCLASS
|
#undef HAVE_FPCLASS
|
||||||
|
|
||||||
|
@ -791,6 +794,9 @@
|
||||||
/* Define to the soname of the libcurses library. */
|
/* Define to the soname of the libcurses library. */
|
||||||
#undef SONAME_LIBCURSES
|
#undef SONAME_LIBCURSES
|
||||||
|
|
||||||
|
/* Define to the soname of the libfontconfig library. */
|
||||||
|
#undef SONAME_LIBFONTCONFIG
|
||||||
|
|
||||||
/* Define to the soname of the libfreetype library. */
|
/* Define to the soname of the libfreetype library. */
|
||||||
#undef SONAME_LIBFREETYPE
|
#undef SONAME_LIBFREETYPE
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue