2004-10-26 12:01:17 -07:00
|
|
|
/*
|
|
|
|
* vim:ts=8:sw=3:sts=8:noexpandtab:cino=>5n-3f0^-2{2
|
|
|
|
*/
|
|
|
|
|
2003-06-02 16:49:56 -07:00
|
|
|
#include "edje_private.h"
|
|
|
|
|
2004-01-12 09:41:48 -08:00
|
|
|
static int initted = 0;
|
|
|
|
|
2004-06-05 21:42:17 -07:00
|
|
|
/************************** API Routines **************************/
|
|
|
|
|
|
|
|
/** Initialize the EDJE library.
|
|
|
|
*
|
|
|
|
* @return The new init count.
|
|
|
|
*/
|
2006-01-07 00:54:30 -08:00
|
|
|
EAPI int
|
2003-06-17 01:15:06 -07:00
|
|
|
edje_init(void)
|
|
|
|
{
|
2004-01-19 17:04:16 -08:00
|
|
|
initted++;
|
|
|
|
if (initted == 1)
|
|
|
|
{
|
2008-10-15 07:11:11 -07:00
|
|
|
eina_init();
|
2007-10-04 22:12:38 -07:00
|
|
|
ecore_job_init();
|
2004-10-26 12:01:17 -07:00
|
|
|
srand(time(NULL));
|
2004-01-19 17:04:16 -08:00
|
|
|
_edje_edd_setup();
|
|
|
|
_edje_text_init();
|
2004-03-29 04:00:01 -08:00
|
|
|
embryo_init();
|
2008-08-22 07:32:25 -07:00
|
|
|
eet_init();
|
2004-01-19 17:04:16 -08:00
|
|
|
}
|
2004-06-30 20:46:05 -07:00
|
|
|
_edje_message_init();
|
2004-01-19 17:04:16 -08:00
|
|
|
return initted;
|
2003-06-17 01:15:06 -07:00
|
|
|
}
|
|
|
|
|
2004-07-07 12:46:06 -07:00
|
|
|
/** Shutdown the EDJE library.
|
2004-06-05 21:42:17 -07:00
|
|
|
*
|
|
|
|
* @return The new init count.
|
|
|
|
*/
|
2006-01-07 00:54:30 -08:00
|
|
|
EAPI int
|
2004-01-12 09:41:48 -08:00
|
|
|
edje_shutdown(void)
|
|
|
|
{
|
2004-01-19 17:04:16 -08:00
|
|
|
initted--;
|
|
|
|
if (initted > 0) return initted;
|
2004-01-12 09:41:48 -08:00
|
|
|
|
2007-10-04 22:12:38 -07:00
|
|
|
if (_edje_timer)
|
|
|
|
ecore_animator_del(_edje_timer);
|
|
|
|
_edje_timer = NULL;
|
|
|
|
|
2005-04-03 04:43:00 -07:00
|
|
|
_edje_file_cache_shutdown();
|
2004-06-30 20:46:05 -07:00
|
|
|
_edje_message_shutdown();
|
2004-01-12 09:41:48 -08:00
|
|
|
_edje_edd_free();
|
2004-01-12 11:21:25 -08:00
|
|
|
_edje_color_class_members_free();
|
2005-01-12 22:29:52 -08:00
|
|
|
_edje_color_class_hash_free();
|
2004-01-12 11:21:25 -08:00
|
|
|
_edje_text_class_members_free();
|
2005-01-12 22:29:52 -08:00
|
|
|
_edje_text_class_hash_free();
|
2004-03-29 04:00:01 -08:00
|
|
|
embryo_shutdown();
|
2007-10-04 22:12:38 -07:00
|
|
|
ecore_job_shutdown();
|
2008-08-22 07:32:25 -07:00
|
|
|
eet_shutdown();
|
2008-10-15 07:11:11 -07:00
|
|
|
eina_shutdown();
|
2008-03-24 01:22:01 -07:00
|
|
|
|
2004-01-19 17:04:16 -08:00
|
|
|
return 0;
|
2004-01-12 09:41:48 -08:00
|
|
|
}
|
|
|
|
|
2004-06-05 21:42:17 -07:00
|
|
|
/* Private Routines */
|
|
|
|
|
2003-06-18 07:20:26 -07:00
|
|
|
Edje *
|
|
|
|
_edje_add(Evas_Object *obj)
|
|
|
|
{
|
|
|
|
Edje *ed;
|
2007-09-08 11:31:56 -07:00
|
|
|
|
2003-06-18 07:20:26 -07:00
|
|
|
ed = calloc(1, sizeof(Edje));
|
|
|
|
if (!ed) return NULL;
|
|
|
|
ed->evas = evas_object_evas_get(obj);
|
|
|
|
ed->clipper = evas_object_rectangle_add(ed->evas);
|
|
|
|
evas_object_smart_member_add(ed->clipper, obj);
|
|
|
|
evas_object_color_set(ed->clipper, 255, 255, 255, 255);
|
2004-05-17 21:21:22 -07:00
|
|
|
evas_object_move(ed->clipper, -10000, -10000);
|
|
|
|
evas_object_resize(ed->clipper, 20000, 20000);
|
2003-06-26 07:04:31 -07:00
|
|
|
evas_object_pass_events_set(ed->clipper, 1);
|
|
|
|
ed->have_objects = 1;
|
|
|
|
ed->references = 1;
|
2003-06-18 07:20:26 -07:00
|
|
|
return ed;
|
|
|
|
}
|
|
|
|
|
|
|
|
void
|
|
|
|
_edje_del(Edje *ed)
|
|
|
|
{
|
2005-07-28 06:39:23 -07:00
|
|
|
if (ed->processing_messages)
|
|
|
|
{
|
|
|
|
ed->delete_me = 1;
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
_edje_message_del(ed);
|
2008-02-26 12:12:00 -08:00
|
|
|
_edje_callbacks_patterns_clean(ed);
|
2003-06-19 07:43:49 -07:00
|
|
|
_edje_file_del(ed);
|
2008-10-15 07:11:11 -07:00
|
|
|
if (ed->path) eina_stringshare_del(ed->path);
|
|
|
|
if (ed->group) eina_stringshare_del(ed->group);
|
|
|
|
if (ed->parent) eina_stringshare_del(ed->parent);
|
2005-11-30 01:56:15 -08:00
|
|
|
ed->path = NULL;
|
2008-08-14 11:04:43 -07:00
|
|
|
ed->group = NULL;
|
2004-03-07 18:43:48 -08:00
|
|
|
if ((ed->actions) || (ed->pending_actions))
|
|
|
|
{
|
2008-10-22 04:34:42 -07:00
|
|
|
_edje_animators = eina_list_remove(_edje_animators, ed);
|
2004-03-07 18:43:48 -08:00
|
|
|
}
|
|
|
|
while (ed->actions)
|
|
|
|
{
|
|
|
|
Edje_Running_Program *runp;
|
2007-09-08 11:31:56 -07:00
|
|
|
|
2008-10-22 04:34:42 -07:00
|
|
|
runp = eina_list_data_get(ed->actions);
|
|
|
|
ed->actions = eina_list_remove(ed->actions, runp);
|
2004-03-07 18:43:48 -08:00
|
|
|
free(runp);
|
|
|
|
}
|
|
|
|
while (ed->pending_actions)
|
|
|
|
{
|
|
|
|
Edje_Pending_Program *pp;
|
2007-09-08 11:31:56 -07:00
|
|
|
|
2008-10-22 04:34:42 -07:00
|
|
|
pp = eina_list_data_get(ed->pending_actions);
|
|
|
|
ed->pending_actions = eina_list_remove(ed->pending_actions, pp);
|
2004-03-07 18:43:48 -08:00
|
|
|
free(pp);
|
|
|
|
}
|
2003-06-26 07:04:31 -07:00
|
|
|
while (ed->callbacks)
|
|
|
|
{
|
|
|
|
Edje_Signal_Callback *escb;
|
2007-09-08 11:31:56 -07:00
|
|
|
|
2008-10-22 04:34:42 -07:00
|
|
|
escb = eina_list_data_get(ed->callbacks);
|
|
|
|
ed->callbacks = eina_list_remove(ed->callbacks, escb);
|
2008-10-15 07:11:11 -07:00
|
|
|
if (escb->signal) eina_stringshare_del(escb->signal);
|
|
|
|
if (escb->source) eina_stringshare_del(escb->source);
|
2003-06-26 07:04:31 -07:00
|
|
|
free(escb);
|
|
|
|
}
|
2003-07-12 19:06:46 -07:00
|
|
|
while (ed->color_classes)
|
|
|
|
{
|
2003-10-29 20:45:18 -08:00
|
|
|
Edje_Color_Class *cc;
|
2007-09-08 11:31:56 -07:00
|
|
|
|
2008-10-22 04:34:42 -07:00
|
|
|
cc = eina_list_data_get(ed->color_classes);
|
|
|
|
ed->color_classes = eina_list_remove(ed->color_classes, cc);
|
2008-10-15 07:11:11 -07:00
|
|
|
if (cc->name) eina_stringshare_del(cc->name);
|
2003-07-12 19:06:46 -07:00
|
|
|
free(cc);
|
|
|
|
}
|
|
|
|
while (ed->text_classes)
|
|
|
|
{
|
2003-10-29 20:45:18 -08:00
|
|
|
Edje_Text_Class *tc;
|
2007-09-08 11:31:56 -07:00
|
|
|
|
2008-10-22 04:34:42 -07:00
|
|
|
tc = eina_list_data_get(ed->text_classes);
|
|
|
|
ed->text_classes = eina_list_remove(ed->text_classes, tc);
|
2008-10-15 07:11:11 -07:00
|
|
|
if (tc->name) eina_stringshare_del(tc->name);
|
|
|
|
if (tc->font) eina_stringshare_del(tc->font);
|
2003-07-12 19:06:46 -07:00
|
|
|
free(tc);
|
|
|
|
}
|
2003-06-18 07:20:26 -07:00
|
|
|
free(ed);
|
|
|
|
}
|
2003-06-26 07:04:31 -07:00
|
|
|
|
|
|
|
void
|
|
|
|
_edje_clean_objects(Edje *ed)
|
|
|
|
{
|
|
|
|
evas_object_del(ed->clipper);
|
|
|
|
ed->evas = NULL;
|
|
|
|
ed->obj = NULL;
|
|
|
|
ed->clipper = NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
void
|
|
|
|
_edje_ref(Edje *ed)
|
|
|
|
{
|
2005-09-30 21:15:15 -07:00
|
|
|
if (ed->references <= 0) return;
|
2003-06-26 07:04:31 -07:00
|
|
|
ed->references++;
|
|
|
|
}
|
|
|
|
|
|
|
|
void
|
|
|
|
_edje_unref(Edje *ed)
|
|
|
|
{
|
|
|
|
ed->references--;
|
2005-09-30 21:15:15 -07:00
|
|
|
if (ed->references == 0) _edje_del(ed);
|
2003-06-26 07:04:31 -07:00
|
|
|
}
|