Remove use of evas_hash from evas and use directly eina.
SVN revision: 38066
This commit is contained in:
parent
9bdf013fa4
commit
2b278b9419
|
@ -102,29 +102,10 @@ extern "C" {
|
|||
return 255;
|
||||
}
|
||||
|
||||
static inline void *evas_hash_find(const Eina_Hash *hash, const void *key)
|
||||
{
|
||||
if (!hash) return NULL;
|
||||
return eina_hash_find(hash, key);
|
||||
}
|
||||
|
||||
static inline void *evas_hash_modify(Eina_Hash *hash, const void *key, const void *data)
|
||||
{
|
||||
if (!hash) return NULL;
|
||||
return eina_hash_modify(hash, key, data);
|
||||
}
|
||||
static inline void evas_hash_free(Eina_Hash *hash)
|
||||
{
|
||||
if (!hash) return ;
|
||||
eina_hash_free(hash);
|
||||
}
|
||||
|
||||
static inline void evas_hash_foreach(const Eina_Hash *hash, Eina_Hash_Foreach cb, const void *fdata)
|
||||
{
|
||||
if (!hash) return;
|
||||
eina_hash_foreach(hash, cb, fdata);
|
||||
}
|
||||
|
||||
#define evas_hash_find eina_hash_find
|
||||
#define evas_hash_modify eina_hash_modify
|
||||
#define evas_hash_free eina_hash_free
|
||||
#define evas_hash_foreach eina_hash_foreach
|
||||
#define evas_hash_alloc_error eina_error_get
|
||||
|
||||
/*
|
||||
|
|
|
@ -50,8 +50,8 @@ struct _Evas_Cache_Image
|
|||
|
||||
Eina_Inlist *lru;
|
||||
Eina_Inlist *lru_nodata;
|
||||
Evas_Hash *inactiv;
|
||||
Evas_Hash *activ;
|
||||
Eina_Hash *inactiv;
|
||||
Eina_Hash *activ;
|
||||
void *data;
|
||||
|
||||
int usage;
|
||||
|
@ -87,11 +87,11 @@ struct _Evas_Cache_Engine_Image
|
|||
{
|
||||
Evas_Cache_Engine_Image_Func func;
|
||||
|
||||
Eina_Inlist* dirty;
|
||||
Eina_Inlist* dirty;
|
||||
|
||||
Evas_Hash* activ;
|
||||
Evas_Hash* inactiv;
|
||||
Eina_Inlist* lru;
|
||||
Eina_Hash* activ;
|
||||
Eina_Hash* inactiv;
|
||||
Eina_Inlist* lru;
|
||||
|
||||
Evas_Cache_Image* parent;
|
||||
Evas_Cache_Engine_Image* brother;
|
||||
|
|
|
@ -26,7 +26,7 @@ _evas_cache_engine_image_make_active(Evas_Cache_Engine_Image *cache,
|
|||
eim->flags.cached = 1;
|
||||
eim->flags.activ = 1;
|
||||
eim->flags.dirty = 0;
|
||||
cache->activ = evas_hash_add(cache->activ, key, eim);
|
||||
eina_hash_add(cache->activ, key, eim);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -37,7 +37,7 @@ _evas_cache_engine_image_make_inactive(Evas_Cache_Engine_Image *cache,
|
|||
eim->flags.cached = 1;
|
||||
eim->flags.dirty = 0;
|
||||
eim->flags.activ = 0;
|
||||
cache->inactiv = evas_hash_add(cache->inactiv, key, eim);
|
||||
eina_hash_add(cache->inactiv, key, eim);
|
||||
cache->lru = eina_inlist_prepend(cache->lru, EINA_INLIST_GET(eim));
|
||||
cache->usage += cache->func.mem_size_get(eim);
|
||||
}
|
||||
|
@ -55,12 +55,12 @@ _evas_cache_engine_image_remove_activ(Evas_Cache_Engine_Image *cache,
|
|||
else
|
||||
if (eim->flags.activ)
|
||||
{
|
||||
cache->activ = evas_hash_del(cache->activ, eim->cache_key, eim);
|
||||
eina_hash_del(cache->activ, eim->cache_key, eim);
|
||||
}
|
||||
else
|
||||
{
|
||||
cache->usage -= cache->func.mem_size_get(eim);
|
||||
cache->inactiv = evas_hash_del(cache->inactiv, eim->cache_key, eim);
|
||||
eina_hash_del(cache->inactiv, eim->cache_key, eim);
|
||||
cache->lru = eina_inlist_remove(cache->lru, EINA_INLIST_GET(eim));
|
||||
}
|
||||
eim->flags.cached = 0;
|
||||
|
@ -185,8 +185,8 @@ evas_cache_engine_image_init(const Evas_Cache_Engine_Image_Func *cb, Evas_Cache_
|
|||
|
||||
new->dirty = NULL;
|
||||
new->lru = NULL;
|
||||
new->activ = NULL;
|
||||
new->inactiv = NULL;
|
||||
new->activ = eina_hash_string_superfast_new(NULL);
|
||||
new->inactiv = eina_hash_string_superfast_new(NULL);
|
||||
|
||||
new->parent = parent;
|
||||
parent->references++;
|
||||
|
@ -239,7 +239,7 @@ evas_cache_engine_image_dup(const Evas_Cache_Engine_Image_Func *cb, Evas_Cache_E
|
|||
}
|
||||
|
||||
static Evas_Bool
|
||||
_evas_cache_engine_image_free_cb(__UNUSED__ const Evas_Hash *hash, __UNUSED__ const void *key, void *data, void *fdata)
|
||||
_evas_cache_engine_image_free_cb(__UNUSED__ const Eina_Hash *hash, __UNUSED__ const void *key, void *data, void *fdata)
|
||||
{
|
||||
Eina_List **delete_list = fdata;
|
||||
|
||||
|
@ -272,8 +272,8 @@ evas_cache_engine_image_shutdown(Evas_Cache_Engine_Image *cache)
|
|||
|
||||
if (cache->func.debug) cache->func.debug("shutdown-engine", NULL);
|
||||
|
||||
evas_hash_foreach(cache->inactiv, _evas_cache_engine_image_free_cb, &delete_list);
|
||||
evas_hash_foreach(cache->activ, _evas_cache_engine_image_free_cb, &delete_list);
|
||||
eina_hash_foreach(cache->inactiv, _evas_cache_engine_image_free_cb, &delete_list);
|
||||
eina_hash_foreach(cache->activ, _evas_cache_engine_image_free_cb, &delete_list);
|
||||
|
||||
while (delete_list)
|
||||
{
|
||||
|
@ -281,8 +281,8 @@ evas_cache_engine_image_shutdown(Evas_Cache_Engine_Image *cache)
|
|||
delete_list = eina_list_remove_list(delete_list, delete_list);
|
||||
}
|
||||
|
||||
evas_hash_free(cache->inactiv);
|
||||
evas_hash_free(cache->activ);
|
||||
eina_hash_free(cache->inactiv);
|
||||
eina_hash_free(cache->activ);
|
||||
|
||||
/* This is mad, I am about to destroy image still alive, but we need to prevent leak. */
|
||||
while (cache->dirty)
|
||||
|
@ -325,14 +325,14 @@ evas_cache_engine_image_request(Evas_Cache_Engine_Image *cache,
|
|||
if (!ekey)
|
||||
goto on_error;
|
||||
|
||||
eim = evas_hash_find(cache->activ, ekey);
|
||||
eim = eina_hash_find(cache->activ, ekey);
|
||||
if (eim)
|
||||
{
|
||||
evas_cache_image_drop(im);
|
||||
goto on_ok;
|
||||
}
|
||||
|
||||
eim = evas_hash_find(cache->inactiv, ekey);
|
||||
eim = eina_hash_find(cache->inactiv, ekey);
|
||||
if (eim)
|
||||
{
|
||||
_evas_cache_engine_image_remove_activ(cache, eim);
|
||||
|
|
|
@ -72,7 +72,7 @@ _evas_cache_image_make_activ(Evas_Cache_Image *cache,
|
|||
im->flags.activ = 1;
|
||||
im->flags.lru_nodata = 0;
|
||||
im->flags.dirty = 0;
|
||||
cache->activ = evas_hash_direct_add(cache->activ, key, im);
|
||||
eina_hash_direct_add(cache->activ, key, im);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -90,7 +90,7 @@ _evas_cache_image_make_inactiv(Evas_Cache_Image *cache,
|
|||
im->flags.activ = 0;
|
||||
im->flags.dirty = 0;
|
||||
im->flags.cached = 1;
|
||||
cache->inactiv = evas_hash_direct_add(cache->inactiv, key, im);
|
||||
eina_hash_direct_add(cache->inactiv, key, im);
|
||||
cache->lru = eina_inlist_prepend(cache->lru, EINA_INLIST_GET(im));
|
||||
cache->usage += cache->func.mem_size_get(im);
|
||||
}
|
||||
|
@ -130,7 +130,7 @@ _evas_cache_image_remove_activ(Evas_Cache_Image *cache,
|
|||
{
|
||||
if (ie->flags.activ)
|
||||
{
|
||||
cache->activ = evas_hash_del(cache->activ, ie->cache_key, ie);
|
||||
eina_hash_del(cache->activ, ie->cache_key, ie);
|
||||
_evas_cache_image_remove_lru_nodata(cache, ie);
|
||||
}
|
||||
else
|
||||
|
@ -141,7 +141,7 @@ _evas_cache_image_remove_activ(Evas_Cache_Image *cache,
|
|||
}
|
||||
else
|
||||
{
|
||||
cache->inactiv = evas_hash_del(cache->inactiv, ie->cache_key, ie);
|
||||
eina_hash_del(cache->inactiv, ie->cache_key, ie);
|
||||
cache->lru = eina_inlist_remove(cache->lru, EINA_INLIST_GET(ie));
|
||||
cache->usage -= cache->func.mem_size_get(ie);
|
||||
}
|
||||
|
@ -377,8 +377,8 @@ evas_cache_image_init(const Evas_Cache_Image_Func *cb)
|
|||
new->dirty = NULL;
|
||||
new->lru = NULL;
|
||||
new->lru_nodata = NULL;
|
||||
new->inactiv = NULL;
|
||||
new->activ = NULL;
|
||||
new->inactiv = eina_hash_string_superfast_new(NULL);
|
||||
new->activ = eina_hash_string_superfast_new(NULL);
|
||||
|
||||
new->references = 1;
|
||||
|
||||
|
@ -386,7 +386,7 @@ evas_cache_image_init(const Evas_Cache_Image_Func *cb)
|
|||
}
|
||||
|
||||
static Evas_Bool
|
||||
_evas_cache_image_free_cb(__UNUSED__ const Evas_Hash *hash, __UNUSED__ const void *key, void *data, void *fdata)
|
||||
_evas_cache_image_free_cb(__UNUSED__ const Eina_Hash *hash, __UNUSED__ const void *key, void *data, void *fdata)
|
||||
{
|
||||
Eina_List **delete_list = fdata;
|
||||
|
||||
|
@ -426,7 +426,7 @@ evas_cache_image_shutdown(Evas_Cache_Image *cache)
|
|||
_evas_cache_image_entry_delete(cache, im);
|
||||
}
|
||||
|
||||
evas_hash_foreach(cache->activ, _evas_cache_image_free_cb, &delete_list);
|
||||
eina_hash_foreach(cache->activ, _evas_cache_image_free_cb, &delete_list);
|
||||
|
||||
while (delete_list)
|
||||
{
|
||||
|
@ -434,8 +434,8 @@ evas_cache_image_shutdown(Evas_Cache_Image *cache)
|
|||
delete_list = eina_list_remove_list(delete_list, delete_list);
|
||||
}
|
||||
|
||||
evas_hash_free(cache->activ);
|
||||
evas_hash_free(cache->inactiv);
|
||||
eina_hash_free(cache->activ);
|
||||
eina_hash_free(cache->inactiv);
|
||||
|
||||
free(cache);
|
||||
}
|
||||
|
@ -514,7 +514,7 @@ evas_cache_image_request(Evas_Cache_Image *cache, const char *file, const char *
|
|||
|
||||
hkey[size] = '\0';
|
||||
|
||||
im = evas_hash_find(cache->activ, hkey);
|
||||
im = eina_hash_find(cache->activ, hkey);
|
||||
if (im)
|
||||
{
|
||||
time_t t;
|
||||
|
@ -537,7 +537,7 @@ evas_cache_image_request(Evas_Cache_Image *cache, const char *file, const char *
|
|||
_evas_cache_image_make_dirty(cache, im);
|
||||
}
|
||||
|
||||
im = evas_hash_find(cache->inactiv, hkey);
|
||||
im = eina_hash_find(cache->inactiv, hkey);
|
||||
if (im)
|
||||
{
|
||||
int ok;
|
||||
|
|
|
@ -19,7 +19,7 @@
|
|||
#endif
|
||||
|
||||
/* font dir cache */
|
||||
static Evas_Hash *font_dirs = NULL;
|
||||
static Eina_Hash *font_dirs = NULL;
|
||||
static Eina_List *fonts_cache = NULL;
|
||||
static Eina_List *fonts_zero = NULL;
|
||||
|
||||
|
@ -35,7 +35,7 @@ struct _Fndat
|
|||
};
|
||||
|
||||
/* private methods for font dir cache */
|
||||
static Evas_Bool font_cache_dir_free(const Evas_Hash *hash, const void *key, void *data, void *fdata);
|
||||
static Evas_Bool font_cache_dir_free(const Eina_Hash *hash, const void *key, void *data, void *fdata);
|
||||
static Evas_Font_Dir *object_text_font_cache_dir_update(char *dir, Evas_Font_Dir *fd);
|
||||
static Evas_Font *object_text_font_cache_font_find_x(Evas_Font_Dir *fd, char *font);
|
||||
static Evas_Font *object_text_font_cache_font_find_file(Evas_Font_Dir *fd, char *font);
|
||||
|
@ -50,17 +50,18 @@ evas_font_dir_cache_free(void)
|
|||
{
|
||||
if (!font_dirs) return;
|
||||
|
||||
evas_hash_foreach(font_dirs, font_cache_dir_free, NULL);
|
||||
evas_hash_free(font_dirs);
|
||||
eina_hash_foreach(font_dirs, font_cache_dir_free, NULL);
|
||||
eina_hash_free(font_dirs);
|
||||
font_dirs = NULL;
|
||||
}
|
||||
|
||||
const char *
|
||||
evas_font_dir_cache_find(char *dir, char *font)
|
||||
{
|
||||
Evas_Font_Dir *fd;
|
||||
Evas_Font_Dir *fd = NULL;
|
||||
|
||||
fd = evas_hash_find(font_dirs, dir);
|
||||
if (!font_dirs) font_dirs = eina_hash_string_superfast_new(NULL);
|
||||
else fd = eina_hash_find(font_dirs, dir);
|
||||
fd = object_text_font_cache_dir_update(dir, fd);
|
||||
if (fd)
|
||||
{
|
||||
|
@ -435,11 +436,13 @@ evas_font_dir_available_list(const Evas *evas)
|
|||
if (!evas->font_path)
|
||||
return available;
|
||||
|
||||
if (!font_dirs) font_dirs = eina_hash_string_superfast_new(NULL);
|
||||
|
||||
EINA_LIST_FOREACH(evas->font_path, l, dir)
|
||||
{
|
||||
Evas_Font_Dir *fd;
|
||||
|
||||
fd = evas_hash_find(font_dirs, dir);
|
||||
fd = eina_hash_find(font_dirs, dir);
|
||||
fd = object_text_font_cache_dir_update(dir, fd);
|
||||
if (fd && fd->aliases)
|
||||
{
|
||||
|
@ -465,7 +468,7 @@ evas_font_dir_available_list_free(Eina_List *available)
|
|||
|
||||
/* private stuff */
|
||||
static Eina_Bool
|
||||
font_cache_dir_free(const Evas_Hash *hash, const void *key, void *data, void *fdata)
|
||||
font_cache_dir_free(const Eina_Hash *hash, const void *key, void *data, void *fdata)
|
||||
{
|
||||
object_text_font_cache_dir_del((char *) key, data);
|
||||
return 1;
|
||||
|
@ -483,7 +486,7 @@ object_text_font_cache_dir_update(char *dir, Evas_Font_Dir *fd)
|
|||
if (mt != fd->dir_mod_time)
|
||||
{
|
||||
object_text_font_cache_dir_del(dir, fd);
|
||||
font_dirs = evas_hash_del(font_dirs, dir, fd);
|
||||
eina_hash_del(font_dirs, dir, fd);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -495,7 +498,7 @@ object_text_font_cache_dir_update(char *dir, Evas_Font_Dir *fd)
|
|||
if (mt != fd->fonts_dir_mod_time)
|
||||
{
|
||||
object_text_font_cache_dir_del(dir, fd);
|
||||
font_dirs = evas_hash_del(font_dirs, dir, fd);
|
||||
eina_hash_del(font_dirs, dir, fd);
|
||||
}
|
||||
else
|
||||
{
|
||||
|
@ -508,7 +511,7 @@ object_text_font_cache_dir_update(char *dir, Evas_Font_Dir *fd)
|
|||
if (mt != fd->fonts_alias_mod_time)
|
||||
{
|
||||
object_text_font_cache_dir_del(dir, fd);
|
||||
font_dirs = evas_hash_del(font_dirs, dir, fd);
|
||||
eina_hash_del(font_dirs, dir, fd);
|
||||
}
|
||||
else
|
||||
return fd;
|
||||
|
@ -584,13 +587,13 @@ object_text_font_cache_font_find(Evas_Font_Dir *fd, char *font)
|
|||
{
|
||||
Evas_Font *fn;
|
||||
|
||||
fn = evas_hash_find(fd->lookup, font);
|
||||
fn = eina_hash_find(fd->lookup, font);
|
||||
if (fn) return fn;
|
||||
fn = object_text_font_cache_font_find_alias(fd, font);
|
||||
if (!fn) fn = object_text_font_cache_font_find_x(fd, font);
|
||||
if (!fn) fn = object_text_font_cache_font_find_file(fd, font);
|
||||
if (!fn) return NULL;
|
||||
fd->lookup = evas_hash_add(fd->lookup, font, fn);
|
||||
eina_hash_add(fd->lookup, font, fn);
|
||||
return fn;
|
||||
}
|
||||
|
||||
|
@ -600,10 +603,13 @@ object_text_font_cache_dir_add(char *dir)
|
|||
Evas_Font_Dir *fd;
|
||||
char *tmp, *tmp2;
|
||||
Eina_List *fdir;
|
||||
Evas_Font *fn;
|
||||
|
||||
fd = calloc(1, sizeof(Evas_Font_Dir));
|
||||
if (!fd) return NULL;
|
||||
font_dirs = evas_hash_add(font_dirs, dir, fd);
|
||||
fd->lookup = eina_hash_string_superfast_new(NULL);
|
||||
|
||||
eina_hash_add(font_dirs, dir, fd);
|
||||
|
||||
/* READ fonts.alias, fonts.dir and directory listing */
|
||||
|
||||
|
@ -632,8 +638,6 @@ object_text_font_cache_dir_add(char *dir)
|
|||
num = evas_object_text_font_string_parse((char *)fdef, font_prop);
|
||||
if (num == 14)
|
||||
{
|
||||
Evas_Font *fn;
|
||||
|
||||
fn = calloc(1, sizeof(Evas_Font));
|
||||
if (fn)
|
||||
{
|
||||
|
@ -663,8 +667,6 @@ object_text_font_cache_dir_add(char *dir)
|
|||
tmp = evas_file_path_join(dir, fdir->data);
|
||||
if (tmp)
|
||||
{
|
||||
Evas_Font *fn;
|
||||
|
||||
fn = calloc(1, sizeof(Evas_Font));
|
||||
if (fn)
|
||||
{
|
||||
|
@ -747,7 +749,7 @@ object_text_font_cache_dir_add(char *dir)
|
|||
static void
|
||||
object_text_font_cache_dir_del(char *dir, Evas_Font_Dir *fd)
|
||||
{
|
||||
if (fd->lookup) evas_hash_free(fd->lookup);
|
||||
if (fd->lookup) eina_hash_free(fd->lookup);
|
||||
while (fd->fonts)
|
||||
{
|
||||
Evas_Font *fn;
|
||||
|
|
|
@ -68,6 +68,7 @@ evas_new(void)
|
|||
e->viewport.w = 1;
|
||||
e->viewport.h = 1;
|
||||
e->hinting = EVAS_FONT_HINTING_BYTECODE;
|
||||
e->name_hash = eina_hash_string_superfast_new(NULL);
|
||||
|
||||
eina_array_step_set(&e->delete_objects, 16);
|
||||
eina_array_step_set(&e->active_objects, 16);
|
||||
|
@ -141,7 +142,8 @@ evas_free(Evas *e)
|
|||
evas_font_path_clear(e);
|
||||
e->pointer.object.in = eina_list_free(e->pointer.object.in);
|
||||
|
||||
if (e->name_hash) evas_hash_free(e->name_hash);
|
||||
if (e->name_hash) eina_hash_free(e->name_hash);
|
||||
e->name_hash = NULL;
|
||||
|
||||
while (e->damages)
|
||||
{
|
||||
|
|
|
@ -19,14 +19,14 @@ evas_object_name_set(Evas_Object *obj, const char *name)
|
|||
MAGIC_CHECK_END();
|
||||
if (obj->name)
|
||||
{
|
||||
obj->layer->evas->name_hash = evas_hash_del(obj->layer->evas->name_hash, obj->name, obj);
|
||||
eina_hash_del(obj->layer->evas->name_hash, obj->name, obj);
|
||||
free(obj->name);
|
||||
}
|
||||
if (!name) obj->name = NULL;
|
||||
else
|
||||
{
|
||||
obj->name = strdup(name);
|
||||
obj->layer->evas->name_hash = evas_hash_add(obj->layer->evas->name_hash, obj->name, obj);
|
||||
eina_hash_add(obj->layer->evas->name_hash, obj->name, obj);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -59,7 +59,7 @@ evas_object_name_find(const Evas *e, const char *name)
|
|||
return NULL;
|
||||
MAGIC_CHECK_END();
|
||||
if (!name) return NULL;
|
||||
return (Evas_Object *)evas_hash_find(e->name_hash, name);
|
||||
return (Evas_Object *)eina_hash_find(e->name_hash, name);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -9,7 +9,6 @@ EAPI RGBA_Font_Glyph *
|
|||
evas_common_font_int_cache_glyph_get(RGBA_Font_Int *fi, FT_UInt index)
|
||||
{
|
||||
RGBA_Font_Glyph *fg;
|
||||
char key[6];
|
||||
FT_UInt hindex;
|
||||
FT_Error error;
|
||||
const FT_Int32 hintflags[3] =
|
||||
|
@ -17,14 +16,7 @@ evas_common_font_int_cache_glyph_get(RGBA_Font_Int *fi, FT_UInt index)
|
|||
|
||||
hindex = index + (fi->hinting * 500000000);
|
||||
|
||||
key[0] = ((hindex ) & 0x7f) + 1;
|
||||
key[1] = ((hindex >> 7 ) & 0x7f) + 1;
|
||||
key[2] = ((hindex >> 14 ) & 0x7f) + 1;
|
||||
key[3] = ((hindex >> 21 ) & 0x7f) + 1;
|
||||
key[4] = ((hindex >> 28 ) & 0x0f) + 1;
|
||||
key[5] = 0;
|
||||
|
||||
fg = evas_hash_find(fi->glyphs, key);
|
||||
fg = eina_hash_find(fi->glyphs, &hindex);
|
||||
if (fg) return fg;
|
||||
|
||||
// error = FT_Load_Glyph(fi->src->ft.face, index, FT_LOAD_NO_BITMAP);
|
||||
|
@ -54,7 +46,7 @@ evas_common_font_int_cache_glyph_get(RGBA_Font_Int *fi, FT_UInt index)
|
|||
}
|
||||
fg->glyph_out = (FT_BitmapGlyph)fg->glyph;
|
||||
|
||||
fi->glyphs = evas_hash_add(fi->glyphs, key, fg);
|
||||
eina_hash_add(fi->glyphs, &hindex, fg);
|
||||
return fg;
|
||||
}
|
||||
|
||||
|
|
|
@ -12,8 +12,8 @@ static int font_cache = 0;
|
|||
static Eina_Inlist * fonts_src = NULL;
|
||||
static Eina_Inlist * fonts = NULL;
|
||||
|
||||
static Evas_Bool font_modify_cache_cb(const Evas_Hash *hash, const char *key, void *data, void *fdata);
|
||||
static Evas_Bool font_flush_free_glyph_cb(const Evas_Hash *hash, const char *key, void *data, void *fdata);
|
||||
static Evas_Bool font_modify_cache_cb(const Eina_Hash *hash, const void *key, void *data, void *fdata);
|
||||
static Evas_Bool font_flush_free_glyph_cb(const Eina_Hash *hash, const void *key, void *data, void *fdata);
|
||||
|
||||
EAPI RGBA_Font_Source *
|
||||
evas_common_font_source_memory_load(const char *name, const void *data, int data_size)
|
||||
|
@ -197,10 +197,11 @@ EAPI RGBA_Font_Int *
|
|||
evas_common_font_int_load_init(RGBA_Font_Int *fi)
|
||||
{
|
||||
fi->ft.size = NULL;
|
||||
fi->glyphs = NULL;
|
||||
fi->glyphs = eina_hash_int32_new(NULL);
|
||||
fi->usage = 0;
|
||||
fi->references = 1;
|
||||
fonts = eina_inlist_prepend(fonts, EINA_INLIST_GET(fi));
|
||||
|
||||
return fi;
|
||||
}
|
||||
|
||||
|
@ -363,16 +364,14 @@ EAPI void
|
|||
evas_common_font_free(RGBA_Font *fn)
|
||||
{
|
||||
Eina_List *l;
|
||||
RGBA_Font_Int *fi;
|
||||
|
||||
if (!fn)
|
||||
return;
|
||||
fn->references--;
|
||||
if (fn->references > 0) return;
|
||||
for (l = fn->fonts; l; l = l->next)
|
||||
EINA_LIST_FOREACH(fn->fonts, l, fi)
|
||||
{
|
||||
RGBA_Font_Int *fi;
|
||||
|
||||
fi = l->data;
|
||||
fi->references--;
|
||||
if (fi->references == 0)
|
||||
{
|
||||
|
@ -389,17 +388,13 @@ EAPI void
|
|||
evas_common_font_hinting_set(RGBA_Font *fn, Font_Hint_Flags hinting)
|
||||
{
|
||||
Eina_List *l;
|
||||
RGBA_Font_Int *fi;
|
||||
|
||||
if (!fn)
|
||||
return;
|
||||
fn->hinting = hinting;
|
||||
for (l = fn->fonts; l; l = l->next)
|
||||
{
|
||||
RGBA_Font_Int *fi;
|
||||
|
||||
fi = l->data;
|
||||
fi->hinting = fn->hinting;
|
||||
}
|
||||
EINA_LIST_FOREACH(fn->fonts, l, fi)
|
||||
fi->hinting = fn->hinting;
|
||||
}
|
||||
|
||||
EAPI Evas_Bool
|
||||
|
@ -473,8 +468,8 @@ evas_common_font_memory_hinting_add(RGBA_Font *fn, const char *name, int size, c
|
|||
return fn;
|
||||
}
|
||||
|
||||
static Evas_Bool
|
||||
font_modify_cache_cb(const Evas_Hash *hash, const char *key, void *data, void *fdata)
|
||||
static Eina_Bool
|
||||
font_modify_cache_cb(const Eina_Hash *hash, const void *key, void *data, void *fdata)
|
||||
{
|
||||
int *dir;
|
||||
RGBA_Font_Glyph *fg;
|
||||
|
@ -498,8 +493,8 @@ evas_common_font_int_modify_cache_by(RGBA_Font_Int *fi, int dir)
|
|||
{
|
||||
int sz_hash = 0;
|
||||
|
||||
if (fi->glyphs) sz_hash = evas_hash_size(fi->glyphs);
|
||||
evas_hash_foreach(fi->glyphs, font_modify_cache_cb, &dir);
|
||||
if (fi->glyphs) sz_hash = eina_hash_population(fi->glyphs);
|
||||
eina_hash_foreach(fi->glyphs, font_modify_cache_cb, &dir);
|
||||
font_cache_usage += dir * (sizeof(RGBA_Font) + sz_hash +
|
||||
sizeof(FT_FaceRec) + 16384); /* fudge values */
|
||||
}
|
||||
|
@ -524,8 +519,8 @@ evas_common_font_flush(void)
|
|||
while (font_cache_usage > font_cache) evas_common_font_flush_last();
|
||||
}
|
||||
|
||||
static Evas_Bool
|
||||
font_flush_free_glyph_cb(const Evas_Hash *hash, const char *key, void *data, void *fdata)
|
||||
static Eina_Bool
|
||||
font_flush_free_glyph_cb(const Eina_Hash *hash, const void *key, void *data, void *fdata)
|
||||
{
|
||||
RGBA_Font_Glyph *fg;
|
||||
|
||||
|
@ -560,8 +555,8 @@ evas_common_font_flush_last(void)
|
|||
fonts = eina_inlist_remove(fonts, EINA_INLIST_GET(fi));
|
||||
evas_common_font_int_modify_cache_by(fi, -1);
|
||||
|
||||
evas_hash_foreach(fi->glyphs, font_flush_free_glyph_cb, NULL);
|
||||
evas_hash_free(fi->glyphs);
|
||||
eina_hash_foreach(fi->glyphs, font_flush_free_glyph_cb, NULL);
|
||||
eina_hash_free(fi->glyphs);
|
||||
|
||||
evas_common_font_source_free(fi->src);
|
||||
|
||||
|
|
|
@ -629,7 +629,7 @@ struct _RGBA_Font_Int
|
|||
FT_Size size;
|
||||
} ft;
|
||||
|
||||
Evas_Hash *glyphs;
|
||||
Eina_Hash *glyphs;
|
||||
|
||||
int usage;
|
||||
Font_Hint_Flags hinting;
|
||||
|
|
|
@ -270,7 +270,7 @@ struct _Evas
|
|||
|
||||
Evas_Layer *layers;
|
||||
|
||||
Evas_Hash *name_hash;
|
||||
Eina_Hash *name_hash;
|
||||
|
||||
int output_validity;
|
||||
|
||||
|
@ -479,7 +479,7 @@ struct _Evas_Data_Node
|
|||
|
||||
struct _Evas_Font_Dir
|
||||
{
|
||||
Evas_Hash *lookup;
|
||||
Eina_Hash *lookup;
|
||||
Eina_List *fonts;
|
||||
Eina_List *aliases;
|
||||
DATA64 dir_mod_time;
|
||||
|
|
|
@ -3,20 +3,20 @@
|
|||
#include "evas_engine.h"
|
||||
#include "Evas_Engine_XRender_X11.h"
|
||||
|
||||
static Evas_Hash *_xr_fg_pool = NULL;
|
||||
static Eina_Hash *_xr_fg_pool = NULL;
|
||||
|
||||
XR_Font_Surface *
|
||||
_xre_font_surface_new(Ximage_Info *xinf, RGBA_Font_Glyph *fg)
|
||||
{
|
||||
{
|
||||
XR_Font_Surface *fs;
|
||||
DATA8 *data;
|
||||
int w, h, j;
|
||||
XRenderPictureAttributes att;
|
||||
XRenderPictFormat *fmt;
|
||||
Ximage_Image *xim;
|
||||
Evas_Hash *pool;
|
||||
Eina_Hash *pool;
|
||||
char buf[256], buf2[256];
|
||||
|
||||
|
||||
data = fg->glyph_out->bitmap.buffer;
|
||||
w = fg->glyph_out->bitmap.width;
|
||||
h = fg->glyph_out->bitmap.rows;
|
||||
|
@ -30,11 +30,11 @@ _xre_font_surface_new(Ximage_Info *xinf, RGBA_Font_Glyph *fg)
|
|||
if ((fs->xinf->disp == xinf->disp) && (fs->xinf->root == xinf->root))
|
||||
return fs;
|
||||
snprintf(buf, sizeof(buf), "@%p@/@%lx@", fs->xinf->disp, fs->xinf->root);
|
||||
pool = evas_hash_find(_xr_fg_pool, buf);
|
||||
pool = eina_hash_find(_xr_fg_pool, buf);
|
||||
if (pool)
|
||||
{
|
||||
snprintf(buf, sizeof(buf), "%p", fg);
|
||||
fs = evas_hash_find(pool, buf);
|
||||
fs = eina_hash_find(pool, buf);
|
||||
if (fs) return fs;
|
||||
}
|
||||
}
|
||||
|
@ -47,12 +47,14 @@ _xre_font_surface_new(Ximage_Info *xinf, RGBA_Font_Glyph *fg)
|
|||
fs->xinf->references++;
|
||||
fs->w = w;
|
||||
fs->h = h;
|
||||
|
||||
|
||||
snprintf(buf, sizeof(buf), "@%p@/@%lx@", fs->xinf->disp, fs->xinf->root);
|
||||
pool = evas_hash_find(_xr_fg_pool, buf);
|
||||
pool = eina_hash_find(_xr_fg_pool, buf);
|
||||
if (!pool) pool = eina_hash_string_superfast_new(NULL);
|
||||
snprintf(buf2, sizeof(buf2), "%p", fg);
|
||||
pool = evas_hash_add(pool, buf2, fs);
|
||||
_xr_fg_pool = evas_hash_add(_xr_fg_pool, buf, pool);
|
||||
eina_hash_add(pool, buf2, fs);
|
||||
if (!_xr_fg_pool) _xr_fg_pool = eina_hash_string_superfast_new(NULL);
|
||||
eina_hash_add(_xr_fg_pool, buf, pool);
|
||||
|
||||
/* FIXME: maybe use fmt4? */
|
||||
fmt = xinf->fmt8;
|
||||
|
@ -60,9 +62,9 @@ _xre_font_surface_new(Ximage_Info *xinf, RGBA_Font_Glyph *fg)
|
|||
att.dither = 0;
|
||||
att.component_alpha = 0;
|
||||
att.repeat = 0;
|
||||
fs->pic = XRenderCreatePicture(xinf->disp, fs->draw,fmt,
|
||||
fs->pic = XRenderCreatePicture(xinf->disp, fs->draw,fmt,
|
||||
CPRepeat | CPDither | CPComponentAlpha, &att);
|
||||
|
||||
|
||||
/* FIXME: handle if fmt->depth != 8 */
|
||||
xim = _xr_image_new(fs->xinf, w, h,fmt->depth);
|
||||
if ((fg->glyph_out->bitmap.num_grays == 256) &&
|
||||
|
@ -127,17 +129,18 @@ _xre_font_surface_new(Ximage_Info *xinf, RGBA_Font_Glyph *fg)
|
|||
}
|
||||
|
||||
static Evas_Bool
|
||||
_xre_font_pool_cb(const Evas_Hash *hash, const char *key, void *data, void *fdata)
|
||||
_xre_font_pool_cb(const Eina_Hash *hash, const char *key, void *data, void *fdata)
|
||||
{
|
||||
Evas_Hash *pool;
|
||||
Eina_Hash *pool;
|
||||
XR_Font_Surface *fs;
|
||||
char buf[256];
|
||||
|
||||
|
||||
fs = fdata;
|
||||
pool = data;
|
||||
snprintf(buf, sizeof(buf), "@%p@/@%lx@", fs->xinf->disp, fs->xinf->root);
|
||||
pool = evas_hash_del(pool, buf, fs);
|
||||
hash = evas_hash_modify(hash, key, pool);
|
||||
eina_hash_del(pool, buf, fs);
|
||||
if (!hash) hash = eina_hash_string_superfast_new(NULL);
|
||||
eina_hash_modify(hash, key, pool);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -145,7 +148,7 @@ void
|
|||
_xre_font_surface_free(XR_Font_Surface *fs)
|
||||
{
|
||||
if (!fs) return;
|
||||
evas_hash_foreach(_xr_fg_pool, _xre_font_pool_cb, fs);
|
||||
eina_hash_foreach(_xr_fg_pool, _xre_font_pool_cb, fs);
|
||||
XFreePixmap(fs->xinf->disp, fs->draw);
|
||||
XRenderFreePicture(fs->xinf->disp, fs->pic);
|
||||
_xr_image_info_free(fs->xinf);
|
||||
|
|
|
@ -3,58 +3,60 @@
|
|||
#include "evas_engine.h"
|
||||
#include "Evas_Engine_XRender_X11.h"
|
||||
|
||||
static Evas_Hash *_xr_image_hash = NULL;
|
||||
static Eina_Hash *_xr_image_hash = NULL;
|
||||
static int _xr_image_cache_size = 0;
|
||||
static int _xr_image_cache_usage = 0;
|
||||
static Eina_List *_xr_image_cache = NULL;
|
||||
static Evas_Hash *_xr_image_dirty_hash = NULL;
|
||||
static Eina_Hash *_xr_image_dirty_hash = NULL;
|
||||
|
||||
static void
|
||||
__xre_image_dirty_hash_add(XR_Image *im)
|
||||
{
|
||||
char buf[64];
|
||||
|
||||
|
||||
if (!im->data) return;
|
||||
snprintf(buf, sizeof(buf), "%p", im->data);
|
||||
_xr_image_dirty_hash = evas_hash_add(_xr_image_dirty_hash, buf, im);
|
||||
if (!_xr_image_dirty_hash) _xr_image_dirty_hash = eina_hash_string_superfast_new(NULL);
|
||||
eina_hash_add(_xr_image_dirty_hash, buf, im);
|
||||
}
|
||||
|
||||
static void
|
||||
__xre_image_dirty_hash_del(XR_Image *im)
|
||||
{
|
||||
char buf[64];
|
||||
|
||||
|
||||
if (!im->data) return;
|
||||
snprintf(buf, sizeof(buf), "%p", im->data);
|
||||
_xr_image_dirty_hash = evas_hash_del(_xr_image_dirty_hash, buf, im);
|
||||
eina_hash_del(_xr_image_dirty_hash, buf, im);
|
||||
}
|
||||
|
||||
static XR_Image *
|
||||
__xre_image_dirty_hash_find(void *data)
|
||||
{
|
||||
char buf[64];
|
||||
|
||||
|
||||
snprintf(buf, sizeof(buf), "%p", data);
|
||||
return evas_hash_find(_xr_image_dirty_hash, buf);
|
||||
return eina_hash_find(_xr_image_dirty_hash, buf);
|
||||
}
|
||||
|
||||
static XR_Image *
|
||||
__xre_image_find(char *fkey)
|
||||
{
|
||||
XR_Image *im;
|
||||
|
||||
im = evas_hash_find(_xr_image_hash, fkey);
|
||||
|
||||
im = eina_hash_find(_xr_image_hash, fkey);
|
||||
if (!im)
|
||||
{
|
||||
Eina_List *l;
|
||||
|
||||
|
||||
for (l = _xr_image_cache; l; l = l->next)
|
||||
{
|
||||
im = l->data;
|
||||
if (!strcmp(im->fkey, fkey))
|
||||
{
|
||||
_xr_image_cache = eina_list_remove_list(_xr_image_cache, l);
|
||||
_xr_image_hash = evas_hash_add(_xr_image_hash, im->fkey, im);
|
||||
if (!_xr_image_hash) _xr_image_hash = eina_hash_string_superfast_new(NULL);
|
||||
eina_hash_add(_xr_image_hash, im->fkey, im);
|
||||
_xr_image_cache_usage -= (im->w * im->h * 4);
|
||||
break;
|
||||
}
|
||||
|
@ -91,7 +93,7 @@ _xre_image_load(Ximage_Info *xinf, const char *file, const char *key, Evas_Image
|
|||
{
|
||||
return im;
|
||||
}
|
||||
|
||||
|
||||
im = calloc(1, sizeof(XR_Image));
|
||||
if (!im) return NULL;
|
||||
im->im = evas_common_load_image_from_file(file, key, lo);
|
||||
|
@ -113,7 +115,8 @@ _xre_image_load(Ximage_Info *xinf, const char *file, const char *key, Evas_Image
|
|||
if (im->im->info.comment) im->comment = eina_stringshare_add(im->im->info.comment);
|
||||
// if (im->im->info.format == 1) im->format = eina_stringshare_add("png");
|
||||
if (im->im->cache_entry.flags.alpha) im->alpha = 1;
|
||||
_xr_image_hash = evas_hash_direct_add(_xr_image_hash, im->fkey, im);
|
||||
if (!_xr_image_hash) _xr_image_hash = eina_hash_string_superfast_new(NULL);
|
||||
eina_hash_direct_add(_xr_image_hash, im->fkey, im);
|
||||
return im;
|
||||
}
|
||||
|
||||
|
@ -170,7 +173,7 @@ _xre_image_new_from_copied_data(Ximage_Info *xinf, int w, int h, void *data, int
|
|||
if (data)
|
||||
{
|
||||
Gfx_Func_Copy func;
|
||||
|
||||
|
||||
func = evas_common_draw_func_copy_get(w * h, 0);
|
||||
if (func) func(data, im->data, w * h);
|
||||
evas_common_cpu_end_opt();
|
||||
|
@ -254,7 +257,7 @@ _xre_image_free(XR_Image *im)
|
|||
if (!im->dirty)
|
||||
{
|
||||
if (im->fkey)
|
||||
_xr_image_hash = evas_hash_del(_xr_image_hash, im->fkey, im);
|
||||
eina_hash_del(_xr_image_hash, im->fkey, im);
|
||||
_xr_image_cache = eina_list_prepend(_xr_image_cache, im);
|
||||
_xr_image_cache_usage += (im->w * im->h * 4);
|
||||
_xre_image_cache_set(_xr_image_cache_size);
|
||||
|
@ -282,7 +285,7 @@ _xre_image_dirty(XR_Image *im)
|
|||
{
|
||||
if (im->dirty) return;
|
||||
if (im->fkey)
|
||||
_xr_image_hash = evas_hash_del(_xr_image_hash, im->fkey, im);
|
||||
eina_hash_del(_xr_image_hash, im->fkey, im);
|
||||
im->dirty = 1;
|
||||
__xre_image_dirty_hash_add(im);
|
||||
}
|
||||
|
@ -463,7 +466,7 @@ _xre_image_data_put(XR_Image *im, void *data)
|
|||
if (!im->dirty)
|
||||
{
|
||||
if (im->fkey)
|
||||
_xr_image_hash = evas_hash_del(_xr_image_hash, im->fkey, im);
|
||||
eina_hash_del(_xr_image_hash, im->fkey, im);
|
||||
im->dirty = 1;
|
||||
}
|
||||
if (im->updates)
|
||||
|
|
|
@ -3,21 +3,21 @@
|
|||
#include "evas_engine.h"
|
||||
#include "Evas_Engine_XRender_Xcb.h"
|
||||
|
||||
static Evas_Hash *_xr_fg_pool = NULL;
|
||||
static Eina_Hash *_xr_fg_pool = NULL;
|
||||
|
||||
XR_Font_Surface *
|
||||
_xre_font_surface_new(Xcb_Image_Info *xcbinf, RGBA_Font_Glyph *fg)
|
||||
{
|
||||
{
|
||||
char buf[256];
|
||||
char buf2[256];
|
||||
XR_Font_Surface *fs;
|
||||
DATA8 *data;
|
||||
int w, h, j;
|
||||
Xcb_Image_Image *xcim;
|
||||
Evas_Hash *pool;
|
||||
Eina_Hash *pool;
|
||||
uint32_t mask;
|
||||
uint32_t values[3];
|
||||
|
||||
|
||||
data = fg->glyph_out->bitmap.buffer;
|
||||
w = fg->glyph_out->bitmap.width;
|
||||
h = fg->glyph_out->bitmap.rows;
|
||||
|
@ -32,11 +32,11 @@ _xre_font_surface_new(Xcb_Image_Info *xcbinf, RGBA_Font_Glyph *fg)
|
|||
(fs->xcbinf->root == xcbinf->root))
|
||||
return fs;
|
||||
snprintf(buf, sizeof(buf), "@%p@/@%x@", fs->xcbinf->conn, fs->xcbinf->root);
|
||||
pool = evas_hash_find(_xr_fg_pool, buf);
|
||||
pool = eina_hash_find(_xr_fg_pool, buf);
|
||||
if (pool)
|
||||
{
|
||||
snprintf(buf, sizeof(buf), "%p", fg);
|
||||
fs = evas_hash_find(pool, buf);
|
||||
fs = eina_hash_find(pool, buf);
|
||||
if (fs) return fs;
|
||||
}
|
||||
}
|
||||
|
@ -49,12 +49,14 @@ _xre_font_surface_new(Xcb_Image_Info *xcbinf, RGBA_Font_Glyph *fg)
|
|||
fs->xcbinf->references++;
|
||||
fs->w = w;
|
||||
fs->h = h;
|
||||
|
||||
|
||||
snprintf(buf, sizeof(buf), "@%p@/@%x@", fs->xcbinf->conn, fs->xcbinf->root);
|
||||
pool = evas_hash_find(_xr_fg_pool, buf);
|
||||
pool = eina_hash_find(_xr_fg_pool, buf);
|
||||
if (!pool) pool = eina_hash_string_superfast_new(NULL);
|
||||
snprintf(buf2, sizeof(buf2), "%p", fg);
|
||||
pool = evas_hash_add(pool, buf2, fs);
|
||||
_xr_fg_pool = evas_hash_add(_xr_fg_pool, buf, pool);
|
||||
eina_hash_add(pool, buf2, fs);
|
||||
if (!_xr_fg_pool) _xr_fg_pool = eina_hash_string_superfast_new(NULL);
|
||||
eina_hash_add(_xr_fg_pool, buf, pool);
|
||||
|
||||
fs->draw = xcb_generate_id(xcbinf->conn);
|
||||
xcb_create_pixmap(xcbinf->conn, xcbinf->fmt8->depth, fs->draw, xcbinf->root, w, h);
|
||||
|
@ -129,17 +131,18 @@ _xre_font_surface_new(Xcb_Image_Info *xcbinf, RGBA_Font_Glyph *fg)
|
|||
}
|
||||
|
||||
static Evas_Bool
|
||||
_xre_font_pool_cb(const Evas_Hash *hash, const char *key, void *data, void *fdata)
|
||||
_xre_font_pool_cb(const Eina_Hash *hash, const char *key, void *data, void *fdata)
|
||||
{
|
||||
char buf[256];
|
||||
Evas_Hash *pool;
|
||||
Eina_Hash *pool;
|
||||
XR_Font_Surface *fs;
|
||||
|
||||
|
||||
fs = fdata;
|
||||
pool = data;
|
||||
snprintf(buf, sizeof(buf), "@%p@/@%x@", fs->xcbinf->conn, fs->xcbinf->root);
|
||||
pool = evas_hash_del(pool, buf, fs);
|
||||
hash = evas_hash_modify(hash, key, pool);
|
||||
eina_hash_del(pool, buf, fs);
|
||||
if (!hash) hash = eina_hash_string_superfast_new(NULL);
|
||||
eina_hash_modify(hash, key, pool);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -147,7 +150,7 @@ void
|
|||
_xre_font_surface_free(XR_Font_Surface *fs)
|
||||
{
|
||||
if (!fs) return;
|
||||
evas_hash_foreach(_xr_fg_pool, _xre_font_pool_cb, fs);
|
||||
eina_hash_foreach(_xr_fg_pool, _xre_font_pool_cb, fs);
|
||||
xcb_free_pixmap(fs->xcbinf->conn, fs->draw);
|
||||
xcb_render_free_picture(fs->xcbinf->conn, fs->pic);
|
||||
_xr_image_info_free(fs->xcbinf);
|
||||
|
|
|
@ -3,11 +3,11 @@
|
|||
#include "evas_engine.h"
|
||||
#include "Evas_Engine_XRender_Xcb.h"
|
||||
|
||||
static Evas_Hash *_xr_image_hash = NULL;
|
||||
static Eina_Hash *_xr_image_hash = NULL;
|
||||
static int _xr_image_cache_size = 0;
|
||||
static int _xr_image_cache_usage = 0;
|
||||
static Eina_List *_xr_image_cache = NULL;
|
||||
static Evas_Hash *_xr_image_dirty_hash = NULL;
|
||||
static Eina_Hash *_xr_image_dirty_hash = NULL;
|
||||
|
||||
static void
|
||||
__xre_image_dirty_hash_add(XR_Image *im)
|
||||
|
@ -16,7 +16,8 @@ __xre_image_dirty_hash_add(XR_Image *im)
|
|||
|
||||
if (!im->data) return;
|
||||
snprintf(buf, sizeof(buf), "%p", im->data);
|
||||
_xr_image_dirty_hash = evas_hash_add(_xr_image_dirty_hash, buf, im);
|
||||
if (!_xr_image_dirty_hash) _xr_image_dirty_hash = eina_hash_string_superfast_new(NULL);
|
||||
eina_hash_add(_xr_image_dirty_hash, buf, im);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -26,7 +27,7 @@ __xre_image_dirty_hash_del(XR_Image *im)
|
|||
|
||||
if (!im->data) return;
|
||||
snprintf(buf, sizeof(buf), "%p", im->data);
|
||||
_xr_image_dirty_hash = evas_hash_del(_xr_image_dirty_hash, buf, im);
|
||||
eina_hash_del(_xr_image_dirty_hash, buf, im);
|
||||
}
|
||||
|
||||
static XR_Image *
|
||||
|
@ -35,7 +36,7 @@ __xre_image_dirty_hash_find(void *data)
|
|||
char buf[64];
|
||||
|
||||
snprintf(buf, sizeof(buf), "%p", data);
|
||||
return evas_hash_find(_xr_image_dirty_hash, buf);
|
||||
return eina_hash_find(_xr_image_dirty_hash, buf);
|
||||
}
|
||||
|
||||
static XR_Image *
|
||||
|
@ -43,7 +44,7 @@ __xre_image_find(char *fkey)
|
|||
{
|
||||
XR_Image *im;
|
||||
|
||||
im = evas_hash_find(_xr_image_hash, fkey);
|
||||
im = eina_hash_find(_xr_image_hash, fkey);
|
||||
if (!im)
|
||||
{
|
||||
Eina_List *l;
|
||||
|
@ -53,7 +54,8 @@ __xre_image_find(char *fkey)
|
|||
if (!strcmp(im->fkey, fkey))
|
||||
{
|
||||
_xr_image_cache = eina_list_remove_list(_xr_image_cache, l);
|
||||
_xr_image_hash = evas_hash_add(_xr_image_hash, im->fkey, im);
|
||||
if (!_xr_image_hash) _xr_image_hash = eina_hash_string_superfast_new(NULL);
|
||||
eina_hash_add(_xr_image_hash, im->fkey, im);
|
||||
_xr_image_cache_usage -= (im->w * im->h * 4);
|
||||
break;
|
||||
}
|
||||
|
@ -111,7 +113,8 @@ _xre_image_load(Xcb_Image_Info *xcbinf, const char *file, const char *key, Evas_
|
|||
if (im->im->info.comment) im->comment = (char *)eina_stringshare_add(im->im->info.comment);
|
||||
/* if (im->im->info.format == 1) im->format = eina_stringshare_add("png"); */
|
||||
if (im->im->cache_entry.flags.alpha) im->alpha = 1;
|
||||
_xr_image_hash = evas_hash_direct_add(_xr_image_hash, im->fkey, im);
|
||||
if (!_xr_image_hash) _xr_image_hash = eina_hash_string_superfast_new(NULL);
|
||||
_xr_image_hash = eina_hash_direct_add(_xr_image_hash, im->fkey, im);
|
||||
return im;
|
||||
}
|
||||
|
||||
|
@ -217,7 +220,7 @@ _xre_image_free(XR_Image *im)
|
|||
if (!im->dirty)
|
||||
{
|
||||
if (im->fkey)
|
||||
_xr_image_hash = evas_hash_del(_xr_image_hash, im->fkey, im);
|
||||
eina_hash_del(_xr_image_hash, im->fkey, im);
|
||||
_xr_image_cache = eina_list_prepend(_xr_image_cache, im);
|
||||
_xr_image_cache_usage += (im->w * im->h * 4);
|
||||
_xre_image_cache_set(_xr_image_cache_size);
|
||||
|
@ -245,7 +248,7 @@ _xre_image_dirty(XR_Image *im)
|
|||
{
|
||||
if (im->dirty) return;
|
||||
if (im->fkey)
|
||||
_xr_image_hash = evas_hash_del(_xr_image_hash, im->fkey, im);
|
||||
eina_hash_del(_xr_image_hash, im->fkey, im);
|
||||
im->dirty = 1;
|
||||
__xre_image_dirty_hash_add(im);
|
||||
}
|
||||
|
@ -441,7 +444,7 @@ _xre_image_data_put(XR_Image *im, void *data)
|
|||
if (!im->dirty)
|
||||
{
|
||||
if (im->fkey)
|
||||
_xr_image_hash = evas_hash_del(_xr_image_hash, im->fkey, im);
|
||||
eina_hash_del(_xr_image_hash, im->fkey, im);
|
||||
im->dirty = 1;
|
||||
}
|
||||
if (im->updates)
|
||||
|
|
Loading…
Reference in New Issue