Revert "Revert "canvas vg: fix up a regression error by file_load(),""

This reverts commit fd01eec0f5.
This commit is contained in:
Hermet Park 2019-03-11 21:22:39 +09:00
parent deb0756e60
commit 44145cd1d4
2 changed files with 32 additions and 3 deletions

View File

@ -244,6 +244,37 @@ _efl_canvas_vg_object_viewbox_align_get(const Eo *obj EINA_UNUSED, Efl_Canvas_Vg
if (align_y) *align_y = pd->align_y;
}
EOLIAN static Eina_Error
_efl_canvas_vg_object_efl_file_file_set(Eo *eo_obj, Efl_Canvas_Vg_Object_Data *pd EINA_UNUSED, const char *file)
{
/* Careful: delete previous vg entry.
When a new efl file is set, ex-file will be invalid.
Since vg cache hashes all file entries,
we must remove it from vg cache before we lost file handle. */
if (efl_file_loaded_get(eo_obj))
{
const char *pname = efl_file_get(eo_obj);
int pl = pname ? strlen(pname) : 0;
int cl = file ? strlen(file) : 0;
if ((pl != cl) || strcmp(pname, file))
{
Evas_Object_Protected_Data *obj;
obj = efl_data_scope_get(eo_obj, EFL_CANVAS_OBJECT_CLASS);
evas_cache_vg_entry_del(pd->vg_entry);
evas_object_change(eo_obj, obj);
pd->vg_entry = NULL;
evas_object_change(eo_obj, obj);
}
}
Eina_Error err;
err = efl_file_set(efl_super(eo_obj, MY_CLASS), file);
if (err) return err;
return 0;
}
EOLIAN static Eina_Error
_efl_canvas_vg_object_efl_file_load(Eo *eo_obj, Efl_Canvas_Vg_Object_Data *pd)
{
@ -255,16 +286,13 @@ _efl_canvas_vg_object_efl_file_load(Eo *eo_obj, Efl_Canvas_Vg_Object_Data *pd)
const Eina_File *file = efl_file_mmap_get(eo_obj);
const char *key = efl_file_key_get(eo_obj);
Vg_Cache_Entry *old_entry;
Evas_Object_Protected_Data *obj;
obj = efl_data_scope_get(eo_obj, EFL_CANVAS_OBJECT_CLASS);
old_entry = pd->vg_entry;
pd->vg_entry = evas_cache_vg_entry_create(file, key,
obj->cur->geometry.w,
obj->cur->geometry.h);
evas_object_change(eo_obj, obj);
evas_cache_vg_entry_del(old_entry);
return 0;
}

View File

@ -84,6 +84,7 @@ class @beta Efl.Canvas.Vg.Object extends Efl.Canvas.Object implements Efl.File,
Efl.Object.destructor;
Efl.File.load;
Efl.File.unload;
Efl.File.file { set; }
Efl.File_Save.save;
Efl.Gfx.Frame_Controller.animated { get; }
Efl.Gfx.Frame_Controller.frame { get; set; }