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