diff options
author | Mike Blumenkrantz <zmike@samsung.com> | 2020-02-26 09:41:14 -0500 |
---|---|---|
committer | Marcel Hollerbach <mail@marcel-hollerbach.de> | 2020-03-06 13:30:49 +0100 |
commit | bab8fcc4425ab8523d39ad445673cb1953e5c25f (patch) | |
tree | 293908c10b89b5a69c6466cd2a9ca47a3cd9bcbd | |
parent | 576229bf6a1cd2b154d5d8770764b8e12778f28b (diff) | |
download | efl-bab8fcc4425ab8523d39ad445673cb1953e5c25f.tar.gz |
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 <mail@marcel-hollerbach.de>
Differential Revision: https://phab.enlightenment.org/D11423
-rw-r--r-- | src/lib/evas/canvas/efl_canvas_image.c | 18 | ||||
-rw-r--r-- | src/lib/evas/canvas/efl_canvas_image.eo | 2 | ||||
-rw-r--r-- | src/lib/evas/canvas/evas_image_eo.c | 2 | ||||
-rw-r--r-- | src/lib/evas/canvas/evas_image_legacy.c | 18 |
4 files changed, 40 insertions, 0 deletions
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) { |