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
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs