Enlightenment CVS committal

Author  : raster
Project : e17
Module  : libs/edje

Dir     : e17/libs/edje/src/lib


Modified Files:
        edje_main.c edje_private.h 


Log Message:


freeze/thaw stuff in for more optimum recalculation

===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/edje/src/lib/edje_main.c,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -3 -r1.15 -r1.16
--- edje_main.c 22 Jun 2003 07:58:54 -0000      1.15
+++ edje_main.c 22 Jun 2003 08:37:28 -0000      1.16
@@ -39,6 +39,8 @@
 static void _edje_part_recalc_single(Edje *ed, Edje_Real_Part *ep, 
Edje_Part_Description *desc, Edje_Part_Description *chosen_desc, Edje_Real_Part 
*rel1_to, Edje_Real_Part *rel2_to, Edje_Real_Part *confine_to, Edje_Calc_Params 
*params);
 static void _edje_part_recalc(Edje *ed, Edje_Real_Part *ep);
 static void _edje_recalc(Edje *ed);
+static int  _edje_freeze(Edje *ed);
+static int  _edje_thaw(Edje *ed);
 static void _edje_edd_setup(void);
 
 static void _edje_smart_add(Evas_Object * obj);
@@ -213,8 +215,10 @@
               rp->param1.rel2_to = evas_list_nth(ed->parts, 
rp->param1.description->rel2.id);
          }
        ed->dirty = 1;
+       _edje_freeze(ed);
        _edje_recalc(ed);
        _edje_emit(ed, "load", "");
+       _edje_thaw(ed);
      }
 }
 
@@ -526,7 +530,6 @@
    ed = data;
    rp = evas_object_data_get(obj, "real_part");
    if (!rp) return;
-   _edje_emit(ed, "mouse,move", rp->part->name);
    if (rp->still_in)
      {
        double x, y, w, h;
@@ -536,6 +539,7 @@
            (ev->cur.canvas.x >= (x + w)) || (ev->cur.canvas.y >= (y + h)))
          rp->still_in = 0;
      }
+   _edje_emit(ed, "mouse,move", rp->part->name);
 }
 
 static void
@@ -570,6 +574,7 @@
        Evas_List *newl = NULL;
        
        ed = animl->data;
+       _edje_freeze(ed);
        animl = evas_list_remove(animl, animl->data);
        for (l = ed->actions; l; l = l->next)
          newl = evas_list_append(newl, l->data);
@@ -581,6 +586,7 @@
             newl = evas_list_remove(newl, newl->data);
             _edje_program_run_iterate(runp, t);
          }
+       _edje_thaw(ed);
      }
    if (_edje_anim_count > 0) return 1;
    _edje_timer = NULL;
@@ -592,7 +598,8 @@
 {
    double t, total;
    Evas_List *l;
-   
+
+   _edje_freeze(runp->edje);
    t = tim - runp->start_time;
    total = runp->program->tween.time;
    t /= total;
@@ -642,10 +649,12 @@
                                runp->program->after);
             if (pr) _edje_program_run(runp->edje, pr);
          }
+       _edje_thaw(runp->edje);
        free(runp);
        return  0;
      }
    _edje_recalc(runp->edje);
+   _edje_thaw(runp->edje);
    return 1;
 }
 
@@ -654,6 +663,7 @@
 {
    Evas_List *l;
 
+   _edje_freeze(runp->edje);
    for (l = runp->program->targets; l; l = l->next)
      {
        Edje_Real_Part *rp;
@@ -679,6 +689,7 @@
    if (!runp->edje->actions)
      _edje_animators = evas_list_remove(_edje_animators, runp->edje);
    _edje_emit(runp->edje, "anim,stop", runp->program->name);
+   _edje_thaw(runp->edje);
    free(runp);
 }
    
@@ -687,6 +698,7 @@
 {
    Evas_List *l;
 
+   _edje_freeze(ed);
    _edje_emit(ed, "anim,start", pr->name);
    if (pr->action == EDJE_ACTION_TYPE_STATE_SET)
      {
@@ -775,6 +787,7 @@
      {
        _edje_emit(ed, pr->state, pr->state2);
      }
+   _edje_thaw(ed);
 }
 
 static void
@@ -784,6 +797,7 @@
    static Evas_List *emissions = NULL;
    Edje_Emission *ee;
 
+   _edje_freeze(ed);
    printf("EMIT \"%s\" \"%s\"\n", sig, src);
    ee = calloc(1, sizeof(Edje_Emission));
    if (!ee) return;
@@ -792,6 +806,7 @@
    if (emissions)
      {
        emissions = evas_list_append(emissions, ee);
+       _edje_thaw(ed);
        return;
      }
    else
@@ -822,6 +837,7 @@
        free(ee->source);
        free(ee);
      }
+   _edje_thaw(ed);
 }
 
 static int
@@ -1423,6 +1439,11 @@
    Evas_List *l;
    
    if (!ed->dirty) return;
+   if (ed->freeze)
+     {
+       ed->recalc = 1;
+       return;
+     }
    for (l = ed->parts; l; l = l->next)
      {
        Edje_Real_Part *ep;
@@ -1438,6 +1459,23 @@
        if (!ep->calculated) _edje_part_recalc(ed, ep);
      }
    ed->dirty = 0;
+   ed->recalc = 0;
+}
+
+static int
+_edje_freeze(Edje *ed)
+{
+   ed->freeze++;
+   return ed->freeze;
+}
+
+static int
+_edje_thaw(Edje *ed)
+{
+   ed->freeze--;
+   if ((ed->freeze <= 0) && (ed->recalc))
+     _edje_recalc(ed);
+   return ed->freeze;
 }
 
 static void
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/edje/src/lib/edje_private.h,v
retrieving revision 1.15
retrieving revision 1.16
diff -u -3 -r1.15 -r1.16
--- edje_private.h      22 Jun 2003 07:58:54 -0000      1.15
+++ edje_private.h      22 Jun 2003 08:37:28 -0000      1.16
@@ -305,6 +305,7 @@
    int                   layer;
    double                x, y, w, h;
    unsigned char         dirty : 1;
+   unsigned char         recalc : 1;
    Evas                 *evas; /* the evas this edje belongs to */
    Evas_Object          *obj; /* the smart object */
    Evas_Object          *clipper; /* a big rect to clip this edje to */
@@ -313,6 +314,7 @@
    Evas_List            *parts; /* private list of parts */
    Evas_List            *actions; /* currently running actions */   
    Evas_List            *callbacks;
+   int                   freeze;
 };
 
 struct _Edje_Real_Part




-------------------------------------------------------
This SF.Net email is sponsored by: INetU
Attention Web Developers & Consultants: Become An INetU Hosting Partner.
Refer Dedicated Servers. We Manage Them. You Get 10% Monthly Commission!
INetU Dedicated Managed Hosting http://www.inetu.net/partner/index.php
_______________________________________________
enlightenment-cvs mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to