From ed98ed17465dab3020c2815503c4e121c7794c3d Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Mon, 31 Jan 2005 15:03:38 +0000 Subject: [PATCH] and in one foul swoop i merged font loading code betwene text block and text objects... wherd! SVN revision: 13152 --- legacy/evas/src/lib/canvas/evas_font_dir.c | 64 +++++++++++++++++ legacy/evas/src/lib/canvas/evas_object_text.c | 69 +------------------ .../src/lib/canvas/evas_object_textblock.c | 17 +++-- legacy/evas/src/lib/include/evas_private.h | 3 +- 4 files changed, 80 insertions(+), 73 deletions(-) diff --git a/legacy/evas/src/lib/canvas/evas_font_dir.c b/legacy/evas/src/lib/canvas/evas_font_dir.c index 56c44103b5..491c67388a 100644 --- a/legacy/evas/src/lib/canvas/evas_font_dir.c +++ b/legacy/evas/src/lib/canvas/evas_font_dir.c @@ -46,6 +46,70 @@ evas_font_dir_cache_find(char *dir, char *font) return NULL; } +void * +evas_font_load(Evas *evas, char *name, char *source, int size) +{ + void *font = NULL; + +#ifdef BUILD_FONT_LOADER_EET + if (source) + { + Eet_File *ef; + char *fake_name; + + fake_name = evas_file_path_join(source, name); + 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, name, &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) + { +#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; + + for (l = evas->font_path; l; l = l->next) + { + char *f_file; + + f_file = evas_font_dir_cache_find(l->data, (char *)name); + if (f_file) + { + font = evas->engine.func->font_load(evas->engine.data.output, f_file, size); + if (font) break; + } + } +#ifdef BUILD_FONT_LOADER_EET + } +#endif + } + return font; +} + + /* private stuff */ static Evas_Bool font_cache_dir_free(Evas_Hash *hash, const char *key, void *data, void *fdata) diff --git a/legacy/evas/src/lib/canvas/evas_object_text.c b/legacy/evas/src/lib/canvas/evas_object_text.c index 8c3b7e92ff..2a14f226f7 100644 --- a/legacy/evas/src/lib/canvas/evas_object_text.c +++ b/legacy/evas/src/lib/canvas/evas_object_text.c @@ -1,9 +1,6 @@ #include "evas_common.h" #include "evas_private.h" #include "Evas.h" -#ifdef BUILD_FONT_LOADER_EET -#include -#endif /* private magic number for text objects */ static const char o_type[] = "text"; @@ -67,7 +64,7 @@ static Evas_Object_Func object_func = * * FIXME: To be fixed. * -evas_font_load.c */ + */ Evas_Object * evas_object_text_add(Evas *e) { @@ -167,69 +164,7 @@ evas_object_text_font_set(Evas_Object *obj, const char *font, Evas_Font_Size siz o->engine_data); o->engine_data = NULL; } -#ifdef BUILD_FONT_LOADER_EET - if (o->cur.source) - { - Eet_File *ef; - char *fake_name; - - fake_name = evas_file_path_join(o->cur.source, font); - if (fake_name) - { - o->engine_data = - obj->layer->evas->engine.func->font_load - (obj->layer->evas->engine.data.output, fake_name, - size); - if (!o->engine_data) - { - /* read original!!! */ - ef = eet_open(o->cur.source, EET_FILE_MODE_READ); - if (ef) - { - void *fdata; - int fsize = 0; - - fdata = eet_read(ef, font, &fsize); - if ((fdata) && (fsize > 0)) - { - o->engine_data = - obj->layer->evas->engine.func->font_memory_load - (obj->layer->evas->engine.data.output, - fake_name, size, fdata, fsize); - free(fdata); - } - eet_close(ef); - } - } - free(fake_name); - } - } - if (!o->engine_data) - { -#endif - if (evas_file_path_is_full_path((char *)font)) - o->engine_data = obj->layer->evas->engine.func->font_load(obj->layer->evas->engine.data.output, - (char *)font, size); - else - { - Evas_List *l; - - for (l = obj->layer->evas->font_path; l; l = l->next) - { - char *f_file; - - f_file = evas_font_dir_cache_find(l->data, (char *)font); - if (f_file) - { - o->engine_data = obj->layer->evas->engine.func->font_load(obj->layer->evas->engine.data.output, - f_file, size); - if (o->engine_data) break; - } - } -#ifdef BUILD_FONT_LOADER_EET - } -#endif - } + o->engine_data = evas_font_load(obj->layer->evas, font, o->cur.source, size); if (!same_font) { if (o->cur.font) free(o->cur.font); diff --git a/legacy/evas/src/lib/canvas/evas_object_textblock.c b/legacy/evas/src/lib/canvas/evas_object_textblock.c index db1145fa9d..51f027538d 100644 --- a/legacy/evas/src/lib/canvas/evas_object_textblock.c +++ b/legacy/evas/src/lib/canvas/evas_object_textblock.c @@ -10,8 +10,6 @@ * * things to add: * - * * font path support - * * font sources support * * word wrap * * underline support * * double underline support @@ -162,8 +160,17 @@ evas_object_textblock_layout_format_apply(Layout *layout, char *key, char *data) } else if (!strcmp(key, "font_source")) { - if (layout->font.source) free(layout->font.source); - layout->font.source = strdup(data); + if (layout->font.source) + { + free(layout->font.source); + layout->font.source = NULL; + } + if (!((data[0] == 0) || + (!strcmp(data, "0")) || + (!strcmp(data, "NULL")) || + (!strcmp(data, "null")) || + (!strcmp(data, "(null)")))) + layout->font.source = strdup(data); } else if (!strcmp(key, "size")) { @@ -487,7 +494,7 @@ evas_object_textblock_layout(Evas_Object *obj) lnode = calloc(1, sizeof(Layout_Node)); evas_object_textblock_layout_copy(&layout, &(lnode->layout)); if (lnode->layout.font.name) - font = ENFN->font_load(ENDT, lnode->layout.font.name, lnode->layout.font.size); + font = evas_font_load(obj->layer->evas, lnode->layout.font.name, lnode->layout.font.source, lnode->layout.font.size); lnode->layout.font.font = font; if (font) ascent = ENFN->font_max_ascent_get(ENDT, font); if (font) descent = ENFN->font_max_descent_get(ENDT, font); diff --git a/legacy/evas/src/lib/include/evas_private.h b/legacy/evas/src/lib/include/evas_private.h index 9e76688c7e..55b708530e 100644 --- a/legacy/evas/src/lib/include/evas_private.h +++ b/legacy/evas/src/lib/include/evas_private.h @@ -687,7 +687,8 @@ void evas_object_grabs_cleanup(Evas_Object *obj); void evas_key_grab_free(Evas_Object *obj, const char *keyname, Evas_Modifier_Mask modifiers, Evas_Modifier_Mask not_modifiers); void evas_font_dir_cache_free(void); char *evas_font_dir_cache_find(char *dir, char *font); - +void *evas_font_load(Evas *evas, char *name, char *source, int size); + extern int _evas_alloc_error; typedef struct _Evas_Imaging_Image Evas_Imaging_Image;