Add a Font_Directory to Edje_File

Check fonts against directory entries.


SVN revision: 11438
This commit is contained in:
rephorm 2004-08-30 05:39:24 +00:00 committed by rephorm
parent cb27d46c1c
commit 0cccbd1d40
5 changed files with 67 additions and 9 deletions

View File

@ -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

View File

@ -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))
{

View File

@ -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);

View File

@ -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)

View File

@ -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;