MI: sector list get and create state class

This commit is contained in:
junsu choi 2020-03-16 13:33:35 +09:00
parent 4dff49c026
commit 879e7aee6c
7 changed files with 102 additions and 0 deletions

View File

@ -8,6 +8,15 @@ enum @beta Efl.Gfx.Frame_Controller_Loop_Hint {
pingpong = 2 [[Ping-pong bouncing loop: 1->2->3->2->1->2->3->1]]
}
//Temporary
struct @beta Efl.Gfx.Frame_Sector_Data
{
[[ sector data, name, startframe, endframe.]]
name: string;
start_frame: int;
end_frame: int;
}
interface @beta Efl.Gfx.Frame_Controller
{
[[Efl frame controller of frame based animated object interface.]]
@ -117,5 +126,16 @@ interface @beta Efl.Gfx.Frame_Controller
endframe: int; [[ The end frame of sector ]]
}
}
//temporary
@property sector_list {
[[ ]]
set {
}
get {
}
values {
list: list<Efl.Gfx.Frame_Sector_Data>;
}
}
}
}

View File

@ -177,6 +177,37 @@ _efl_ui_mi_controller_efl_file_load(Eo *obj, Efl_Ui_Mi_Controller_Data *pd)
}
_sizing_eval(obj, pd);
//temporary
Eo *vg = efl_key_data_get(pd->anim, "vg_obj");
Eina_List *sector_list = efl_gfx_frame_controller_sector_list_get(vg);
if (sector_list)
{
Eina_List *l;
Efl_Gfx_Frame_Sector_Data *sector;
const char *start_sector = NULL, *end_sector = NULL;
EINA_LIST_FOREACH(sector_list, l, sector)
{
start_sector = end_sector;
end_sector = sector->name;
if (start_sector && end_sector)
{
Eo* state = efl_add(EFL_UI_MI_STATE_CLASS, obj);
//efl_ui_mi_state_controller_set(state, controller);
efl_key_data_set(state, "controller", obj);
efl_ui_mi_state_sector_set(state, start_sector, end_sector);
efl_ui_mi_controller_state_add(obj, state);
}
}
EINA_LIST_FOREACH(sector_list, l, sector)
{
free((char*)sector->name);
free(sector);
}
eina_list_free(sector_list);
}
return 0;
}

View File

@ -706,6 +706,10 @@ _efl_ui_vg_animation_efl_canvas_group_group_add(Eo *obj, Efl_Ui_Vg_Animation_Dat
elm_widget_resize_object_set(obj, vg);
efl_event_callback_add(obj, EFL_GFX_ENTITY_EVENT_HINTS_CHANGED, _size_hint_event_cb, priv);
//temporary
efl_key_data_set(obj, "vg_obj", vg);
//
priv->vg = vg;
priv->playback_speed = 1;
priv->frame_duration = 0;

View File

@ -988,6 +988,37 @@ Eina_Bool _efl_canvas_vg_object_efl_gfx_frame_controller_sector_get(const Eo *ob
return EINA_TRUE;
}
void _efl_canvas_vg_object_efl_gfx_frame_controller_sector_list_set(Eo *obj EINA_UNUSED,
Efl_Canvas_Vg_Object_Data *pd,
Eina_List *sector_list)
{
/* ... ? */
}
Eina_List* _efl_canvas_vg_object_efl_gfx_frame_controller_sector_list_get(const Eo *obj EINA_UNUSED,
Efl_Canvas_Vg_Object_Data *pd)
{
if (!pd->vg_entry) return EINA_FALSE;
Eina_Inarray* markers = evas_cache_vg_anim_sector_list_get(pd->vg_entry);
if (!markers) return NULL;
Eina_List *list = NULL;
Vg_File_Anim_Data_Marker *marker;
EINA_INARRAY_FOREACH(markers, marker)
{
if (marker->name)
{
Efl_Gfx_Frame_Sector_Data *sector = malloc(sizeof(Efl_Gfx_Frame_Sector_Data));
sector->name = strdup(marker->name);
sector->start_frame = marker->startframe;
sector->end_frame = marker->endframe;
list = eina_list_append(list, sector);
}
}
return list;
}
EOLIAN static Eina_Bool
_efl_canvas_vg_object_efl_gfx_frame_controller_frame_set(Eo *eo_obj,
Efl_Canvas_Vg_Object_Data *pd,

View File

@ -97,5 +97,7 @@ class @beta Efl.Canvas.Vg.Object extends Efl.Canvas.Object implements Efl.File,
Efl.Gfx.Frame_Controller.loop_count { get; }
Efl.Gfx.Frame_Controller.frame_duration { get; }
Efl.Gfx.Frame_Controller.sector { set; get; }
//temporary
Efl.Gfx.Frame_Controller.sector_list { set; get; }
}
}

View File

@ -153,6 +153,9 @@ Eina_Bool evas_cache_vg_entry_file_save(Vg_Cache_Entry *vg_ent
double evas_cache_vg_anim_duration_get(const Vg_Cache_Entry *vg_entry);
Eina_Bool evas_cache_vg_anim_sector_set(const Vg_Cache_Entry* vg_entry, const char *name, int startframe, int endframe);
Eina_Bool evas_cache_vg_anim_sector_get(const Vg_Cache_Entry* vg_entry, const char *name, int* startframe, int* endframe);
//Temporary
Eina_Inarray* evas_cache_vg_anim_sector_list_get(const Vg_Cache_Entry* vg_entry);
//
unsigned int evas_cache_vg_anim_frame_count_get(const Vg_Cache_Entry *vg_entry);
Eina_Size2D evas_cache_vg_entry_default_size_get(const Vg_Cache_Entry *vg_entry);
void * evas_cache_vg_surface_key_get(Efl_Canvas_Vg_Node *root, int w, int h, int frame_idx);

View File

@ -461,6 +461,17 @@ evas_cache_vg_anim_sector_get(const Vg_Cache_Entry* vg_entry, const char *name,
return EINA_FALSE;
}
//Temporary
Eina_Inarray*
evas_cache_vg_anim_sector_list_get(const Vg_Cache_Entry* vg_entry)
{
if (!vg_entry) return EINA_FALSE;
if (!vg_entry->vfd->anim_data) return EINA_FALSE;
if (!vg_entry->vfd->anim_data->markers) return EINA_FALSE;
return vg_entry->vfd->anim_data->markers;
}
//
Efl_VG*
evas_cache_vg_tree_get(Vg_Cache_Entry *vg_entry, unsigned int frame_num)
{