Include and link physfs properly.
[tuxanci.git] / src / client / fontConfig.c
blobb0e0741328ce266c10d2e89c02499f48865afa42
1 #include <stdio.h>
2 #include <unistd.h>
3 #include <stdlib.h>
4 #include <string.h>
5 #include <fontconfig/fontconfig.h>
7 #include "main.h"
8 #include "fontConfig.h"
10 int fontconfig_init()
12 int res;
14 res = FcInit();
16 if (res == 0) {
17 error("Unable to init fontconfig library");
18 return 1;
21 return 0;
24 font_config_t *fontconfig_find(char **arg)
26 FcObjectSet *os;
27 FcFontSet *fs;
28 FcPattern *pat;
29 font_config_t *ret;
30 int i;
32 os = NULL;
33 ret = NULL;
35 for (i = 0; arg[i] != NULL; i++) {
36 if (i == 0) {
37 pat = FcNameParse((FcChar8 *) arg[i]);
40 if (os == NULL) {
41 os = FcObjectSetCreate();
44 FcObjectSetAdd(os, arg[i]);
47 if (os == NULL) {
48 os = FcObjectSetBuild(FC_FAMILY, FC_STYLE, (char *) 0);
51 fs = FcFontList(0, pat, os);
52 FcObjectSetDestroy(os);
54 if (pat != NULL) {
55 FcPatternDestroy(pat);
58 if (fs != NULL) {
59 int j;
61 ret = malloc((fs->nfont + 1) * sizeof(font_config_t));
63 for (j = 0; j < fs->nfont; j++) {
64 FcChar8 *font;
65 FcChar8 *file;
67 font = FcNameUnparse(fs->fonts[j]);
69 if (FcPatternGetString(fs->fonts[j], FC_FILE, 0, &file) == FcResultMatch) {
70 ret[j].path = strdup((char *) file);
73 ret[j].flag = strdup((char *) font);
74 free(font);
77 ret[fs->nfont].path = NULL;
78 ret[fs->nfont].flag = NULL;
80 FcFontSetDestroy(fs);
83 return ret;
86 void fontconfig_del_list(font_config_t *list)
88 int i;
90 for (i = 0; list[i].path != NULL; i++) {
91 free(list[i].path);
92 free(list[i].flag);
95 free(list);
98 int fontconfig_quit()
100 FcFini();
101 return 0;