summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMike Blumenkrantz <zmike@samsung.com>2020-02-26 09:38:13 -0500
committerMarcel Hollerbach <mail@marcel-hollerbach.de>2020-03-06 13:30:46 +0100
commit576229bf6a1cd2b154d5d8770764b8e12778f28b (patch)
tree34179a7bf08144b6b0a7a55b1f86813c490d1da5
parent92a03628c898adb43982f1a30ae3e45f6eaf0d2a (diff)
downloadefl-576229bf6a1cd2b154d5d8770764b8e12778f28b.tar.gz
evas: set mmap data to image data after preload with skip_head enabled
this is a bit ugly, but in the case where skip_head is used it's important to propagate the resulting Eina_File back up to the image object's data for use in other api functions Reviewed-by: Marcel Hollerbach <mail@marcel-hollerbach.de> Differential Revision: https://phab.enlightenment.org/D11422
-rw-r--r--src/lib/evas/cache/evas_cache_image.c2
-rw-r--r--src/lib/evas/canvas/efl_canvas_image.c13
-rw-r--r--src/lib/evas/include/evas_private.h2
3 files changed, 16 insertions, 1 deletions
diff --git a/src/lib/evas/cache/evas_cache_image.c b/src/lib/evas/cache/evas_cache_image.c
index b76d58944b..275a59a1d1 100644
--- a/src/lib/evas/cache/evas_cache_image.c
+++ b/src/lib/evas/cache/evas_cache_image.c
@@ -386,6 +386,8 @@ _evas_cache_image_preloaded_notify(Image_Entry *ie)
ie->targets = (Evas_Cache_Target *)
eina_inlist_remove(EINA_INLIST_GET(ie->targets),
EINA_INLIST_GET(ie->targets));
+ if (ie->load_opts.skip_head && !tmp->delete_me && !tmp->preload_cancel)
+ _evas_image_preload_update((void*)tmp->target, ie->f);
if (!tmp->delete_me && tmp->preloaded_cb)
tmp->preloaded_cb(tmp->preloaded_data);
if (!tmp->preload_cancel)
diff --git a/src/lib/evas/canvas/efl_canvas_image.c b/src/lib/evas/canvas/efl_canvas_image.c
index 679fbdca05..4021f32fc1 100644
--- a/src/lib/evas/canvas/efl_canvas_image.c
+++ b/src/lib/evas/canvas/efl_canvas_image.c
@@ -19,6 +19,19 @@ _evas_image_file_unload(Eo *eo_obj)
_evas_image_done_set(eo_obj, obj, o);
o->load_error = EFL_GFX_IMAGE_LOAD_ERROR_NONE;
}
+
+void
+_evas_image_preload_update(Eo *eo_obj, Eina_File *f)
+{
+ Evas_Image_Data *o = efl_data_scope_get(eo_obj, EFL_CANVAS_IMAGE_INTERNAL_CLASS);
+ if (o->cur->f) return;
+ EINA_COW_IMAGE_STATE_WRITE_BEGIN(o, cur)
+ {
+ cur->f = eina_file_dup(f);
+ }
+ EINA_COW_IMAGE_STATE_WRITE_END(o, cur)
+}
+
Eina_Bool
_evas_image_file_load(Eo *eo_obj, Evas_Image_Data *o)
{
diff --git a/src/lib/evas/include/evas_private.h b/src/lib/evas/include/evas_private.h
index 01bac6f607..f0f209d3e3 100644
--- a/src/lib/evas/include/evas_private.h
+++ b/src/lib/evas/include/evas_private.h
@@ -1891,7 +1891,7 @@ EAPI const char *_evas_module_libdir_get(void);
const char *_evas_module_datadir_get(void);
EAPI Eina_List *_evas_canvas_image_data_unset(Evas *eo_e);
EAPI void _evas_canvas_image_data_regenerate(Eina_List *list);
-
+void _evas_image_preload_update(Eo *eo_obj, Eina_File *f);
Eina_Bool evas_render_mapped(Evas_Public_Data *e, Evas_Object *obj,
Evas_Object_Protected_Data *source_pd,
void *context, void *output, void *surface,