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

Reply via email to