From bc6ba3ab3457a8798dde992d9b790bd16562a87f Mon Sep 17 00:00:00 2001 From: Carsten Haitzler Date: Thu, 27 Oct 2005 04:25:30 +0000 Subject: [PATCH] fix restack draw bug SVN revision: 18005 --- legacy/evas/src/lib/canvas/evas_object_main.c | 8 +++---- legacy/evas/src/lib/canvas/evas_render.c | 23 ++++++++++--------- legacy/evas/src/lib/canvas/evas_stack.c | 8 +++---- 3 files changed, 20 insertions(+), 19 deletions(-) diff --git a/legacy/evas/src/lib/canvas/evas_object_main.c b/legacy/evas/src/lib/canvas/evas_object_main.c index e5278c9a82..ef1d86d50f 100644 --- a/legacy/evas/src/lib/canvas/evas_object_main.c +++ b/legacy/evas/src/lib/canvas/evas_object_main.c @@ -296,14 +296,14 @@ int evas_object_is_active(Evas_Object *obj) { if (obj->smart.smart) return 0; - if ((evas_object_is_in_output_rect(obj, 0, 0, + if ((evas_object_is_visible(obj) || + evas_object_was_visible(obj)) && + (evas_object_is_in_output_rect(obj, 0, 0, obj->layer->evas->output.w, obj->layer->evas->output.h) || evas_object_was_in_output_rect(obj, 0, 0, obj->layer->evas->output.w, - obj->layer->evas->output.h)) && - (evas_object_is_visible(obj) || - evas_object_was_visible(obj))) + obj->layer->evas->output.h))) return 1; return 0; } diff --git a/legacy/evas/src/lib/canvas/evas_render.c b/legacy/evas/src/lib/canvas/evas_render.c index 20c3ce2e84..ac861d407e 100644 --- a/legacy/evas/src/lib/canvas/evas_render.c +++ b/legacy/evas/src/lib/canvas/evas_render.c @@ -73,7 +73,6 @@ _evas_render_phase1_object_process(Evas *e, Evas_Object *obj, Evas_List **active /* build active object list */ if (evas_object_is_active(obj)) *active_objects = evas_list_append(*active_objects, obj); - /* something changed... maybe... */ if (restack) { obj->restack = 1; @@ -85,6 +84,7 @@ _evas_render_phase1_object_process(Evas *e, Evas_Object *obj, Evas_List **active { Evas_Object_List *l; + obj->func->render_pre(obj); for (l = obj->smart.contained; l; l = l->next) { Evas_Object *obj2; @@ -94,7 +94,6 @@ _evas_render_phase1_object_process(Evas *e, Evas_Object *obj, Evas_List **active active_objects, restack_objects, obj->restack); } - } else { @@ -105,7 +104,6 @@ _evas_render_phase1_object_process(Evas *e, Evas_Object *obj, Evas_List **active obj->func->render_pre(obj); } } - /* nothing changed at all */ else { if ((!obj->clip.clipees) && (obj->delete_me == 0)) @@ -114,6 +112,7 @@ _evas_render_phase1_object_process(Evas *e, Evas_Object *obj, Evas_List **active { Evas_Object_List *l; + obj->func->render_pre(obj); for (l = obj->smart.contained; l; l = l->next) { Evas_Object *obj2; @@ -136,8 +135,8 @@ _evas_render_phase1_object_process(Evas *e, Evas_Object *obj, Evas_List **active obj->cur.cache.clip.h); } } + obj->restack = 0; } - obj->restack = 0; } static void @@ -368,22 +367,24 @@ evas_render_updates(Evas *e) } /* if the object is flagged for deletion - note it */ if (obj->delete_me == 2) - delete_objects = evas_list_append(delete_objects, obj); - if (obj->delete_me) obj->delete_me ++; + { + delete_objects = evas_list_append(delete_objects, obj); + } + else if (obj->delete_me != 0) obj->delete_me++; } + /* free our obscuring object list */ + evas_list_free(obscuring_objects_orig); + /* free our active object list */ + evas_list_free(active_objects); /* delete all objects flagged for deletion now */ while (delete_objects) { Evas_Object *obj; obj = (Evas_Object *)(delete_objects->data); - delete_objects = evas_list_remove(delete_objects, obj); + delete_objects = evas_list_remove_list(delete_objects, delete_objects); evas_object_free(obj, 1); } - /* free our obscuring object list */ - evas_list_free(obscuring_objects_orig); - /* free our active object list */ - evas_list_free(active_objects); e->changed = 0; e->viewport.changed = 0; e->output.changed = 0; diff --git a/legacy/evas/src/lib/canvas/evas_stack.c b/legacy/evas/src/lib/canvas/evas_stack.c index 56d46817ed..9843d653ab 100644 --- a/legacy/evas/src/lib/canvas/evas_stack.c +++ b/legacy/evas/src/lib/canvas/evas_stack.c @@ -78,6 +78,7 @@ evas_object_raise(Evas_Object *obj) } obj->restack = 1; evas_object_change(obj); + evas_object_inform_call_restack(obj); if (obj->layer->evas->events_frozen <= 0) { if (!evas_event_passes_through(obj)) @@ -96,7 +97,6 @@ evas_object_raise(Evas_Object *obj) } } } - evas_object_inform_call_restack(obj); } /** @@ -137,6 +137,7 @@ evas_object_lower(Evas_Object *obj) } obj->restack = 1; evas_object_change(obj); + evas_object_inform_call_restack(obj); if (obj->layer->evas->events_frozen <= 0) { if (!evas_event_passes_through(obj)) @@ -155,7 +156,6 @@ evas_object_lower(Evas_Object *obj) } } } - evas_object_inform_call_restack(obj); } /** @@ -213,6 +213,7 @@ evas_object_stack_above(Evas_Object *obj, Evas_Object *above) } obj->restack = 1; evas_object_change(obj); + evas_object_inform_call_restack(obj); if (obj->layer->evas->events_frozen <= 0) { if (!evas_event_passes_through(obj)) @@ -231,7 +232,6 @@ evas_object_stack_above(Evas_Object *obj, Evas_Object *above) } } } - evas_object_inform_call_restack(obj); } /** @@ -289,6 +289,7 @@ evas_object_stack_below(Evas_Object *obj, Evas_Object *below) } obj->restack = 1; evas_object_change(obj); + evas_object_inform_call_restack(obj); if (obj->layer->evas->events_frozen <= 0) { if (!evas_event_passes_through(obj)) @@ -307,7 +308,6 @@ evas_object_stack_below(Evas_Object *obj, Evas_Object *below) } } } - evas_object_inform_call_restack(obj); } /**