From 60ccea0a2fc20acaf98f2b11d9143df25a54e970 Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Thu, 15 Mar 2001 03:22:11 +0000 Subject: [PATCH] err forget it... SVN revision: 4376 --- legacy/evas/src/evas_optimize.c | 153 ++++++++++++++++++++++++++++++++ 1 file changed, 153 insertions(+) create mode 100644 legacy/evas/src/evas_optimize.c diff --git a/legacy/evas/src/evas_optimize.c b/legacy/evas/src/evas_optimize.c new file mode 100644 index 0000000000..dfc39f1331 --- /dev/null +++ b/legacy/evas/src/evas_optimize.c @@ -0,0 +1,153 @@ +#include "Evas_private.h" +#include "Evas.h" +#include +#include +#include +#include +#include "evas_gl_routines.h" +#include "evas_imlib_routines.h" +#include "evas_image_routines.h" +#include "evas_x11_routines.h" +#include "evas_render_routines.h" + +void +_evas_opt_invalidate(Evas e) +{ + Evas_List l; + + for (l = e->layers; l; l = l->next) + { + Evas_Layer layer; + Evas_List ll; + + layer = l->data; + layer->opt.visible.valid = 0; + if (layer->opt.visible.objects) + { + for (ll = layer->opt.visible.objects; ll; ll = ll->next) + { + Evas_Object o; + + o = ll->data; + o->opt.layer = NULL; + o->opt.is = 0; + } + evas_list_free(layer->opt.visible.objects); + layer->opt.visible.objects = NULL; + } + } +} + +void +_evas_opt_validate_all(Evas e) +{ + Evas_List l; + + for (l = e->layers; l; l = l->next) + { + Evas_Layer layer; + Evas_List ll; + + layer = l->data; + if (!layer->opt.visible.valid) + { + layer->opt.visible.valid = 1; + for (ll = layer->objects; ll; ll = ll->next) + { + Evas_Object o; + + o = ll->data; + o->opt.layer = layer; + _evas_opt_validate_object(e, o); + } + } + } +} + +Evas_List; +_evas_opt_cleanup_validate_all(Evas e) +{ + Evas_List l; + Evas_List removes = NULL; + + for (l = e->layers; l; l = l->next) + { + Evas_Layer layer; + Evas_List ll; + + layer = l->data; + if (layer->opt.visible.valid) + { + for (ll = layer->opt.visible.objects; ll; ll = ll->next) + { + Evas_Object o; + + o = ll->data; + o->opt.layer = layer; + if ((o->previous.visible) && (!o->current.visible)) + { + removes = evas_list_append(removes, o); + } + } + } + } + return removes; +} + +void +_evas_opt_cleanup_validate_all_removes(Evas e, Evas_List removes) +{ + Evas_List l; + + if (removes) + { + for (l = removes; l; l = l->next) + { + Evas_Object o; + + o = l->data; + o->opt.is = 0; + o->opt.layer->opt.visible.objects = evas_list_remove(o->opt.layer->opt.visible.objects, o); + } + evas_list_free(removes); + removes = NULL; + } +} + +void +_evas_opt_set_object_layer(Evas e, Evas_Object o, Evas_Layer layer) +{ + o->opt.layer = layer; +} + +void +_evas_opt_validate_object(Evas e, Evas_Object o) +{ + double cx, cy, cw, ch, px, py, pw, ph; + + if (o->opt.is) return; +/* if ((!o->current.visible) && (!o->previous.visible)) return;*/ + if (!o->opt.layer) return; + _evas_get_current_clipped_geometry(e, o, &cx, &cy, &cw, &ch); + _evas_get_previous_clipped_geometry(e, o, &px, &py, &pw, &ph); + if ((!(INTERSECTS(cx, cy, cw, ch, + e->current.viewport.x, e->current.viewport.y, + e->current.viewport.w, e->current.viewport.h))) && + (!(INTERSECTS(px, py, pw, ph, + e->previous.viewport.x, e->previous.viewport.y, + e->previous.viewport.w, e->previous.viewport.h)))) + return; + o->opt.is = 1; + o->opt.layer->opt.visible.objects = evas_list_append(o->opt.layer->opt.visible.objects, o); +} + +void +_evas_opt_invalidate_object(Evas e, Evas_Object o) +{ + if (!o->opt.is) return; + o->opt.is = 0; + if (o->opt.layer) + { + o->opt.layer->opt.visible.objects = evas_list_remove(o->opt.layer->opt.visible.objects, o); + } +}