Enlightenment CVS committal Author : raster Project : e17 Module : libs/evas
Dir : e17/libs/evas/src/lib/canvas Modified Files: evas_font_dir.c Log Message: werd to my homies... this had to happen sooner or later.... evas supports FONTSETS! so u can do Vera,Kochi,Blah ... etc. as the font name it will fall back font by font until it finds a char or finally fails. this is for internationalisation support... WHERD! =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/evas/src/lib/canvas/evas_font_dir.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -3 -r1.3 -r1.4 --- evas_font_dir.c 31 Jan 2005 15:03:36 -0000 1.3 +++ evas_font_dir.c 20 Mar 2005 15:57:55 -0000 1.4 @@ -46,66 +46,171 @@ return NULL; } +static Evas_List * +evas_font_set_get(char *name) +{ + Evas_List *fonts = NULL; + char *p; + + p = strchr(name, ','); + if (!p) + { + fonts = evas_list_append(fonts, strdup(name)); + } + else + { + char *nm, *pp; + + pp = name; + while (p) + { + nm = malloc(p - pp + 1); + strncpy(nm, pp, p - pp); + nm[p - pp] = 0; + fonts = evas_list_append(fonts, nm); + pp = p + 1; + p = strchr(pp, ','); + if (!p) fonts = evas_list_append(fonts, strdup(pp)); + } + } + return fonts; +} + void * evas_font_load(Evas *evas, char *name, char *source, int size) { void *font = NULL; + Evas_List *fonts, *l; -#ifdef BUILD_FONT_LOADER_EET - if (source) + fonts = evas_font_set_get(name); + for (l = fonts; l; l = l->next) { - Eet_File *ef; - char *fake_name; + char *nm; - fake_name = evas_file_path_join(source, name); - if (fake_name) + nm = l->data; + if (l == fonts) { - font = evas->engine.func->font_load(evas->engine.data.output, fake_name, size); +#ifdef BUILD_FONT_LOADER_EET + if (source) + { + Eet_File *ef; + char *fake_name; + + fake_name = evas_file_path_join(source, nm); + if (fake_name) + { + font = evas->engine.func->font_load(evas->engine.data.output, fake_name, size); + if (!font) + { + /* read original!!! */ + ef = eet_open(source, EET_FILE_MODE_READ); + if (ef) + { + void *fdata; + int fsize = 0; + + fdata = eet_read(ef, nm, &fsize); + if ((fdata) && (fsize > 0)) + { + font = evas->engine.func->font_memory_load(evas->engine.data.output, fake_name, size, fdata, fsize); + free(fdata); + } + eet_close(ef); + } + } + free(fake_name); + } + } if (!font) { - /* read original!!! */ - ef = eet_open(source, EET_FILE_MODE_READ); - if (ef) +#endif + if (evas_file_path_is_full_path((char *)nm)) + font = evas->engine.func->font_load(evas->engine.data.output, (char *)nm, size); + else { - void *fdata; - int fsize = 0; + Evas_List *l; - fdata = eet_read(ef, name, &fsize); - if ((fdata) && (fsize > 0)) + for (l = evas->font_path; l; l = l->next) { - font = evas->engine.func->font_memory_load(evas->engine.data.output, fake_name, size, fdata, fsize); - free(fdata); + char *f_file; + + f_file = evas_font_dir_cache_find(l->data, (char *)nm); + if (f_file) + { + font = evas->engine.func->font_load(evas->engine.data.output, f_file, size); + if (font) break; + } } - eet_close(ef); } +#ifdef BUILD_FONT_LOADER_EET } - free(fake_name); - } - } - if (!font) - { #endif - if (evas_file_path_is_full_path((char *)name)) - font = evas->engine.func->font_load(evas->engine.data.output, (char *)name, size); + } else { - Evas_List *l; + int ok = 0; - for (l = evas->font_path; l; l = l->next) +#ifdef BUILD_FONT_LOADER_EET + if (source) { - char *f_file; + Eet_File *ef; + char *fake_name; - f_file = evas_font_dir_cache_find(l->data, (char *)name); - if (f_file) + fake_name = evas_file_path_join(source, nm); + if (fake_name) { - font = evas->engine.func->font_load(evas->engine.data.output, f_file, size); - if (font) break; + /* FIXME: make an engine func */ + if (!evas_common_font_add(font, fake_name, size)) + { + /* read original!!! */ + ef = eet_open(source, EET_FILE_MODE_READ); + if (ef) + { + void *fdata; + int fsize = 0; + + fdata = eet_read(ef, nm, &fsize); + if ((fdata) && (fsize > 0)) + { + ok = evas_common_font_memory_add(font, fake_name, size, fdata, fsize); + free(fdata); + } + eet_close(ef); + } + } + else + ok = 1; + free(fake_name); } } + if (!ok) + { +#endif + if (evas_file_path_is_full_path((char *)nm)) + evas_common_font_add(font, (char *)nm, size); + else + { + Evas_List *l; + + for (l = evas->font_path; l; l = l->next) + { + char *f_file; + + f_file = evas_font_dir_cache_find(l->data, (char *)nm); + if (f_file) + { + if (evas_common_font_add(font, f_file, size)) + break; + } + } + } #ifdef BUILD_FONT_LOADER_EET - } + } #endif + } + free(nm); } + evas_list_free(fonts); return font; } ------------------------------------------------------- SF email is sponsored by - The IT Product Guide Read honest & candid reviews on hundreds of IT Products from real users. Discover which products truly live up to the hype. Start reading now. http://ads.osdn.com/?ad_id=6595&alloc_id=14396&op=click _______________________________________________ enlightenment-cvs mailing list enlightenment-cvs@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs