diff --git a/legacy/evas/src/lib/canvas/evas_render.c b/legacy/evas/src/lib/canvas/evas_render.c index 393628e576..d034da3e7b 100644 --- a/legacy/evas/src/lib/canvas/evas_render.c +++ b/legacy/evas/src/lib/canvas/evas_render.c @@ -126,8 +126,7 @@ static Eina_Bool _evas_render_has_map(Evas_Object *obj) { return ((!((obj->func->can_map) && (obj->func->can_map(obj)))) && - ((obj->cur.map) && (obj->cur.map->count == 4) && - (obj->cur.usemap))); + ((obj->cur.map) && (obj->cur.usemap))); } static Eina_Bool @@ -258,6 +257,14 @@ _evas_render_phase1_object_process(Evas *e, Evas_Object *obj, RD(" [--- PROCESS [%p] '%s' active = %i, del = %i | %i %i %ix%i\n", obj, obj->type, is_active, obj->delete_me, obj->cur.geometry.x, obj->cur.geometry.y, obj->cur.geometry.w, obj->cur.geometry.h); if ((is_active) || (obj->delete_me != 0)) eina_array_push(active_objects, obj); + +#ifdef REND_DGB + if (!is_active) + { + RDI(level); + RD(" [%p] vis: %i, cache.clip.vis: %i cache.clip.a: %i [%p]\n", obj, obj->cur.visible, obj->cur.cache.clip.visible, obj->cur.cache.clip.a, obj->func->is_visible); + } +#endif if (_evas_render_has_map(obj)) map = 1; diff --git a/legacy/evas/src/lib/include/evas_inline.x b/legacy/evas/src/lib/include/evas_inline.x index 70a9bebc01..543a6a8707 100644 --- a/legacy/evas/src/lib/include/evas_inline.x +++ b/legacy/evas/src/lib/include/evas_inline.x @@ -81,7 +81,7 @@ static inline int evas_object_is_visible(Evas_Object *obj) { if ((obj->cur.visible) && - (obj->cur.cache.clip.visible) && + ((obj->cur.cache.clip.visible) || (obj->smart.smart)) && (obj->cur.cache.clip.a > 0)) { if (obj->func->is_visible) @@ -119,12 +119,28 @@ evas_object_is_in_output_rect(Evas_Object *obj, int x, int y, int w, int h) static inline int evas_object_is_active(Evas_Object *obj) { - 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))) - return 1; + if (evas_object_is_visible(obj) || evas_object_was_visible(obj)) + { + if (obj->smart.smart) + { + int mapsmt = 0; + if (obj->smart.smart && (obj->cur.map && obj->cur.usemap)) mapsmt = 1; + if (!mapsmt) return 1; + if (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)) + return 1; + } + else + { + if (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)) + return 1; + } + } return 0; }