From ddaa5d1e6e76e76cf836182ee392f8b464a243d4 Mon Sep 17 00:00:00 2001 From: JunsuChoi Date: Tue, 12 Nov 2019 14:28:44 +0900 Subject: [PATCH] vg_loader: Get markers information form json data. Summary: If json data has marker information, it is stored in vg file data. Test Plan: N/A Reviewers: Hermet, smohanty, kimcinoo Reviewed By: Hermet Subscribers: cedric, #reviewers, #committers Tags: #efl Differential Revision: https://phab.enlightenment.org/D10504 --- src/lib/evas/include/evas_private.h | 9 +++++++ .../evas/vg_loaders/json/evas_vg_load_json.c | 24 +++++++++++++++++++ 2 files changed, 33 insertions(+) diff --git a/src/lib/evas/include/evas_private.h b/src/lib/evas/include/evas_private.h index 2081c3dc85..838174a3f2 100644 --- a/src/lib/evas/include/evas_private.h +++ b/src/lib/evas/include/evas_private.h @@ -141,6 +141,7 @@ typedef struct _Evas_Canvas3D_File_Eet Evas_Canvas3D_File_Eet; typedef struct _Vg_File_Data Vg_File_Data; typedef struct _Vg_File_Anim_Data Vg_File_Anim_Data; +typedef struct _Vg_File_Anim_Data_Marker Vg_File_Anim_Data_Marker; struct _Evas_Canvas3D_Vec2_Eet { @@ -1533,11 +1534,19 @@ struct _Evas_Image_Save_Func int (*image_save) (RGBA_Image *im, const char *file, const char *key, int quality, int compress, const char *encoding); }; +struct _Vg_File_Anim_Data_Marker +{ + Eina_Stringshare *name; + int startframe; + int endframe; +}; + struct _Vg_File_Anim_Data { unsigned int frame_num; //current frame number unsigned int frame_cnt; //total frame count float duration; //animation duration + Eina_Inarray *markers; //array of Vg_File_Anim_Data_Marker }; struct _Vg_File_Data diff --git a/src/modules/evas/vg_loaders/json/evas_vg_load_json.c b/src/modules/evas/vg_loaders/json/evas_vg_load_json.c index fbcfa9c83a..e7f2754dd9 100644 --- a/src/modules/evas/vg_loaders/json/evas_vg_load_json.c +++ b/src/modules/evas/vg_loaders/json/evas_vg_load_json.c @@ -20,6 +20,13 @@ evas_vg_load_file_close_json(Vg_File_Data *vfd) Lottie_Animation *lot_anim = (Lottie_Animation *) vfd->loader_data; lottie_animation_destroy(lot_anim); + if (vfd->anim_data->markers) + { + Vg_File_Anim_Data_Marker *marker; + EINA_INARRAY_FOREACH(vfd->anim_data->markers, marker) + if (marker->name) eina_stringshare_del(marker->name); + eina_inarray_free(vfd->anim_data->markers); + } if (vfd->anim_data) free(vfd->anim_data); if (vfd->root) efl_unref(vfd->root); free(vfd); @@ -70,6 +77,23 @@ evas_vg_load_file_open_json(Eina_File *file, if (!vfd->anim_data) goto err; vfd->anim_data->duration = lottie_animation_get_duration(lot_anim); vfd->anim_data->frame_cnt = frame_cnt; + + // marker information + const LOTMarkerList *markerlist = lottie_animation_get_markerlist(lot_anim); + if (markerlist && markerlist->size > 0) + { + Vg_File_Anim_Data_Marker *marker; + int i = 0; + vfd->anim_data->markers = eina_inarray_new(sizeof(Vg_File_Anim_Data_Marker), 0); + eina_inarray_resize(vfd->anim_data->markers, markerlist->size); + EINA_INARRAY_FOREACH(vfd->anim_data->markers, marker) + { + marker->name = eina_stringshare_add(markerlist->ptr[i].name); + marker->startframe = markerlist->ptr[i].startframe; + marker->endframe = markerlist->ptr[i].endframe; + i++; + } + } } //default size