From 0cccbd1d4053e547a85272a2bc16b85bc7b099cb Mon Sep 17 00:00:00 2001 From: rephorm Date: Mon, 30 Aug 2004 05:39:24 +0000 Subject: [PATCH] Add a Font_Directory to Edje_File Check fonts against directory entries. SVN revision: 11438 --- legacy/edje/src/lib/Edje_Edit.h | 16 ++++++++++++++++ legacy/edje/src/lib/edje_calc.c | 28 +++++++++++++++++++--------- legacy/edje/src/lib/edje_data.c | 16 ++++++++++++++++ legacy/edje/src/lib/edje_load.c | 14 ++++++++++++++ legacy/edje/src/lib/edje_private.h | 2 ++ 5 files changed, 67 insertions(+), 9 deletions(-) diff --git a/legacy/edje/src/lib/Edje_Edit.h b/legacy/edje/src/lib/Edje_Edit.h index f78ec2853f..b5bce0b9db 100644 --- a/legacy/edje/src/lib/Edje_Edit.h +++ b/legacy/edje/src/lib/Edje_Edit.h @@ -18,6 +18,8 @@ typedef struct _Edje_File Edje_File; typedef struct _Edje_Data Edje_Data; +typedef struct _Edje_Font_Directory Edje_Font_Directory; +typedef struct _Edje_Font_Directory_Entry Edje_Font_Directory_Entry; typedef struct _Edje_Image_Directory Edje_Image_Directory; typedef struct _Edje_Image_Directory_Entry Edje_Image_Directory_Entry; typedef struct _Edje_Program Edje_Program; @@ -144,6 +146,7 @@ struct _Edje_File { char *path; + Edje_Font_Directory *font_dir; Edje_Image_Directory *image_dir; Edje_Part_Collection_Directory *collection_dir; Evas_List *data; @@ -161,6 +164,19 @@ struct _Edje_Data char *value; }; +/*----------*/ + +struct _Edje_Font_Directory +{ + Evas_List *entries; /* a list of Edje_Font_Directory_Entry */ +}; + +struct _Edje_Font_Directory_Entry +{ + char *entry; /* the name of the font */ +}; + + /*----------*/ struct _Edje_Image_Directory diff --git a/legacy/edje/src/lib/edje_calc.c b/legacy/edje/src/lib/edje_calc.c index 474edb53bf..502e980091 100644 --- a/legacy/edje/src/lib/edje_calc.c +++ b/legacy/edje/src/lib/edje_calc.c @@ -508,6 +508,7 @@ _edje_part_recalc_single(Edje *ed, int size; Evas_Coord tw, th; char buf[4096]; + Evas_List *l; text = chosen_desc->text.text; font = chosen_desc->text.font; @@ -529,15 +530,24 @@ _edje_part_recalc_single(Edje *ed, if (ep->text.text) text = ep->text.text; if (ep->text.font) font = ep->text.font; if (ep->text.size > 0) size = ep->text.size; - - strcpy(buf, "fonts/"); - strcat(buf, font); - - evas_object_text_font_set(ep->object, buf, 10); - - if (evas_object_text_ascent_get(ep->object) > 0) font = buf; -// font = buf; - + + /* check if the font is embedded in the .eet */ + /* FIXME: we should cache this result */ + if (ed->file->font_dir) + { + for (l = ed->file->font_dir->entries; l; l = l->next) + { + Edje_Font_Directory_Entry *fnt = l->data; + + if (!strcmp(fnt->entry, font)) + { + strcpy(buf, "fonts/"); + strcat(buf, font); + break; + } + } + } + evas_object_text_font_set(ep->object, font, size); if ((chosen_desc->text.min_x) || (chosen_desc->text.min_y)) { diff --git a/legacy/edje/src/lib/edje_data.c b/legacy/edje/src/lib/edje_data.c index ee192e11a8..f5b954b577 100644 --- a/legacy/edje/src/lib/edje_data.c +++ b/legacy/edje/src/lib/edje_data.c @@ -3,6 +3,8 @@ Eet_Data_Descriptor *_edje_edd_edje_file = NULL; Eet_Data_Descriptor *_edje_edd_edje_data = NULL; +Eet_Data_Descriptor *_edje_edd_edje_font_directory = NULL; +Eet_Data_Descriptor *_edje_edd_edje_font_directory_entry = NULL; Eet_Data_Descriptor *_edje_edd_edje_image_directory = NULL; Eet_Data_Descriptor *_edje_edd_edje_image_directory_entry = NULL; Eet_Data_Descriptor *_edje_edd_edje_program = NULL; @@ -37,6 +39,8 @@ _edje_edd_free(void) { FREED(_edje_edd_edje_file); FREED(_edje_edd_edje_data); + FREED(_edje_edd_edje_font_directory); + FREED(_edje_edd_edje_font_directory_entry); FREED(_edje_edd_edje_image_directory); FREED(_edje_edd_edje_image_directory_entry); FREED(_edje_edd_edje_program); @@ -53,6 +57,17 @@ _edje_edd_free(void) void _edje_edd_setup(void) { + /* font directory */ + _edje_edd_edje_font_directory_entry = + NEWD("Edje_Font_Directory_Entry", + Edje_Font_Directory_Entry); + EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_font_directory_entry, Edje_Font_Directory_Entry, "entry", entry, EET_T_STRING); + + _edje_edd_edje_font_directory = + NEWD("Edje_Font_Directory", + Edje_Font_Directory); + EET_DATA_DESCRIPTOR_ADD_LIST(_edje_edd_edje_font_directory, Edje_Font_Directory, "entries", entries, _edje_edd_edje_font_directory_entry); + /* image directory */ _edje_edd_edje_image_directory_entry = NEWD("Edje_Image_Directory_Entry", @@ -91,6 +106,7 @@ _edje_edd_setup(void) NEWD("Edje_File", Edje_File); EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_file, Edje_File, "version", version, EET_T_INT); + EET_DATA_DESCRIPTOR_ADD_SUB(_edje_edd_edje_file, Edje_File, "font_dir", font_dir, _edje_edd_edje_font_directory); EET_DATA_DESCRIPTOR_ADD_SUB(_edje_edd_edje_file, Edje_File, "image_dir", image_dir, _edje_edd_edje_image_directory); EET_DATA_DESCRIPTOR_ADD_SUB(_edje_edd_edje_file, Edje_File, "collection_dir", collection_dir, _edje_edd_edje_part_collection_directory); EET_DATA_DESCRIPTOR_ADD_LIST(_edje_edd_edje_file, Edje_File, "data", data, _edje_edd_edje_data); diff --git a/legacy/edje/src/lib/edje_load.c b/legacy/edje/src/lib/edje_load.c index e71da2aa87..4bb19bce68 100644 --- a/legacy/edje/src/lib/edje_load.c +++ b/legacy/edje/src/lib/edje_load.c @@ -647,6 +647,20 @@ _edje_file_free(Edje_File *edf) _edje_file_hash = evas_hash_del(_edje_file_hash, edf->path, edf); if (edf->path) free(edf->path); + if (edf->font_dir) + { + while (edf->font_dir->entries) + { + Edje_Font_Directory_Entry *fe; + + fe = edf->font_dir->entries->data; + edf->font_dir->entries = + evas_list_remove(edf->font_dir->entries, fe); + if (fe->entry) free(fe->entry); + free(fe); + } + free(edf->font_dir); + } if (edf->image_dir) { while (edf->image_dir->entries) diff --git a/legacy/edje/src/lib/edje_private.h b/legacy/edje/src/lib/edje_private.h index 954b160778..b8d14c22f8 100644 --- a/legacy/edje/src/lib/edje_private.h +++ b/legacy/edje/src/lib/edje_private.h @@ -66,6 +66,8 @@ struct _Edje_Message extern Eet_Data_Descriptor *_edje_edd_edje_file; extern Eet_Data_Descriptor *_edje_edd_edje_data; +extern Eet_Data_Descriptor *_edje_edd_edje_font_directory; +extern Eet_Data_Descriptor *_edje_edd_edje_font_directory_entry; extern Eet_Data_Descriptor *_edje_edd_edje_image_directory; extern Eet_Data_Descriptor *_edje_edd_edje_image_directory_entry; extern Eet_Data_Descriptor *_edje_edd_edje_program;