From: <enl...@li...> - 2002-06-03 08:31:15
|
Enlightenment CVS committal Author : raster Project : e17 Module : libs/evas2 Dir : e17/libs/evas2/src/lib/canvas Modified Files: Tag: SPLIT evas_render.c Log Message: pants on =================================================================== RCS file: /cvsroot/enlightenment/e17/libs/evas2/src/lib/canvas/Attic/evas_render.c,v retrieving revision 1.1.2.7 retrieving revision 1.1.2.8 diff -u -3 -r1.1.2.7 -r1.1.2.8 --- evas_render.c 3 Jun 2002 07:29:59 -0000 1.1.2.7 +++ evas_render.c 3 Jun 2002 08:30:45 -0000 1.1.2.8 @@ -19,10 +19,15 @@ void evas_obscured_rectangle_add(Evas *e, int x, int y, int w, int h) { + Evas_Rectangle *r; + MAGIC_CHECK(e, Evas, MAGIC_EVAS); return; MAGIC_CHECK_END(); - /* FIXME: implement later */ + r = malloc(sizeof(Evas_Rectangle)); + if (!r) return; + r->x = x; r->y = y; r->w = w; r->h = h; + e->obscures = evas_list_append(e->obscures, r); } void @@ -31,7 +36,14 @@ MAGIC_CHECK(e, Evas, MAGIC_EVAS); return; MAGIC_CHECK_END(); - /* FIXME: implement later */ + while (e->obscures) + { + Evas_Rectangle *r; + + r = (Evas_Rectangle *)e->obscures->data; + e->obscures = evas_list_remove(e->obscures, r); + free(r); + } } Evas_List * @@ -67,8 +79,13 @@ /* build active object list */ if (evas_object_is_active(obj)) active_objects = evas_list_append(active_objects, obj); + /* something changed... maybe... */ if (obj->changed) obj->engine.func.render_pre(obj); + /* nothng changed at all */ + else + e->engine.func.output_redraws_rect_del(e->engine.data.output, + obj->cur.cache.geometry.x, obj->cur.cache.geometry.y, obj->cur.cache.geometry.w, obj->cur.cache.geometry.h); } } /* phase 2. add exposes */ @@ -83,7 +100,14 @@ free(r); } /* phase 3. add obscures */ - /* FIXME: not done yet */ + for (ll = e->obscures; ll; ll = ll->next) + { + Evas_Rectangle *r; + + r = ll->data; + e->engine.func.output_redraws_rect_del(e->engine.data.output, + r->x, r->y, r->w, r->h); + } /* build obscure objects list of active objects that obscure */ for (ll = active_objects; ll; ll = ll->next) { @@ -130,36 +154,35 @@ Evas_List *l3; obj = (Evas_Object *)(ll->data); - if ((obscuring_objects) && (obscuring_objects->data == obj)) - obscuring_objects = evas_list_remove(obscuring_objects, obj); - /* FIXME: need to check forintersect */ - e->engine.func.context_clip_set(e->engine.data.output, - e->engine.data.context, - cx, cy, cw, ch); - /* FIXME: add cutouts.. shoud this be done here? */ - /* does it actualyl speed things up? */ - /* should we do a pre-calc as to if we shoudl use these */ - /* in the first place? (if object count too big this will */ - /* be slow) */ -#if 0 - for (l3 = obscuring_objects; l3; l3 = l3->next) + if (evas_object_is_in_output_rect(obj, ux, uy, uw, uh)) { - Evas_Object *obj2; - - obj2 = (Evas_Object *)l3->data; - e->engine.func.context_cutout_add(e->engine.data.output, - e->engine.data.context, - obj2->cur.cache.geometry.x, - obj2->cur.cache.geometry.y, - obj2->cur.cache.geometry.w, - obj2->cur.cache.geometry.h); - } + if ((obscuring_objects) && (obscuring_objects->data == obj)) + obscuring_objects = evas_list_remove(obscuring_objects, obj); + e->engine.func.context_clip_set(e->engine.data.output, + e->engine.data.context, + cx, cy, cw, ch); + /* FIXME: add cutouts.. shoud this be done here? */ + /* does it actually speed things up? */ +#if 0 /* FIXME: this can slow things down... figure out optimum... */ + for (l3 = obscuring_objects; l3; l3 = l3->next) + { + Evas_Object *obj2; + + obj2 = (Evas_Object *)l3->data; + e->engine.func.context_cutout_add(e->engine.data.output, + e->engine.data.context, + obj2->cur.cache.geometry.x, + obj2->cur.cache.geometry.y, + obj2->cur.cache.geometry.w, + obj2->cur.cache.geometry.h); + } #endif - obj->engine.func.render(obj, surface, - e->engine.data.context, - off_x, off_y); - e->engine.func.context_cutout_clear(e->engine.data.output, - e->engine.data.context); + obj->engine.func.render(obj, surface, + e->engine.data.context, + off_x, off_y); + e->engine.func.context_cutout_clear(e->engine.data.output, + e->engine.data.context); + } } /* punch rect out */ e->engine.func.output_redraws_next_update_push(e->engine.data.output, |