forked from enlightenment/efl
parent
5a3be0fd8c
commit
334eb3a389
|
@ -1,3 +1,4 @@
|
|||
The Rasterman (Carsten Haitzler) <raster@rasterman.com>
|
||||
Tilman Sauerbeck (tilman at code-monkey de)
|
||||
ZigsMcKenzie <zigsmckenzie@gmail.com>
|
||||
Cedric BAIL <cedric.bail@free.fr>
|
||||
|
|
|
@ -63,6 +63,32 @@ _edje_file_coll_open(Edje_File *edf, Eet_File *ef, const char *coll)
|
|||
return edc;
|
||||
}
|
||||
|
||||
static int
|
||||
_edje_font_hash (Edje_File *edf)
|
||||
{
|
||||
int count = 0;
|
||||
|
||||
if (edf->font_dir)
|
||||
{
|
||||
Evas_List *l;
|
||||
for (l = edf->font_dir->entries; l; l = evas_list_next (l))
|
||||
{
|
||||
Edje_Font_Directory_Entry *fnt = l->data;
|
||||
int length = strlen (fnt->entry) + 7;
|
||||
char *tmp = alloca (length);
|
||||
|
||||
snprintf (tmp, length, "fonts/%s", fnt->entry);
|
||||
fnt->path = evas_stringshare_add (tmp);
|
||||
evas_stringshare_del (fnt->entry);
|
||||
fnt->entry = fnt->path + 6;
|
||||
edf->font_hash = evas_hash_direct_add (edf->font_hash, fnt->entry, fnt);
|
||||
|
||||
count++;
|
||||
}
|
||||
}
|
||||
return count;
|
||||
}
|
||||
|
||||
static Edje_File *
|
||||
_edje_file_open(const char *file, const char *coll, int *error_ret, Edje_Part_Collection **edc_ret)
|
||||
{
|
||||
|
@ -103,18 +129,19 @@ _edje_file_open(const char *file, const char *coll, int *error_ret, Edje_Part_Co
|
|||
|
||||
_edje_textblock_style_parse_and_fix(edf);
|
||||
|
||||
if (!coll)
|
||||
if (coll)
|
||||
{
|
||||
eet_close(ef);
|
||||
return edf;
|
||||
edc = _edje_file_coll_open(edf, ef, coll);
|
||||
if (!edc)
|
||||
{
|
||||
*error_ret = EDJE_LOAD_ERROR_UNKNOWN_COLLECTION;
|
||||
}
|
||||
if (edc_ret) *edc_ret = edc;
|
||||
}
|
||||
|
||||
edf->font_hash = NULL;
|
||||
|
||||
edc = _edje_file_coll_open(edf, ef, coll);
|
||||
if (!edc)
|
||||
{
|
||||
*error_ret = EDJE_LOAD_ERROR_UNKNOWN_COLLECTION;
|
||||
}
|
||||
if (edc_ret) *edc_ret = edc;
|
||||
_edje_font_hash (edf);
|
||||
|
||||
eet_close(ef);
|
||||
return edf;
|
||||
|
|
|
@ -592,24 +592,14 @@ _edje_part_recalc_single(Edje *ed,
|
|||
if (!text) text = "";
|
||||
|
||||
/* check if the font is embedded in the .eet */
|
||||
/* FIXME: we should cache this result */
|
||||
if (ed->file->font_dir)
|
||||
if (ed->file->font_hash)
|
||||
{
|
||||
Evas_List *l;
|
||||
|
||||
for (l = ed->file->font_dir->entries; l; l = l->next)
|
||||
{
|
||||
Edje_Font_Directory_Entry *fnt = l->data;
|
||||
Edje_Font_Directory_Entry *fnt = evas_hash_find (ed->file->font_hash, font);
|
||||
|
||||
if ((fnt->entry) && (!strcmp(fnt->entry, font)))
|
||||
{
|
||||
strcpy(buf, "fonts/");
|
||||
strncpy(buf + 6, font, sizeof(buf) - 7);
|
||||
buf[sizeof(buf) - 1] = 0;
|
||||
font = buf;
|
||||
inlined_font = 1;
|
||||
break;
|
||||
}
|
||||
if (fnt)
|
||||
{
|
||||
font = fnt->path;
|
||||
inlined_font = 1;
|
||||
}
|
||||
}
|
||||
if (inlined_font) evas_object_text_font_source_set(ep->object, ed->path);
|
||||
|
|
|
@ -612,7 +612,8 @@ _edje_file_free(Edje_File *edf)
|
|||
fe = edf->font_dir->entries->data;
|
||||
edf->font_dir->entries =
|
||||
evas_list_remove(edf->font_dir->entries, fe);
|
||||
if (fe->entry) evas_stringshare_del(fe->entry);
|
||||
edf->font_hash = evas_hash_del (edf->font_hash, fe->entry, NULL);
|
||||
if (fe->path) evas_stringshare_del(fe->path);
|
||||
free(fe);
|
||||
}
|
||||
free(edf->font_dir);
|
||||
|
|
|
@ -222,6 +222,7 @@ struct _Edje_File
|
|||
int feature_ver;
|
||||
|
||||
Evas_Hash *collection_hash;
|
||||
Evas_Hash *font_hash;
|
||||
Evas_List *collection_cache;
|
||||
};
|
||||
|
||||
|
@ -259,6 +260,7 @@ struct _Edje_Font_Directory
|
|||
struct _Edje_Font_Directory_Entry
|
||||
{
|
||||
char *entry; /* the name of the font */
|
||||
char *path;
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -284,24 +284,14 @@ _edje_text_recalc_apply(Edje *ed, Edje_Real_Part *ep,
|
|||
if (!font) font = "";
|
||||
|
||||
/* check if the font is embedded in the .eet */
|
||||
/* FIXME: we should cache this result */
|
||||
if (ed->file->font_dir)
|
||||
if (ed->file->font_hash)
|
||||
{
|
||||
Evas_List *l;
|
||||
|
||||
for (l = ed->file->font_dir->entries; l; l = l->next)
|
||||
Edje_Font_Directory_Entry *fnt = evas_hash_find (ed->file->font_hash, font);
|
||||
|
||||
if (fnt)
|
||||
{
|
||||
Edje_Font_Directory_Entry *fnt = l->data;
|
||||
|
||||
if ((fnt->entry) && (!strcmp(fnt->entry, font)))
|
||||
{
|
||||
strcpy(font_buf, "fonts/");
|
||||
strncpy(font_buf + 6, font, sizeof(font_buf) - 7);
|
||||
font_buf[sizeof(font_buf) - 1] = 0;
|
||||
font = font_buf;
|
||||
inlined_font = 1;
|
||||
break;
|
||||
}
|
||||
font = fnt->path;
|
||||
inlined_font = 1;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -8,17 +8,14 @@
|
|||
static int
|
||||
_edje_font_is_embedded(Edje_File *edf, char *font)
|
||||
{
|
||||
Evas_List *l;
|
||||
if (!edf->font_hash) return 0;
|
||||
|
||||
Edje_Font_Directory_Entry *fnt = evas_hash_find (edf->font_hash, font);
|
||||
|
||||
if (!edf->font_dir) return 0;
|
||||
for (l = edf->font_dir->entries; l; l = l->next)
|
||||
{
|
||||
Edje_Font_Directory_Entry *fnt = l->data;
|
||||
|
||||
if ((fnt->entry) && (!strcmp(fnt->entry, font)))
|
||||
return 1;
|
||||
}
|
||||
return 1;
|
||||
if (fnt)
|
||||
return 1;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#if 0
|
||||
|
|
Loading…
Reference in New Issue