2 * vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
8 * - use e_path to search for available fonts
11 static Evas_List *_e_font_font_dir_available_get (Evas_List * available_fonts, const char *font_dir);
13 static char _fn_buf[1024];
18 /* all init stuff is in e_config */
25 /* e_config will do this */
37 /* setup edje fallback list */
38 blen = sizeof(buf) - 1;
41 l = e_config->font_fallbacks;
44 eff = evas_list_data(l);
45 len = strlen(eff->name);
48 strcpy(buf, eff->name);
51 for (l = evas_list_next(l); l; l = l->next)
53 eff = evas_list_data(l);
60 len = strlen(eff->name);
63 strcat(buf, eff->name);
67 edje_fontset_append_set(buf);
70 edje_fontset_append_set(NULL);
72 /* setup edje text classes */
73 for (l = e_config->font_defaults; l; l = l->next)
77 efd = evas_list_data(l);
78 edje_text_class_set(efd->text_class, efd->font, efd->size);
82 for (l = e_border_client_list(); l; l = l->next)
87 e_border_frame_recalc(bd);
92 e_font_available_list(void)
98 dir_list = e_path_dir_list_get(path_fonts);
100 for ( next = dir_list; next; next = next->next)
102 E_Path_Dir *epd = next->data;
103 available = _e_font_font_dir_available_get(available, epd->dir);
106 e_path_dir_list_free(dir_list);
111 e_font_available_list_free(Evas_List *available)
113 E_Font_Available *efa;
117 efa = available->data;
118 available = evas_list_remove_list(available, available);
119 if (efa->name) evas_stringshare_del(efa->name);
125 e_font_fallback_clear(void)
127 E_Font_Fallback *eff;
129 while (e_config->font_fallbacks)
131 eff = e_config->font_fallbacks->data;
132 e_config->font_fallbacks = evas_list_remove_list(
133 e_config->font_fallbacks,
134 e_config->font_fallbacks);
141 e_font_fallback_append(const char *font)
143 E_Font_Fallback *eff;
145 e_font_fallback_remove (font);
147 eff = E_NEW(E_Font_Fallback, 1);
148 eff->name = evas_stringshare_add(font);
149 e_config->font_fallbacks = evas_list_append(e_config->font_fallbacks, eff);
153 e_font_fallback_prepend(const char *font)
155 E_Font_Fallback *eff;
157 e_font_fallback_remove (font);
159 eff = E_NEW(E_Font_Fallback, 1);
160 eff->name = evas_stringshare_add(font);
161 e_config->font_fallbacks = evas_list_prepend(e_config->font_fallbacks, eff);
165 e_font_fallback_remove(const char *font)
169 for (next = e_config->font_fallbacks; next; next = next->next)
171 E_Font_Fallback *eff;
173 eff = evas_list_data(next);
174 if (!strcmp(eff->name, font))
176 e_config->font_fallbacks = evas_list_remove_list(
177 e_config->font_fallbacks, next);
178 if (eff->name) evas_stringshare_del(eff->name);
186 e_font_fallback_list(void)
188 return e_config->font_fallbacks;
192 e_font_default_set(const char *text_class, const char *font, int size)
197 /* search for the text class */
198 for (next = e_config->font_defaults; next; next = next->next)
200 efd = evas_list_data(next);
201 if (!strcmp(efd->text_class, text_class))
203 if (efd->font) evas_stringshare_del(efd->font);
204 efd->font = evas_stringshare_add(font);
206 /* move to the front of the list */
207 e_config->font_defaults = evas_list_remove_list(
208 e_config->font_defaults, next);
209 e_config->font_defaults = evas_list_prepend(
210 e_config->font_defaults, efd);
215 /* the text class doesnt exist */
216 efd = E_NEW(E_Font_Default, 1);
217 efd->text_class = evas_stringshare_add(text_class);
218 efd->font = evas_stringshare_add(font);
221 e_config->font_defaults = evas_list_prepend(e_config->font_defaults, efd);
225 * returns a pointer to the data, return null if nothing if found.
227 EAPI E_Font_Default *
228 e_font_default_get(const char *text_class)
230 E_Font_Default *efd = NULL, *defd = NULL;
233 /* search for the text class */
234 for (next = e_config->font_defaults; next; next = next->next)
236 efd = evas_list_data(next);
237 if (!strcmp(efd->text_class, text_class))
239 /* move to the front of the list */
240 e_config->font_defaults = evas_list_remove_list(
241 e_config->font_defaults, next);
242 e_config->font_defaults = evas_list_prepend(
243 e_config->font_defaults, efd);
246 if (!strcmp(efd->text_class, "default"))
255 e_font_default_remove(const char *text_class)
260 /* search for the text class */
261 for (next = e_config->font_defaults; next; next = next->next)
263 efd = evas_list_data(next);
264 if (!strcmp(efd->text_class, text_class))
266 e_config->font_defaults = evas_list_remove_list(
267 e_config->font_defaults, next);
268 if (efd->text_class) evas_stringshare_del(efd->text_class);
269 if (efd->font) evas_stringshare_del(efd->font);
277 e_font_default_list(void)
279 return e_config->font_defaults;
283 e_font_default_string_get(const char *text_class, int *size_ret)
287 E_Font_Fallback *eff;
291 efd = e_font_default_get(text_class);
294 if (size_ret) *size_ret = 0;
297 blen = sizeof(_fn_buf) - 1;
299 len = strlen(efd->font);
302 strcpy(_fn_buf, efd->font);
306 next = e_config->font_fallbacks;
309 eff = evas_list_data(next);
313 strcat(_fn_buf, ",");
316 len = strlen(eff->name);
319 strcat(_fn_buf, eff->name);
322 next = evas_list_next(next);
325 if (size_ret) *size_ret = efd->size;
330 _e_font_font_dir_available_get(Evas_List *available_fonts, const char *font_dir)
335 snprintf(buf, sizeof(buf), "%s/fonts.alias", font_dir);
339 char fname[4096], fdef[4096];
342 /* read font alias lines */
343 while (fscanf(f, "%4090s %[^\n]\n", fname, fdef) == 2)
345 E_Font_Available *efa;
348 if ((fdef[0] == '!') || (fdef[0] == '#'))
351 /* skip duplicates */
353 for (next = available_fonts; next; next = evas_list_next(next))
355 efa = (E_Font_Available *)evas_list_data(next);
357 if (!strcmp(efa->name, fname))
361 efa = malloc(sizeof(E_Font_Available));
362 efa->name = evas_stringshare_add(fname);
363 available_fonts = evas_list_append(available_fonts, efa);
367 return available_fonts;