#include <stdlib.h>
#include "xftint.h"
#include <fontconfig/fcprivate.h>
XftObjectSet *
XftObjectSetCreate (void)
{
return FcObjectSetCreate ();
}
Bool
XftObjectSetAdd (XftObjectSet *os, const char *object)
{
return FcObjectSetAdd (os, object);
}
void
XftObjectSetDestroy (XftObjectSet *os)
{
FcObjectSetDestroy (os);
}
XftObjectSet *
XftObjectSetVaBuild (const char *first, va_list va)
{
XftObjectSet *ret;
FcObjectSetVapBuild (ret, first, va);
return ret;
}
XftObjectSet *
XftObjectSetBuild (const char *first, ...)
{
va_list va;
XftObjectSet *os;
va_start (va, first);
FcObjectSetVapBuild (os, first, va);
va_end (va);
return os;
}
XftFontSet *
XftListFontSets (XftFontSet **sets,
int nsets,
XftPattern *p,
XftObjectSet *os)
{
return FcFontSetList (0, sets, nsets, p, os);
}
XftFontSet *
XftListFontsPatternObjects (Display *dpy,
int screen,
XftPattern *pattern,
XftObjectSet *os)
{
XftFontSet *sets[2];
int nsets = 0;
#ifdef FREETYPE2
Bool core, render;
XftResult result;
#endif
XftPattern *pattern_trim;
XftFontSet *ret;
if (!XftInit (0))
return 0;
pattern_trim = XftPatternDuplicate (pattern);
if (!pattern_trim)
return 0;
XftPatternDel (pattern_trim, XFT_CORE);
XftPatternDel (pattern_trim, XFT_RENDER);
#ifdef FREETYPE2
render = core = False;
result = XftPatternGetBool (pattern, XFT_CORE, 0, &core);
if (result != XftResultMatch)
core = XftDefaultGetBool (dpy, XFT_CORE, screen,
!XftDefaultHasRender (dpy));
result = XftPatternGetBool (pattern, XFT_RENDER, 0, &render);
if (result != XftResultMatch)
render = XftDefaultGetBool (dpy, XFT_RENDER, screen,
XftDefaultHasRender (dpy));
if (render)
{
XftPatternDel (pattern_trim, XFT_ENCODING);
if (XftInitFtLibrary())
{
sets[nsets] = _XftFontSet;
if (sets[nsets])
nsets++;
}
}
if (core)
#endif
{
sets[nsets] = XftDisplayGetFontSet (dpy);
if (sets[nsets])
nsets++;
}
ret = XftListFontSets (sets, nsets, pattern_trim, os);
XftPatternDestroy (pattern_trim);
return ret;
}
XftFontSet *
XftListFonts (Display *dpy,
int screen,
...)
{
va_list va;
XftFontSet *fs;
XftObjectSet *os;
XftPattern *pattern;
const char *first;
va_start (va, screen);
FcPatternVapBuild (pattern, 0, va);
first = va_arg (va, const char *);
FcObjectSetVapBuild (os, first, va);
va_end (va);
fs = XftListFontsPatternObjects (dpy, screen, pattern, os);
XftPatternDestroy (pattern);
XftObjectSetDestroy (os);
return fs;
}