forked from enlightenment/efl
Some more stuff in externals, little api change there, may change some more later.
SVN revision: 43379
This commit is contained in:
parent
00d1eab6d8
commit
2ba79e04af
|
@ -250,8 +250,13 @@ typedef struct _Edje_External_Param Edje_External_Param;
|
|||
struct _Edje_External_Type
|
||||
{
|
||||
Evas_Object *(*add) (void *data, Evas *evas, Evas_Object *parent, const Eina_List *params);
|
||||
void (*state_set) (void *data, Evas_Object *obj, const Eina_List *from_params, const Eina_List *to_params, float pos);
|
||||
void (*state_set) (void *data, Evas_Object *obj, const void *from_params, const void *to_params, float pos);
|
||||
void (*signal_emit) (void *data, Evas_Object *obj, const char *emission, const char *source);
|
||||
void *(*params_parse) (void *data, const Eina_List *params);
|
||||
void (*params_free) (void *params);
|
||||
|
||||
Evas_Object *(*icon_get) (void *data, Evas *e);
|
||||
const char *(*label_get) (void *data);
|
||||
|
||||
void *data;
|
||||
};
|
||||
|
@ -400,7 +405,11 @@ extern "C" {
|
|||
/* edje_external.c */
|
||||
EAPI Eina_Bool edje_external_type_register(const char *type_name, Edje_External_Type *type_info);
|
||||
EAPI Eina_Bool edje_external_type_unregister(const char *type_name);
|
||||
EAPI Eina_Iterator *edje_external_iterator_get(void);
|
||||
EAPI Edje_External_Param *edje_external_param_find(const Eina_List *params, const char *key);
|
||||
EAPI Eina_Bool edje_external_param_int_get(const Eina_List *params, const char *key, int *ret);
|
||||
EAPI Eina_Bool edje_external_param_double_get(const Eina_List *params, const char *key, double *ret);
|
||||
EAPI Eina_Bool edje_external_param_string_get(const Eina_List *params, const char *key, const char **ret);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
|
|
|
@ -110,10 +110,15 @@ _edje_part_description_apply(Edje *ed, Edje_Real_Part *ep, const char *d1, doubl
|
|||
{
|
||||
if (!ep->param2)
|
||||
ep->param2 = eina_mempool_malloc(_edje_real_part_state_mp, sizeof (Edje_Real_Part_State));
|
||||
else if (ep->part->type == EDJE_PART_TYPE_EXTERNAL)
|
||||
_edje_external_parsed_params_free(ep->swallowed_object, ep->param2->external_params);
|
||||
ep->param2->external_params = NULL;
|
||||
}
|
||||
else
|
||||
if (ep->param2)
|
||||
{
|
||||
if (ep->part->type == EDJE_PART_TYPE_EXTERNAL)
|
||||
_edje_external_parsed_params_free(ep->swallowed_object, ep->param2->external_params);
|
||||
eina_mempool_free(_edje_real_part_state_mp, ep->param2);
|
||||
ep->param2 = NULL;
|
||||
}
|
||||
|
@ -133,6 +138,13 @@ _edje_part_description_apply(Edje *ed, Edje_Real_Part *ep, const char *d1, doubl
|
|||
if (ep->param1.description->rel2.id_y >= 0)
|
||||
ep->param1.rel2_to_y = ed->table_parts[ep->param1.description->rel2.id_y % ed->table_parts_size];
|
||||
|
||||
if (ep->part->type == EDJE_PART_TYPE_EXTERNAL)
|
||||
{
|
||||
if (ep->param1.external_params)
|
||||
_edje_external_parsed_params_free(ep->swallowed_object, ep->param1.external_params);
|
||||
ep->param1.external_params = _edje_external_params_parse(ep->swallowed_object, ep->param1.description->external_params);
|
||||
}
|
||||
|
||||
if (ep->param2)
|
||||
{
|
||||
ep->param2->description = epd2;
|
||||
|
@ -150,6 +162,9 @@ _edje_part_description_apply(Edje *ed, Edje_Real_Part *ep, const char *d1, doubl
|
|||
ep->param2->rel2_to_x = ed->table_parts[ep->param2->description->rel2.id_x % ed->table_parts_size];
|
||||
if (ep->param2->description->rel2.id_y >= 0)
|
||||
ep->param2->rel2_to_y = ed->table_parts[ep->param2->description->rel2.id_y % ed->table_parts_size];
|
||||
|
||||
if (ep->part->type == EDJE_PART_TYPE_EXTERNAL)
|
||||
ep->param2->external_params = _edje_external_params_parse(ep->swallowed_object, ep->param2->description->external_params);
|
||||
}
|
||||
|
||||
if (ep->description_pos != 0.0)
|
||||
|
|
|
@ -24,6 +24,12 @@ edje_external_type_unregister(const char *type_name)
|
|||
return eina_hash_del_by_key(type_registry, type_name);
|
||||
}
|
||||
|
||||
EAPI Eina_Iterator *
|
||||
edje_external_iterator_get(void)
|
||||
{
|
||||
return eina_hash_iterator_tuple_new(type_registry);
|
||||
}
|
||||
|
||||
EAPI Edje_External_Param *
|
||||
edje_external_param_find(const Eina_List *params, const char *key)
|
||||
{
|
||||
|
@ -172,6 +178,7 @@ _edje_external_recalc_apply(Edje *ed, Edje_Real_Part *ep,
|
|||
Edje_Part_Description *chosen_desc)
|
||||
{
|
||||
Edje_External_Type *type;
|
||||
void *params1, *params2 = NULL;
|
||||
if (!ep->swallowed_object) return;
|
||||
|
||||
type = evas_object_data_get(ep->swallowed_object, "Edje_External_Type");
|
||||
|
@ -180,8 +187,38 @@ _edje_external_recalc_apply(Edje *ed, Edje_Real_Part *ep,
|
|||
|
||||
if (!type->state_set) return;
|
||||
|
||||
params1 = ep->param1.external_params ? ep->param1.external_params : ep->param1.description->external_params;
|
||||
if (ep->param2 && ep->param2->description)
|
||||
params2 = ep->param2->external_params ? ep->param2->external_params : ep->param2->description->external_params;
|
||||
|
||||
type->state_set(type->data, ep->swallowed_object,
|
||||
ep->param1.description->external_params,
|
||||
(ep->param2 && ep->param2->description ? ep->param2->description->external_params : NULL),
|
||||
ep->description_pos);
|
||||
params1, params2, ep->description_pos);
|
||||
}
|
||||
|
||||
void *
|
||||
_edje_external_params_parse(Evas_Object *obj, const Eina_List *params)
|
||||
{
|
||||
Edje_External_Type *type;
|
||||
|
||||
type = evas_object_data_get(obj, "Edje_External_Type");
|
||||
if (!type) return NULL;
|
||||
|
||||
if (!type->params_parse) return NULL;
|
||||
|
||||
return type->params_parse(type->data, params);
|
||||
}
|
||||
|
||||
void
|
||||
_edje_external_parsed_params_free(Evas_Object *obj, void *params)
|
||||
{
|
||||
Edje_External_Type *type;
|
||||
|
||||
if (!params) return;
|
||||
|
||||
type = evas_object_data_get(obj, "Edje_External_Type");
|
||||
if (!type) return;
|
||||
|
||||
if (!type->params_free) return;
|
||||
|
||||
type->params_free(params);
|
||||
}
|
||||
|
|
|
@ -600,7 +600,11 @@ _edje_object_file_set_internal(Evas_Object *obj, const char *file, const char *g
|
|||
{
|
||||
Evas_Object *child_obj;
|
||||
child_obj = _edje_external_type_add(rp->part->source, evas_object_evas_get(ed->obj), ed->obj, rp->part->default_desc->external_params);
|
||||
if (child_obj) _edje_real_part_swallow(rp, child_obj);
|
||||
if (child_obj)
|
||||
{
|
||||
_edje_real_part_swallow(rp, child_obj);
|
||||
rp->param1.external_params = _edje_external_params_parse(child_obj, rp->param1.description->external_params);
|
||||
}
|
||||
}
|
||||
continue;
|
||||
default:
|
||||
|
@ -847,8 +851,17 @@ _edje_file_del(Edje *ed)
|
|||
|
||||
/* Objects swallowed by the app do not get deleted,
|
||||
but those internally swallowed (GROUP type) do. */
|
||||
if (rp->part->type == EDJE_PART_TYPE_GROUP || rp->part->type == EDJE_PART_TYPE_EXTERNAL)
|
||||
evas_object_del(rp->swallowed_object);
|
||||
switch (rp->part->type)
|
||||
{
|
||||
case EDJE_PART_TYPE_EXTERNAL:
|
||||
_edje_external_parsed_params_free(rp->swallowed_object, rp->param1.external_params);
|
||||
if (rp->param2)
|
||||
_edje_external_parsed_params_free(rp->swallowed_object, rp->param2->external_params);
|
||||
case EDJE_PART_TYPE_GROUP:
|
||||
evas_object_del(rp->swallowed_object);
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
rp->swallowed_object = NULL;
|
||||
}
|
||||
|
|
|
@ -740,8 +740,9 @@ struct _Edje_Real_Part_State
|
|||
int state; // 4
|
||||
Edje_Calc_Params p; // 96
|
||||
#endif
|
||||
}; // 20
|
||||
// WITH EDJE_CALC_CACHE 120
|
||||
void *external_params; // 4
|
||||
}; // 24
|
||||
// WITH EDJE_CALC_CACHE 124
|
||||
|
||||
struct _Edje_Real_Part_Drag
|
||||
{
|
||||
|
@ -1345,5 +1346,7 @@ Evas_Object *_edje_external_type_add(const char *type_name, Evas *evas, Evas_Obj
|
|||
void _edje_external_signal_emit(Evas_Object *obj, const char *emission, const char *source);
|
||||
void _edje_external_params_free(Eina_List *params, unsigned int free_strings);
|
||||
void _edje_external_recalc_apply(Edje *ed, Edje_Real_Part *ep, Edje_Calc_Params *params, Edje_Part_Description *chosen_desc);
|
||||
void *_edje_external_params_parse(Evas_Object *obj, const Eina_List *params);
|
||||
void _edje_external_parsed_params_free(Evas_Object *obj, void *params);
|
||||
|
||||
#endif
|
||||
|
|
Loading…
Reference in New Issue