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
|
struct _Edje_External_Type
|
||||||
{
|
{
|
||||||
Evas_Object *(*add) (void *data, Evas *evas, Evas_Object *parent, const Eina_List *params);
|
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 (*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;
|
void *data;
|
||||||
};
|
};
|
||||||
|
@ -400,7 +405,11 @@ extern "C" {
|
||||||
/* edje_external.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_register(const char *type_name, Edje_External_Type *type_info);
|
||||||
EAPI Eina_Bool edje_external_type_unregister(const char *type_name);
|
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 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
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
|
|
@ -110,10 +110,15 @@ _edje_part_description_apply(Edje *ed, Edje_Real_Part *ep, const char *d1, doubl
|
||||||
{
|
{
|
||||||
if (!ep->param2)
|
if (!ep->param2)
|
||||||
ep->param2 = eina_mempool_malloc(_edje_real_part_state_mp, sizeof (Edje_Real_Part_State));
|
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
|
else
|
||||||
if (ep->param2)
|
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);
|
eina_mempool_free(_edje_real_part_state_mp, ep->param2);
|
||||||
ep->param2 = NULL;
|
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)
|
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];
|
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)
|
if (ep->param2)
|
||||||
{
|
{
|
||||||
ep->param2->description = epd2;
|
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];
|
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)
|
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];
|
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)
|
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);
|
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 *
|
EAPI Edje_External_Param *
|
||||||
edje_external_param_find(const Eina_List *params, const char *key)
|
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_Part_Description *chosen_desc)
|
||||||
{
|
{
|
||||||
Edje_External_Type *type;
|
Edje_External_Type *type;
|
||||||
|
void *params1, *params2 = NULL;
|
||||||
if (!ep->swallowed_object) return;
|
if (!ep->swallowed_object) return;
|
||||||
|
|
||||||
type = evas_object_data_get(ep->swallowed_object, "Edje_External_Type");
|
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;
|
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,
|
type->state_set(type->data, ep->swallowed_object,
|
||||||
ep->param1.description->external_params,
|
params1, params2, ep->description_pos);
|
||||||
(ep->param2 && ep->param2->description ? ep->param2->description->external_params : NULL),
|
}
|
||||||
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;
|
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);
|
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;
|
continue;
|
||||||
default:
|
default:
|
||||||
|
@ -847,8 +851,17 @@ _edje_file_del(Edje *ed)
|
||||||
|
|
||||||
/* Objects swallowed by the app do not get deleted,
|
/* Objects swallowed by the app do not get deleted,
|
||||||
but those internally swallowed (GROUP type) do. */
|
but those internally swallowed (GROUP type) do. */
|
||||||
if (rp->part->type == EDJE_PART_TYPE_GROUP || rp->part->type == EDJE_PART_TYPE_EXTERNAL)
|
switch (rp->part->type)
|
||||||
evas_object_del(rp->swallowed_object);
|
{
|
||||||
|
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;
|
rp->swallowed_object = NULL;
|
||||||
}
|
}
|
||||||
|
|
|
@ -740,8 +740,9 @@ struct _Edje_Real_Part_State
|
||||||
int state; // 4
|
int state; // 4
|
||||||
Edje_Calc_Params p; // 96
|
Edje_Calc_Params p; // 96
|
||||||
#endif
|
#endif
|
||||||
}; // 20
|
void *external_params; // 4
|
||||||
// WITH EDJE_CALC_CACHE 120
|
}; // 24
|
||||||
|
// WITH EDJE_CALC_CACHE 124
|
||||||
|
|
||||||
struct _Edje_Real_Part_Drag
|
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_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_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_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
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue