diff --git a/src/lib/evas/canvas/efl_canvas_vg_object.c b/src/lib/evas/canvas/efl_canvas_vg_object.c index 4acc75f58b..57b9a1bbd6 100644 --- a/src/lib/evas/canvas/efl_canvas_vg_object.c +++ b/src/lib/evas/canvas/efl_canvas_vg_object.c @@ -276,32 +276,25 @@ _efl_canvas_vg_object_efl_file_file_set(Eo *obj, Efl_Canvas_Vg_Object_Data *pd, EOLIAN static void _efl_canvas_vg_object_efl_file_file_get(const Eo *obj EINA_UNUSED, Efl_Canvas_Vg_Object_Data *pd, const char **file, const char **key) { + if (file) *file = NULL; + if (key) *key = NULL; + if (pd->vg_entry) { if (file) *file = pd->vg_entry->file; - if (key) *key = pd->vg_entry->key; + if (key) *key = pd->vg_entry->key; } } EOLIAN static Eina_Bool _efl_canvas_vg_object_efl_file_save(const Eo *obj, Efl_Canvas_Vg_Object_Data *pd, const char *file, const char *key, const char *flags) { - Vg_File_Data tmp = {}; - Vg_File_Data *info = &tmp; + if (pd->vg_entry) + return evas_cache_vg_entry_file_save(pd->vg_entry, file, key, flags); - 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; - } - return evas_vg_save_to_file(info, file, key, flags); + Evas_Coord w, h; + evas_object_geometry_get(obj, NULL, NULL, &w, &h); + return evas_cache_vg_file_save(pd->root, w, h, file, key, flags); } static void diff --git a/src/lib/evas/canvas/evas_vg_private.h b/src/lib/evas/canvas/evas_vg_private.h index 4652f9ac52..5852b1b9b1 100644 --- a/src/lib/evas/canvas/evas_vg_private.h +++ b/src/lib/evas/canvas/evas_vg_private.h @@ -103,10 +103,9 @@ void evas_cache_vg_shutdown(void); Vg_Cache_Entry* evas_cache_vg_entry_find(const char *file, const char *key, int w, int h); Efl_VG* evas_cache_vg_tree_get(Vg_Cache_Entry *svg_entry); void evas_cache_vg_entry_del(Vg_Cache_Entry *svg_entry); -Vg_File_Data * evas_cache_vg_file_info(const char *file, const char *key); - -Eina_Bool evas_vg_save_to_file(Vg_File_Data *evg_data, const char *file, const char *key, const char *flags); - +Vg_File_Data * evas_cache_vg_file_open(const char *file, const char *key); +Eina_Bool evas_cache_vg_file_save(Efl_VG *root, int w, int h, const char *file, const char *key, const char *flags); +Eina_Bool evas_cache_vg_entry_file_save(Vg_Cache_Entry *vg_entry, const char *file, const char *key, const char *flags); void efl_canvas_vg_node_root_set(Efl_VG *node, Efl_VG *vg_obj); static inline Efl_Canvas_Vg_Node_Data * diff --git a/src/lib/evas/vg/evas_vg_cache.c b/src/lib/evas/vg/evas_vg_cache.c index 863f6660cd..49c8fd3ee4 100644 --- a/src/lib/evas/vg/evas_vg_cache.c +++ b/src/lib/evas/vg/evas_vg_cache.c @@ -153,8 +153,8 @@ _evas_cache_vg_entry_free_cb(void *data) free(vg_entry); } -Eina_Bool -evas_vg_save_to_file(Vg_File_Data *vfd, const char *file, const char *key, const char *flags) +static Eina_Bool +_vg_file_save(Vg_File_Data *vfd, const char *file, const char *key, const char *flags) { Evas_Module *em; Evas_Vg_Save_Func *saver; @@ -227,7 +227,7 @@ evas_cache_vg_shutdown(void) } Vg_File_Data * -evas_cache_vg_file_info(const char *file, const char *key) +evas_cache_vg_file_open(const char *file, const char *key) { Vg_File_Data *vfd; Eina_Strbuf *hash_key; @@ -300,7 +300,7 @@ _evas_cache_vg_tree_update(Vg_Cache_Entry *vg_entry) return; } - vfd = evas_cache_vg_file_info(vg_entry->file, vg_entry->key); + vfd = evas_cache_vg_file_open(vg_entry->file, vg_entry->key); vg_entry->root = _evas_vg_dup_vg_tree(vfd, vg_entry->w, vg_entry->h); eina_stringshare_del(vg_entry->file); @@ -363,3 +363,30 @@ evas_cache_vg_entry_del(Vg_Cache_Entry *vg_entry) // FIXME implement delete logic (LRU) } +Eina_Bool +evas_cache_vg_entry_file_save(Vg_Cache_Entry *vg_entry, const char *file, const char *key, + const char *flags) +{ + Vg_File_Data *vfd = + evas_cache_vg_file_open(vg_entry->file, vg_entry->key); + + if (!vfd) return EINA_FALSE; + + return _vg_file_save(vfd, file, key, flags); +} + +Eina_Bool +evas_cache_vg_file_save(Efl_VG *root, int w, int h, const char *file, const char *key, + const char *flags) +{ + Vg_File_Data vfd = {}; + + if (!root) return EINA_FALSE; + + vfd.view_box.x = w; + vfd.view_box.y = h; + vfd.root = root; + vfd.preserve_aspect = EINA_FALSE; + + return _vg_file_save(&vfd, file, key, flags); +}