evas vg: code refactoring.

capsulate vector file data from efl canvas vg.

hide vector file data structure, capsulate it,
cut off the dependency by vector object.
yet it has evas_cache_entry interface.
This commit is contained in:
Hermet Park 2018-12-07 17:37:58 +09:00
parent 093e32a0fb
commit 072f5a2fa0
3 changed files with 43 additions and 24 deletions

View File

@ -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

View File

@ -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 *

View File

@ -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);
}