cedric pushed a commit to branch master.

http://git.enlightenment.org/core/efl.git/commit/?id=a6dcaa0f9a6f8873ccb23db75b7e3065ddb06f03

commit a6dcaa0f9a6f8873ccb23db75b7e3065ddb06f03
Author: Cedric Bail <[email protected]>
Date:   Wed Oct 4 21:32:22 2017 -0700

    evas: remove use of engine image_load from Evas.Canvas3D.Texture.
---
 src/lib/edje/edje_calc.c                     |  2 +-
 src/lib/evas/canvas/evas_canvas3d_texture.c  | 23 ++++++++++++++++++-----
 src/lib/evas/canvas/evas_canvas3d_texture.eo | 18 +++++-------------
 src/lib/evas/include/evas_private.h          |  3 +++
 4 files changed, 27 insertions(+), 19 deletions(-)

diff --git a/src/lib/edje/edje_calc.c b/src/lib/edje/edje_calc.c
index 3902ac4c2e..fc71bad49a 100644
--- a/src/lib/edje/edje_calc.c
+++ b/src/lib/edje/edje_calc.c
@@ -5456,7 +5456,7 @@ _edje_part_recalc(Edje *ed, Edje_Real_Part *ep, int 
flags, Edje_Calc_Params *sta
                           proxy = 
ed->file->image_dir->entries[pd_mesh_node->mesh_node.texture.id].entry;
                           if (proxy)
                             {
-                               evas_canvas3d_texture_file_set(texture, 
eina_stringshare_add(proxy), NULL);
+                               efl_file_mmap_set(texture, ed->file->f, proxy);
                                evas_canvas3d_texture_filter_set(texture, 
pd_mesh_node->mesh_node.texture.filter1, 
pd_mesh_node->mesh_node.texture.filter2);
                                evas_canvas3d_texture_wrap_set(texture, 
pd_mesh_node->mesh_node.texture.wrap1, pd_mesh_node->mesh_node.texture.wrap2);
                             }
diff --git a/src/lib/evas/canvas/evas_canvas3d_texture.c 
b/src/lib/evas/canvas/evas_canvas3d_texture.c
index 6471ddafbd..00cef85524 100644
--- a/src/lib/evas/canvas/evas_canvas3d_texture.c
+++ b/src/lib/evas/canvas/evas_canvas3d_texture.c
@@ -332,8 +332,9 @@ _evas_canvas3d_texture_efl_object_constructor(Eo *obj, 
Evas_Canvas3D_Texture_Dat
 }
 
 EOLIAN static void
-_evas_canvas3d_texture_efl_object_destructor(Eo *obj, 
Evas_Canvas3D_Texture_Data *pd  EINA_UNUSED)
+_evas_canvas3d_texture_efl_object_destructor(Eo *obj, 
Evas_Canvas3D_Texture_Data *pd)
 {
+   eina_file_close(pd->f);
    _texture_fini(obj);
    efl_destructor(efl_super(obj, MY_CLASS));
 }
@@ -372,7 +373,14 @@ _evas_canvas3d_texture_data_set(Eo *obj, 
Evas_Canvas3D_Texture_Data *pd,
 }
 
 EOLIAN static void
-_evas_canvas3d_texture_file_set(Eo *obj, Evas_Canvas3D_Texture_Data *pd, const 
char *file, const char *key)
+_evas_canvas3d_texture_efl_file_mmap_get(Eo *obj EINA_UNUSED, 
Evas_Canvas3D_Texture_Data *pd, const Eina_File **f, const char **key)
+{
+   if (f) *f = pd->f;
+   if (key) *key = pd->key;
+}
+
+EOLIAN static Eina_Bool
+_evas_canvas3d_texture_efl_file_mmap_set(Eo *obj, Evas_Canvas3D_Texture_Data 
*pd, const Eina_File *f, const char *key)
 {
 
    Evas_Image_Load_Opts lo;
@@ -387,12 +395,12 @@ _evas_canvas3d_texture_file_set(Eo *obj, 
Evas_Canvas3D_Texture_Data *pd, const c
      pd->engine_data = e->engine.func->texture_new(_evas_engine_context(e), 
pd->atlas_enable);
 
    memset(&lo, 0x0, sizeof(Evas_Image_Load_Opts));
-   image = e->engine.func->image_load(_evas_engine_context(e),
-                                      file, key, &load_error, &lo);
+   image = e->engine.func->image_mmap(_evas_engine_context(e),
+                                      (Eina_File *) f, key, &load_error, &lo);
    if (!image)
      {
         ERR("Can't load image from file");
-        return;
+        return EINA_FALSE;
      }
 
    if (e->engine.func->texture_image_set)
@@ -401,7 +409,12 @@ _evas_canvas3d_texture_file_set(Eo *obj, 
Evas_Canvas3D_Texture_Data *pd, const c
                                        image);
 
    e->engine.func->image_free(_evas_engine_context(e), image);
+
+   pd->f = eina_file_dup(f);
+   pd->key = eina_stringshare_add(key);
    evas_canvas3d_object_change(obj, EVAS_CANVAS3D_STATE_TEXTURE_DATA, NULL);
+
+   return EINA_TRUE;
 }
 
 EAPI void
diff --git a/src/lib/evas/canvas/evas_canvas3d_texture.eo 
b/src/lib/evas/canvas/evas_canvas3d_texture.eo
index 67cf5dcaba..c6ab979257 100644
--- a/src/lib/evas/canvas/evas_canvas3d_texture.eo
+++ b/src/lib/evas/canvas/evas_canvas3d_texture.eo
@@ -1,6 +1,6 @@
 type @extern Evas_Colorspace: int; [[Evas colorspace type]] /* FIXME: Need to 
get emile migrated. */
 
-class Evas.Canvas3D.Texture (Evas.Canvas3D.Object)
+class Evas.Canvas3D.Texture (Evas.Canvas3D.Object, Efl.File)
 {
    [[Evas 3d canvas texture class]]
    data : Evas_Canvas3D_Texture_Data;
@@ -46,7 +46,7 @@ class Evas.Canvas3D.Texture (Evas.Canvas3D.Object)
       data_set {
          [[Set the data of the given texture.
 
-           See also @.file_set.
+           See also @Efl.File.file.set.
          ]]
 
          params {
@@ -57,15 +57,6 @@ class Evas.Canvas3D.Texture (Evas.Canvas3D.Object)
          }
       }
 
-      file_set {
-         [[Set the data of the given texture from file.]]
-
-         params {
-            @in file: string; [[Path to the image file.]]
-            @in key: string; [[Key in the image file.]]
-         }
-      }
-
       source_set {
          [[Set the data of the given texture from an evas object.
 
@@ -89,7 +80,7 @@ class Evas.Canvas3D.Texture (Evas.Canvas3D.Object)
            has source object. Otherwise, the color format of the data will
            be returned.
 
-           See also @.data_set, @.file_set, @.source_set.
+           See also @.data_set, @Efl.File.file.set, @.source_set.
          ]]
          return: Evas_Colorspace; [[Color format of the given texture]]
       }
@@ -101,7 +92,7 @@ class Evas.Canvas3D.Texture (Evas.Canvas3D.Object)
            will be returned. Otherwise, the size of the data (or image file)
            will be returned.
 
-           See also @.data_set, @.file_set, @.source_set.
+           See also @.data_set, @Efl.File.file.set, @.source_set.
          ]]
          params {
             @out w: int; [[Pointer to receive the width of the texture size.]]
@@ -164,5 +155,6 @@ class Evas.Canvas3D.Texture (Evas.Canvas3D.Object)
       Efl.Object.destructor;
       Evas.Canvas3D.Object.update_notify;
       Evas.Canvas3D.Object.change_notify;
+      Efl.File.mmap { set; get; }
    }
 }
diff --git a/src/lib/evas/include/evas_private.h 
b/src/lib/evas/include/evas_private.h
index 71fd28f2cd..f3552a0bd6 100644
--- a/src/lib/evas/include/evas_private.h
+++ b/src/lib/evas/include/evas_private.h
@@ -433,6 +433,9 @@ struct _Evas_Canvas3D_Texture
    /* Engine-side object. */
    void             *engine_data;
 
+   Eina_File        *f;
+   const char       *key;
+
    /*Use atlases, @EINA_TRUE by default*/
    Eina_Bool        atlas_enable :1;
 };

-- 


Reply via email to