char *s;
Eina_File *f = NULL;
Edje_Vector_Directory_Entry *vector;
- char buf[100];
+ Eina_Strbuf *buf;
Eina_Bool found = EINA_FALSE;
Ecore_Evas *ee;
Evas *evas;
error_and_abort(ef, "Cannot create buffer engine canvas for image load.");
evas = ecore_evas_get(ee);
vg = evas_object_vg_add(evas);
-
+ buf = eina_strbuf_new();
for (i = 0; i < edje_file->image_dir->vectors_count; i++)
{
if (!beta)
vector = &edje_file->image_dir->vectors[i];
EINA_LIST_FOREACH(img_dirs, ll, s)
{
- sprintf(buf, "%s/%s", s, vector->entry);
-
- f = eina_file_open(buf, EINA_FALSE);
+ eina_strbuf_reset(buf);
+ eina_strbuf_append_printf(buf, "%s" EINA_PATH_SEP_S "%s", s, vector->entry);
+ f = eina_file_open(eina_strbuf_string_get(buf), EINA_FALSE);
if (!f) continue;
eina_file_close(f);
- if (!efl_file_set(vg, buf, NULL))
+ if (!efl_file_set(vg, eina_strbuf_string_get(buf), NULL))
error_and_abort(ef, "Failed to parse svg : %s", vector->entry);
- sprintf(buf, "edje/vectors/%i", vector->id);
-
- if(!efl_file_save(vg, eet_file_get(ef), buf, NULL))
+ eina_strbuf_reset(buf);
+ eina_strbuf_append_printf(buf, "edje/vectors/%i", vector->id);
+ if (!efl_file_save(vg, eet_file_get(ef), eina_strbuf_string_get(buf), NULL))
error_and_abort(ef, "Failed to write data in Eet for svg :%s", vector->entry);
*vector_num += 1;
error_and_abort(ef, "Unable to find the svg :%s", vector->entry);
found = EINA_FALSE;
}
+ eina_strbuf_free(buf);
}
static void
{
int new_svg = -1; //invalid svg
int w, h;
- char src_key[20], dest_key[20];
+ char src_key[32], dest_key[32];
Efl_VG *src_root, *dest_root, *root;
evas_object_geometry_get(ep->object, NULL, NULL, &w, &h);
if( (w == 0) || (h == 0)) return;
- sprintf(src_key, "edje/vectors/%i", chosen_desc->vg.id);
+ snprintf(src_key, sizeof(src_key), "edje/vectors/%i", chosen_desc->vg.id);
if (ep->param2)
{
}
else
{
- sprintf(dest_key, "edje/vectors/%i", new_svg);
+ snprintf(dest_key, sizeof(dest_key), "edje/vectors/%i", new_svg);
efl_file_set(ep->object, ed->file->path, src_key);
src_root = efl_canvas_vg_root_node_get(ep->object);
+ efl_ref(src_root);
efl_file_set(ep->object, ed->file->path, dest_key);
dest_root = efl_canvas_vg_root_node_get(ep->object);
+ efl_ref(dest_root);
+ // FIXME: root = dup(), root.interpolate(dest).
root = evas_vg_container_add(NULL);
evas_vg_node_dup(root, src_root);
if (!evas_vg_node_interpolate(root, src_root, dest_root, pos))
{
- ERR(" Can't interpolate check the svg file \n");
+ ERR("Can't interpolate check the svg file");
}
efl_canvas_vg_root_node_set(ep->object, root);
+ efl_unref(src_root);
+ efl_unref(dest_root);
}
}
EOLIAN static Eina_Bool
_efl_canvas_vg_efl_file_file_set(Eo *obj, Efl_Canvas_Vg_Data *pd, const char *file, const char *key)
{
+ Evas_Cache_Vg_Entry *old_entry;
int w, h;
- Evas_Cache_Vg_Entry *entry;
if (!file) return EINA_FALSE;
+ old_entry = pd->vg_entry;
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));
+ pd->vg_entry = evas_cache_vg_entry_find(file, key, w, h);
+ if (pd->vg_entry != old_entry)
+ evas_object_change(obj, efl_data_scope_get(obj, EFL_CANVAS_OBJECT_CLASS));
+ evas_cache_vg_entry_del(old_entry);
+
return EINA_TRUE;
}
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 tmp = {};
Vg_File_Data *info = &tmp;
if (pd->vg_entry && pd->vg_entry->file)
info->root = pd->root;
info->preserve_aspect = EINA_FALSE;
}
- evas_vg_save_to_file(info, file, key, flags);
- return EINA_TRUE;
+ return evas_vg_save_to_file(info, file, key, flags);
}
static void
{
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,
Efl.Object.constructor;
Efl.Object.finalize;
Efl.Object.destructor;
+ // FIXME: Implement mmap only (also fix cache keys)
Efl.File.file { get; set; }
Efl.File.save;
}
if (!svg_entry) return;
svg_entry->ref--;
+ // FIXME implement delete logic (LRU)
}