jpeg pushed a commit to branch master.

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

commit ad4e133e08cc9e9ab327efed58b5ca36b17156b5
Author: subhransu mohanty <sub.moha...@samsung.com>
Date:   Fri Oct 27 09:15:28 2017 +0900

    evas/vg: Added file handling support in vg canvas.
---
 src/lib/evas/canvas/efl_canvas_vg.c  | 83 +++++++++++++++++++++++++++++++++++-
 src/lib/evas/canvas/efl_canvas_vg.eo |  4 +-
 2 files changed, 85 insertions(+), 2 deletions(-)

diff --git a/src/lib/evas/canvas/efl_canvas_vg.c 
b/src/lib/evas/canvas/efl_canvas_vg.c
index e54875642d..15d0eb21b9 100644
--- a/src/lib/evas/canvas/efl_canvas_vg.c
+++ b/src/lib/evas/canvas/efl_canvas_vg.c
@@ -1,3 +1,5 @@
+#define EVAS_VG_BETA
+
 #include "evas_common_private.h"
 #include "evas_private.h"
 
@@ -133,6 +135,10 @@ evas_object_vg_add(Evas *e)
 EOLIAN static Efl_VG *
 _efl_canvas_vg_root_node_get(Eo *obj EINA_UNUSED, Efl_Canvas_Vg_Data *pd)
 {
+   if (pd->vg_entry)
+     {
+        return evas_cache_vg_tree_get(pd->vg_entry);
+     }
    return pd->vg_tree;
 }
 
@@ -143,6 +149,13 @@ _efl_canvas_vg_root_node_set(Eo *obj EINA_UNUSED, 
Efl_Canvas_Vg_Data *pd, Efl_VG
    if (pd->vg_tree == root_node)
      return;
 
+   // check if a file has been already set
+   if (pd->vg_entry)
+     {
+        evas_cache_vg_entry_del(pd->vg_entry);
+        pd->vg_entry = NULL;
+     }
+
    // detach/free the old root_node
    if (pd->vg_tree)
      efl_parent_set(pd->vg_tree, NULL);
@@ -226,6 +239,62 @@ _efl_canvas_vg_viewbox_align_get(Eo *obj EINA_UNUSED, 
Efl_Canvas_Vg_Data *pd, do
    if (align_y) *align_y = pd->align_y;
 }
 
+// file set and save api implementation
+
+EOLIAN static Eina_Bool
+_efl_canvas_vg_efl_file_file_set(Eo *obj, Efl_Canvas_Vg_Data *pd, const char 
*file, const char *key)
+{
+   int w, h;
+   Evas_Cache_Vg_Entry *entry;
+
+   if (!file) return EINA_FALSE;
+
+   evas_object_geometry_get(obj, NULL, NULL, &w, &h);
+   entry = evas_cache_vg_entry_find(file, key, w, h);
+   if (entry != pd->vg_entry)
+     {
+        if (pd->vg_entry)
+          {
+             evas_cache_vg_entry_del(pd->vg_entry);
+          }
+        pd->vg_entry = entry;
+     }
+   evas_object_change(obj, efl_data_scope_get(obj, EFL_CANVAS_OBJECT_CLASS));
+   return EINA_TRUE;
+}
+
+EOLIAN static void
+_efl_canvas_vg_efl_file_file_get(Eo *obj EINA_UNUSED, Efl_Canvas_Vg_Data *pd, 
const char **file, const char **key)
+{
+   if (pd->vg_entry)
+     {
+        if (file) *file = pd->vg_entry->file;
+        if (key)  *key = pd->vg_entry->key;
+     }
+}
+
+EOLIAN static Eina_Bool
+_efl_canvas_vg_efl_file_save(const Eo *obj, Efl_Canvas_Vg_Data *pd, const char 
*file, const char *key, const char *flags)
+{
+   Vg_File_Data tmp;
+   Vg_File_Data *info = &tmp;
+
+   if (pd->vg_entry && pd->vg_entry->file)
+     {
+        info = evas_cache_vg_file_info(pd->vg_entry->file, pd->vg_entry->key);
+     }
+   else
+     {
+        info->view_box.x = 0;
+        info->view_box.y = 0;
+        evas_object_geometry_get(obj, NULL, NULL, &info->view_box.w, 
&info->view_box.h);
+        info->root = pd->root;
+        info->preserve_aspect = EINA_FALSE;
+     }
+   evas_vg_save_to_file(info, file, key, flags);
+   return EINA_TRUE;
+}
+
 static void
 _cleanup_reference(void *data, const Efl_Event *event EINA_UNUSED)
 {
@@ -327,6 +396,7 @@ _efl_canvas_vg_render(Evas_Object *eo_obj EINA_UNUSED,
                       int x, int y, Eina_Bool do_async)
 {
    Efl_Canvas_Vg_Data *vd = type_private_data;
+   Efl_VG *root = NULL;
    Ector_Surface *ector = evas_ector_get(obj->layer->evas);
 
    obj->layer->evas->engine.func->ector_output_set(engine, surface, output);
@@ -351,6 +421,17 @@ _efl_canvas_vg_render(Evas_Object *eo_obj EINA_UNUSED,
                                                          obj->cur->anti_alias);
    obj->layer->evas->engine.func->context_render_op_set(engine, context,
                                                         obj->cur->render_op);
+   if (vd->vg_entry)
+     {
+        root = evas_cache_vg_tree_get(vd->vg_entry);
+        if (!root) return;
+        _evas_vg_render_pre(root, ector, NULL);
+     }
+   else
+     {
+        root = vd->root;
+     }
+   //obj->layer->evas->engine.func->ector_begin(output, context,
    obj->layer->evas->engine.func->ector_begin(engine, context,
                                               ector, surface,
                                               vd->engine_data,
@@ -358,7 +439,7 @@ _efl_canvas_vg_render(Evas_Object *eo_obj EINA_UNUSED,
                                               do_async);
    _evas_vg_render(obj, vd,
                    engine, output, context, surface,
-                   vd->root, NULL,
+                   root, NULL,
                    do_async);
    obj->layer->evas->engine.func->ector_end(engine, context, ector, surface, 
vd->engine_data, do_async);
 
diff --git a/src/lib/evas/canvas/efl_canvas_vg.eo 
b/src/lib/evas/canvas/efl_canvas_vg.eo
index 27826af620..c9fee6dd10 100644
--- a/src/lib/evas/canvas/efl_canvas_vg.eo
+++ b/src/lib/evas/canvas/efl_canvas_vg.eo
@@ -21,7 +21,7 @@ enum Efl.Canvas.Vg.Fill_Mode
                   dimension of the viewport.]]
 }
 
-class Efl.Canvas.Vg (Efl.Canvas.Object)
+class Efl.Canvas.Vg (Efl.Canvas.Object, Efl.File)
 {
    [[Efl vector graphics class]]
    legacy_prefix: evas_object_vg;
@@ -73,5 +73,7 @@ class Efl.Canvas.Vg (Efl.Canvas.Object)
       Efl.Object.constructor;
       Efl.Object.finalize;
       Efl.Object.destructor;
+      Efl.File.file { get; set; }
+      Efl.File.save;
    }
 }

-- 


Reply via email to