Enlightenment CVS committal
Author : raster
Project : e17
Module : libs/edje
Dir : e17/libs/edje/src/lib
Modified Files:
edje_callbacks.c edje_data.c edje_load.c edje_private.h
edje_program.c
Log Message:
"random" ranged delays are now allowed before a program starts... in fact any
program. just provide an "in, 10.0 5.0;" line in the progrma to say "start
thew program in (10.0 + (random value from 0.0 - 5.0)_ seconds from the time
it is triggered. you can simply delay the program with a constant by making
the range 0.0.
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/edje/src/lib/edje_callbacks.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -3 -r1.3 -r1.4
--- edje_callbacks.c 26 Jun 2003 14:04:31 -0000 1.3
+++ edje_callbacks.c 28 Jun 2003 04:20:41 -0000 1.4
@@ -161,3 +161,15 @@
_edje_timer = NULL;
return 0;
}
+
+int
+_edje_pending_timer_cb(void *data)
+{
+ Edje_Pending_Program *pp;
+
+ pp = data;
+ pp->edje->pending_actions = evas_list_remove(pp->edje->pending_actions, pp);
+ _edje_program_run(pp->edje, pp->program, 1);
+ free(pp);
+ return 0;
+}
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/edje/src/lib/edje_data.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -3 -r1.3 -r1.4
--- edje_data.c 28 Jun 2003 03:08:25 -0000 1.3
+++ edje_data.c 28 Jun 2003 04:20:41 -0000 1.4
@@ -97,6 +97,8 @@
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_program, Edje_Program, "name", name,
EET_T_STRING);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_program, Edje_Program, "signal",
signal, EET_T_STRING);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_program, Edje_Program, "source",
source, EET_T_STRING);
+ EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_program, Edje_Program, "in.from",
in.from, EET_T_DOUBLE);
+ EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_program, Edje_Program, "in.range",
in.range, EET_T_DOUBLE);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_program, Edje_Program, "action",
action, EET_T_INT);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_program, Edje_Program, "state",
state, EET_T_STRING);
EET_DATA_DESCRIPTOR_ADD_BASIC(_edje_edd_edje_program, Edje_Program, "state2",
state2, EET_T_STRING);
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/edje/src/lib/edje_load.c,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -3 -r1.3 -r1.4
--- edje_load.c 26 Jun 2003 14:04:31 -0000 1.3
+++ edje_load.c 28 Jun 2003 04:20:41 -0000 1.4
@@ -228,16 +228,28 @@
}
_edje_animators = evas_list_remove(_edje_animators, ed);
}
+ if (ed->pending_actions)
+ {
+ while (ed->pending_actions)
+ {
+ Edje_Pending_Program *pp;
+
+ pp = ed->pending_actions->data;
+ ed->pending_actions = evas_list_remove(ed->pending_actions, pp);
+ ecore_timer_del(pp->timer);
+ free(pp);
+ }
+ }
}
void
_edje_file_free(Edje_File *edf)
{
- printf("FIXME: leak!\n");
+ printf("FIXME: leak Edje_File!\n");
}
void
_edje_collection_free(Edje_Part_Collection *ec)
{
- printf("FIXME: leak!\n");
+ printf("FIXME: leak Edje_Part_Collection!\n");
}
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/edje/src/lib/edje_private.h,v
retrieving revision 1.22
retrieving revision 1.23
diff -u -3 -r1.22 -r1.23
--- edje_private.h 28 Jun 2003 03:08:25 -0000 1.22
+++ edje_private.h 28 Jun 2003 04:20:41 -0000 1.23
@@ -11,7 +11,6 @@
#include <fnmatch.h>
/* FIXME:
- * need "random" signals and events for hooking to, and "random" durations
* free stuff - no more leaks
* dragables have to work
* drag start/top signals etc.
@@ -162,6 +161,11 @@
char *signal; /* if signal emission name matches the glob here... */
char *source; /* if part that emitted this (name) matches this glob */
+ struct {
+ double from;
+ double range;
+ } in;
+
int action; /* type - set state, stop action, set drag pos etc. */
char *state; /* what state of alternates to apply, NULL = default */
char *state2; /* what other state to use - for signal emit action */
@@ -329,6 +333,7 @@
typedef struct _Edje_Signal_Callback Edje_Signal_Callback;
typedef struct _Edje_Calc_Params Edje_Calc_Params;
typedef struct _Edje_Emission Edje_Emission;
+typedef struct _Edje_Pending_Program Edje_Pending_Program;
struct _Edje
{
@@ -351,6 +356,7 @@
Evas_List *parts; /* private list of parts */
Evas_List *actions; /* currently running actions */
Evas_List *callbacks;
+ Evas_List *pending_actions;
int freeze;
int references;
};
@@ -424,6 +430,13 @@
char *source;
};
+struct _Edje_Pending_Program
+{
+ Edje *edje;
+ Edje_Program *program;
+ Ecore_Timer *timer;
+};
+
void _edje_part_pos_set(Edje *ed, Edje_Real_Part *ep, int mode, double pos);
void _edje_part_description_apply(Edje *ed, Edje_Real_Part *ep, char *d1, double
v1, char *d2, double v2);
void _edje_recalc(Edje *ed);
@@ -435,6 +448,7 @@
void _edje_mouse_move_cb(void *data, Evas * e, Evas_Object * obj, void *event_info);
void _edje_mouse_wheel_cb(void *data, Evas * e, Evas_Object * obj, void *event_info);
int _edje_timer_cb(void *data);
+int _edje_pending_timer_cb(void *data);
void _edje_edd_setup(void);
@@ -452,7 +466,7 @@
int _edje_program_run_iterate(Edje_Running_Program *runp, double tim);
void _edje_program_end(Edje *ed, Edje_Running_Program *runp);
-void _edje_program_run(Edje *ed, Edje_Program *pr);
+void _edje_program_run(Edje *ed, Edje_Program *pr, int force);
void _edje_emit(Edje *ed, char *sig, char *src);
Edje *_edje_fetch(Evas_Object *obj);
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/edje/src/lib/edje_program.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -3 -r1.4 -r1.5
--- edje_program.c 28 Jun 2003 03:08:25 -0000 1.4
+++ edje_program.c 28 Jun 2003 04:20:41 -0000 1.5
@@ -155,7 +155,7 @@
pr = evas_list_nth(runp->edje->collection->programs,
runp->program->after);
- if (pr) _edje_program_run(runp->edje, pr);
+ if (pr) _edje_program_run(runp->edje, pr, 0);
}
_edje_thaw(runp->edje);
_edje_unref(runp->edje);
@@ -206,13 +206,33 @@
}
void
-_edje_program_run(Edje *ed, Edje_Program *pr)
+_edje_program_run(Edje *ed, Edje_Program *pr, int force)
{
Evas_List *l;
/* limit self-feeding loops in programs to 64 levels */
static int recursions = 0;
static int recursion_limit = 0;
+ if ((pr->in.from != 0.0) && (pr->in.range != 0.0) && (!force))
+ {
+ Edje_Pending_Program *pp;
+ double r;
+
+ pp = calloc(1, sizeof(Edje_Pending_Program));
+ if (!pp) return;
+ if (pr->in.range > 0.0) r = ((double)rand() / RAND_MAX);
+ pp->timer = ecore_timer_add(pr->in.from + (pr->in.range * r),
+ _edje_pending_timer_cb, pp);
+ if (!pp->timer)
+ {
+ free(pp);
+ return;
+ }
+ pp->edje = ed;
+ pp->program = pr;
+ ed->pending_actions = evas_list_append(ed->pending_actions, pp);
+ return;
+ }
if ((recursions >= 64) || (recursion_limit))
{
recursion_limit = 1;
@@ -365,9 +385,11 @@
Edje_Program *pr;
pr = l->data;
- if ((_edje_glob_match(ee->signal, pr->signal)) &&
+ if ((pr->signal) &&
+ (pr->source) &&
+ (_edje_glob_match(ee->signal, pr->signal)) &&
(_edje_glob_match(ee->source, pr->source)))
- _edje_program_run(ed, pr);
+ _edje_program_run(ed, pr, 0);
}
ed->walking_callbacks = 1;
for (l = ed->callbacks; l; l = l->next)
-------------------------------------------------------
This SF.Net email sponsored by: Free pre-built ASP.NET sites including
Data Reports, E-commerce, Portals, and Forums are available now.
Download today and enter to win an XBOX or Visual Studio .NET.
http://aspnet.click-url.com/go/psa00100006ave/direct;at.asp_061203_01/01
_______________________________________________
enlightenment-cvs mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs