diff --git a/src/lib/evas/cache2/evas_cache2.c b/src/lib/evas/cache2/evas_cache2.c index 9d5d186ed6..46cca8e169 100644 --- a/src/lib/evas/cache2/evas_cache2.c +++ b/src/lib/evas/cache2/evas_cache2.c @@ -891,6 +891,12 @@ evas_cache2_image_scale_load(Image_Entry *im, int src_x, int src_y, int src_w, i return im; } +EAPI void +evas_cache2_image_ref(Image_Entry *im) +{ + im->references++; +} + EAPI void evas_cache2_image_close(Image_Entry *im) { diff --git a/src/lib/evas/cache2/evas_cache2.h b/src/lib/evas/cache2/evas_cache2.h index 8fc300aca7..5fddd1708e 100644 --- a/src/lib/evas/cache2/evas_cache2.h +++ b/src/lib/evas/cache2/evas_cache2.h @@ -61,6 +61,7 @@ EAPI void evas_cache2_shutdown(Evas_Cache2 *cache); EAPI Image_Entry * evas_cache2_image_open(Evas_Cache2 *cache, const char *path, const char *key, RGBA_Image_Loadopts *lo, int *error); EAPI Image_Entry *evas_cache2_image_scale_load(Image_Entry *im, int src_x, int src_y, int src_w, int src_h, int dst_w, int dst_h, int smooth); EAPI int evas_cache2_image_open_wait(Image_Entry *im); +EAPI void evas_cache2_image_ref(Image_Entry *im); EAPI void evas_cache2_image_close(Image_Entry *im); EAPI int evas_cache2_image_load_data(Image_Entry *ie); EAPI void evas_cache2_image_unload_data(Image_Entry *im); diff --git a/src/modules/evas/engines/software_generic/evas_engine.c b/src/modules/evas/engines/software_generic/evas_engine.c index b4d1bfc8ce..c91ba6c91a 100644 --- a/src/modules/evas/engines/software_generic/evas_engine.c +++ b/src/modules/evas/engines/software_generic/evas_engine.c @@ -1127,7 +1127,12 @@ eng_image_data_preload_cancel(void *data EINA_UNUSED, void *image, const void *t static void _drop_cache_ref(void *target, Evas_Callback_Type type EINA_UNUSED, void *event_info EINA_UNUSED) { - evas_cache_image_drop((Image_Entry *)target); +#ifdef EVAS_CSERVE2 + if (evas_cserve2_use_get()) + evas_cache2_image_close((Image_Entry *)target); + else +#endif + evas_cache_image_drop((Image_Entry *)target); } static void @@ -1163,7 +1168,12 @@ _image_draw_thread_cmd(RGBA_Image *src, RGBA_Image *dst, RGBA_Draw_Context *dc, if (!(RECTS_INTERSECT(dst_region_x, dst_region_y, dst_region_w, dst_region_h, 0, 0, dst->cache_entry.w, dst->cache_entry.h))) return; - evas_cache_image_ref((Image_Entry *)src); +#ifdef EVAS_CSERVE2 + if (evas_cserve2_use_get()) + evas_cache2_image_ref((Image_Entry *)src); + else +#endif + evas_cache_image_ref((Image_Entry *)src); cr.image = src; cr.surface = dst; @@ -1452,7 +1462,12 @@ _map_draw_thread_cmd(RGBA_Image *src, RGBA_Image *dst, RGBA_Draw_Context *dc, RG Evas_Thread_Command_Map cm; int clip_x, clip_y, clip_w, clip_h; - evas_cache_image_ref((Image_Entry *)src); +#ifdef EVAS_CSERVE2 + if (evas_cserve2_use_get()) + evas_cache2_image_ref((Image_Entry *)src); + else +#endif + evas_cache_image_ref((Image_Entry *)src); cm.image = src; memcpy(&cm.image_ctx, dc, sizeof(*dc));