2 * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
9 * - use e_path to search for available fonts
12 static Evas_List *_e_font_defaults = NULL; /* MRU <E_Font_Default> */
13 static Evas_List *_e_font_fallbacks = NULL; /* <E_Font_Fallback> */
15 static Evas_List *_e_font_font_dir_available_get (Evas_List * available_fonts, const char *font_dir);
20 /* just get the pointers into the config */
21 _e_font_defaults = e_config->font_defaults;
22 _e_font_fallbacks = e_config->font_fallbacks;
29 /* e_config will do this */
41 /* setup edje fallback list */
42 next = _e_font_fallbacks;
45 eff = evas_list_data(next);
46 strncpy(buf, eff->name, PATH_MAX - 1);
47 next = evas_list_next(next);
51 edje_fontset_append_set(NULL);
57 eff = evas_list_data(next);
59 strcat(buf, eff->name);
60 next = evas_list_next(next);
63 edje_fontset_append_set(buf);
65 /* setup edje text classes */
66 next = _e_font_defaults;
69 efd = evas_list_data(next);
70 edje_text_class_set(efd->text_class, efd->font, efd->size);
71 next = evas_list_next(next);
76 e_font_available_list(void)
81 /* use e_path for this */
82 available = _e_font_font_dir_available_get(available, "~/.e/e/fonts");
83 available = _e_font_font_dir_available_get(available, PACKAGE_DATA_DIR "/data/fonts");
88 e_font_available_list_free(Evas_List * available)
93 for (l = available; l; l = l->next)
95 font_name = evas_list_data(l);
96 available = evas_list_remove(available, l);
102 e_font_fallback_clear(void)
106 next = _e_font_fallbacks;
109 E_Font_Fallback *eff;
111 eff = evas_list_data(next);
112 _e_font_fallbacks = evas_list_remove_list(_e_font_fallbacks, next);
115 next = evas_list_next(next);
120 e_font_fallback_append(const char *font)
122 E_Font_Fallback *eff;
124 e_font_fallback_remove (font);
126 eff = E_NEW(E_Font_Fallback, 1);
127 eff->name = strdup(font);
128 _e_font_fallbacks = evas_list_append(_e_font_fallbacks, eff);
132 e_font_fallback_prepend(const char *font)
134 E_Font_Fallback *eff;
136 e_font_fallback_remove (font);
138 eff = E_NEW(E_Font_Fallback, 1);
139 eff->name = strdup(font);
140 _e_font_fallbacks = evas_list_prepend(_e_font_fallbacks, eff);
144 e_font_fallback_remove(const char *font)
148 next = _e_font_fallbacks;
151 E_Font_Fallback *eff;
153 eff = evas_list_data(next);
154 if (!strcmp(eff->name, font))
156 _e_font_fallbacks = evas_list_remove_list(_e_font_fallbacks, next);
161 next = evas_list_next(next);
166 e_font_fallback_list(void)
168 return _e_font_fallbacks;
172 e_font_default_set(const char *text_class, const char *font, int size)
177 /* search for the text class */
178 next = _e_font_defaults;
181 efd = evas_list_data(next);
182 if (!strcmp(efd->text_class, text_class))
185 efd->font = strdup(font);
187 /* move to the front of the list */
188 _e_font_defaults = evas_list_remove_list(_e_font_defaults, next);
189 _e_font_defaults = evas_list_prepend(_e_font_defaults, efd);
192 next = evas_list_next(next);
195 /* the text class doesnt exist */
196 efd = E_NEW(E_Font_Default, 1);
197 efd->text_class = strdup(text_class);
198 efd->font = strdup(font);
201 _e_font_defaults = evas_list_prepend(_e_font_defaults, efd);
205 * returns a pointer to the data, return null if nothing if found.
208 e_font_default_get(const char *text_class)
213 /* search for the text class */
214 next = _e_font_defaults;
217 efd = evas_list_data(next);
218 if (!strcmp(efd->text_class, text_class))
220 /* move to the front of the list */
221 _e_font_defaults = evas_list_remove_list(_e_font_defaults, next);
222 _e_font_defaults = evas_list_prepend(_e_font_defaults, efd);
225 next = evas_list_next(next);
231 e_font_default_remove(const char *text_class)
236 /* search for the text class */
237 next = _e_font_defaults;
240 efd = evas_list_data(next);
241 if (!strcmp(efd->text_class, text_class))
243 _e_font_defaults = evas_list_remove_list(_e_font_defaults, next);
244 E_FREE(efd->text_class);
249 next = evas_list_next(next);
254 e_font_default_list(void)
256 return _e_font_defaults;
260 _e_font_font_dir_available_get(Evas_List * available_fonts, const char *font_dir)
265 sprintf (buf, "%s/fonts.alias", font_dir);
266 f = fopen (buf, "r");
269 char fname[4096], fdef[4096];
272 /* read font alias lines */
273 while (fscanf(f, "%4090s %[^\n]\n", fname, fdef) == 2)
276 if ((fdef[0] == '!') || (fdef[0] == '#'))
279 /* skip duplicates */
280 next = available_fonts;
283 if (!strcmp((char *)evas_list_data(next), fname))
285 next = evas_list_next(next);
287 available_fonts = evas_list_append(available_fonts, strdup(fname));
291 return available_fonts;