From bab8fcc4425ab8523d39ad445673cb1953e5c25f Mon Sep 17 00:00:00 2001 From: Mike Blumenkrantz Date: Wed, 26 Feb 2020 09:41:14 -0500 Subject: [PATCH] evas/image: implement efl.file loading and mmap getters to correctly handle skip_head when this property is set, the mixin implementation of efl_file_load() is never called, which means the internal loaded flag (and related data) is not set, and so the values for these properties must instead be returned directly from the image data Reviewed-by: Marcel Hollerbach Differential Revision: https://phab.enlightenment.org/D11423 --- src/lib/evas/canvas/efl_canvas_image.c | 18 ++++++++++++++++++ src/lib/evas/canvas/efl_canvas_image.eo | 2 ++ src/lib/evas/canvas/evas_image_eo.c | 2 ++ src/lib/evas/canvas/evas_image_legacy.c | 18 ++++++++++++++++++ 4 files changed, 40 insertions(+) diff --git a/src/lib/evas/canvas/efl_canvas_image.c b/src/lib/evas/canvas/efl_canvas_image.c index 4021f32fc1..d45efcbf73 100644 --- a/src/lib/evas/canvas/efl_canvas_image.c +++ b/src/lib/evas/canvas/efl_canvas_image.c @@ -68,6 +68,24 @@ _evas_image_file_load(Eo *eo_obj, Evas_Image_Data *o) return EINA_TRUE; } +EOLIAN static Eina_Bool +_efl_canvas_image_efl_file_loaded_get(const Eo *eo_obj, void *_pd EINA_UNUSED) +{ + Evas_Image_Data *o = efl_data_scope_get(eo_obj, EFL_CANVAS_IMAGE_INTERNAL_CLASS); + if (!o->skip_head) + return efl_file_loaded_get(efl_super(eo_obj, MY_CLASS)); + return !!o->cur->f; +} + +EOLIAN static const Eina_File * +_efl_canvas_image_efl_file_mmap_get(const Eo *eo_obj, void *_pd EINA_UNUSED) +{ + Evas_Image_Data *o = efl_data_scope_get(eo_obj, EFL_CANVAS_IMAGE_INTERNAL_CLASS); + if (!o->skip_head) + return efl_file_mmap_get(efl_super(eo_obj, MY_CLASS)); + return o->cur->f; +} + EOLIAN static Eina_Error _efl_canvas_image_efl_file_load(Eo *eo_obj, void *_pd EINA_UNUSED) { diff --git a/src/lib/evas/canvas/efl_canvas_image.eo b/src/lib/evas/canvas/efl_canvas_image.eo index 72e1894f61..230b84a9bc 100644 --- a/src/lib/evas/canvas/efl_canvas_image.eo +++ b/src/lib/evas/canvas/efl_canvas_image.eo @@ -16,6 +16,8 @@ class @beta Efl.Canvas.Image extends Efl.Canvas.Image_Internal implements Efl.Gfx.Buffer.buffer_size { get; } Efl.Gfx.Buffer.buffer_map; Efl.Gfx.Buffer.buffer_unmap; + Efl.File.loaded { get; } + Efl.File.mmap { get; } Efl.File.load; Efl.File.unload; Efl.Gfx.Frame_Controller.animated { get; } diff --git a/src/lib/evas/canvas/evas_image_eo.c b/src/lib/evas/canvas/evas_image_eo.c index 2d4f39ff39..4eeac15542 100644 --- a/src/lib/evas/canvas/evas_image_eo.c +++ b/src/lib/evas/canvas/evas_image_eo.c @@ -14,6 +14,8 @@ _evas_image_class_initializer(Efl_Class *klass) #endif EFL_OPS_DEFINE(ops, + EFL_OBJECT_OP_FUNC(efl_file_loaded_get, _evas_image_efl_file_loaded_get), + EFL_OBJECT_OP_FUNC(efl_file_mmap_get, _evas_image_efl_file_mmap_get), EFL_OBJECT_OP_FUNC(efl_file_load, _evas_image_efl_file_load), EFL_OBJECT_OP_FUNC(efl_file_unload, _evas_image_efl_file_unload), EVAS_IMAGE_EXTRA_OPS diff --git a/src/lib/evas/canvas/evas_image_legacy.c b/src/lib/evas/canvas/evas_image_legacy.c index 4e66bf2070..2702b31f5e 100644 --- a/src/lib/evas/canvas/evas_image_legacy.c +++ b/src/lib/evas/canvas/evas_image_legacy.c @@ -1281,6 +1281,24 @@ evas_object_image_alpha_mask_set(Evas_Object *eo_obj EINA_UNUSED, Eina_Bool isma EVAS_IMAGE_LEGACY_API(eo_obj); } +EOLIAN static Eina_Bool +_evas_image_efl_file_loaded_get(const Eo *eo_obj, void *_pd EINA_UNUSED) +{ + Evas_Image_Data *o = efl_data_scope_get(eo_obj, EFL_CANVAS_IMAGE_INTERNAL_CLASS); + if (!o->skip_head) + return efl_file_loaded_get(efl_super(eo_obj, EVAS_IMAGE_CLASS)); + return !!o->cur->f; +} + +EOLIAN static const Eina_File * +_evas_image_efl_file_mmap_get(const Eo *eo_obj, void *_pd EINA_UNUSED) +{ + Evas_Image_Data *o = efl_data_scope_get(eo_obj, EFL_CANVAS_IMAGE_INTERNAL_CLASS); + if (!o->skip_head) + return efl_file_mmap_get(efl_super(eo_obj, EVAS_IMAGE_CLASS)); + return o->cur->f; +} + EOLIAN static Eina_Error _evas_image_efl_file_load(Eo *obj, void *pd EINA_UNUSED) {