forked from enlightenment/efl
fix overdraw issue in evas when clips change
the comments say it all. this stops adding massive full window updates when clippers lose all children (and are visible) or gain a first child while visible as all code hides these clip rects (or shows them) in these cases and other usages just make no sense.
This commit is contained in:
parent
04a6f45756
commit
8767a80b0d
|
@ -264,7 +264,9 @@ _evas_object_clip_set(Eo *eo_obj, Evas_Object_Protected_Data *obj, Evas_Object *
|
|||
state_write->have_clipees = 0;
|
||||
}
|
||||
EINA_COW_STATE_WRITE_END(obj->cur->clipper, state_write, cur);
|
||||
|
||||
/* i know this was to handle a case where a clip stops having children and
|
||||
* becomes a solid colored box - no one ever does that... they hide the clip
|
||||
* so dont add damages
|
||||
if ((obj->cur->clipper->cur) && (obj->cur->clipper->cur->visible))
|
||||
{
|
||||
if (obj->cur->clipper->layer)
|
||||
|
@ -277,6 +279,7 @@ _evas_object_clip_set(Eo *eo_obj, Evas_Object_Protected_Data *obj, Evas_Object *
|
|||
obj->cur->clipper->cur->geometry.h);
|
||||
}
|
||||
}
|
||||
*/
|
||||
}
|
||||
evas_object_change(obj->cur->clipper->object, obj->cur->clipper);
|
||||
evas_object_change(eo_obj, obj);
|
||||
|
@ -294,10 +297,14 @@ _evas_object_clip_set(Eo *eo_obj, Evas_Object_Protected_Data *obj, Evas_Object *
|
|||
clip->changed = 1;
|
||||
e = clip->layer->evas;
|
||||
e->changed = 1;
|
||||
/* i know this was to handle a case where a clip starts having children and
|
||||
* stops being a solid colored box - no one ever does that... they hide the clp
|
||||
* so dont add damages
|
||||
evas_damage_rectangle_add(e->evas,
|
||||
clip->cur->geometry.x + e->framespace.x,
|
||||
clip->cur->geometry.y + e->framespace.y,
|
||||
clip->cur->geometry.w, clip->cur->geometry.h);
|
||||
*/
|
||||
}
|
||||
EINA_COW_STATE_WRITE_BEGIN(obj, state_write, cur)
|
||||
{
|
||||
|
@ -376,7 +383,9 @@ _evas_object_clip_unset(Eo *eo_obj, Evas_Object_Protected_Data *obj)
|
|||
state_write->have_clipees = 0;
|
||||
}
|
||||
EINA_COW_STATE_WRITE_END(obj->cur->clipper, state_write, cur);
|
||||
|
||||
/* i know this was to handle a case where a clip stops having children and
|
||||
* becomes a solid colored box - no one ever does that... they hide the clip
|
||||
* so dont add damages
|
||||
if ((obj->cur->clipper->cur) && (obj->cur->clipper->cur->visible))
|
||||
{
|
||||
if (obj->cur->clipper->layer)
|
||||
|
@ -389,6 +398,7 @@ _evas_object_clip_unset(Eo *eo_obj, Evas_Object_Protected_Data *obj)
|
|||
obj->cur->clipper->cur->geometry.h);
|
||||
}
|
||||
}
|
||||
*/
|
||||
}
|
||||
evas_object_change(obj->cur->clipper->object, obj->cur->clipper);
|
||||
}
|
||||
|
|
|
@ -242,8 +242,8 @@ evas_object_rectangle_render_pre(Evas_Object *eo_obj,
|
|||
/* it obviously didn't change - add a NO obscure - this "unupdates" this */
|
||||
/* area so if there were updates for it they get wiped. don't do it if we */
|
||||
/* arent fully opaque and we are visible */
|
||||
if (evas_object_is_visible(eo_obj) &&
|
||||
evas_object_is_opaque(eo_obj) &&
|
||||
if (evas_object_is_visible(eo_obj, obj) &&
|
||||
evas_object_is_opaque(eo_obj, obj) &&
|
||||
(!obj->clip.clipees))
|
||||
{
|
||||
Evas_Coord x, y, w, h;
|
||||
|
@ -260,10 +260,11 @@ evas_object_rectangle_render_pre(Evas_Object *eo_obj,
|
|||
obj->cur->clipper->cur->cache.clip.w,
|
||||
obj->cur->clipper->cur->cache.clip.h);
|
||||
}
|
||||
e->engine.func->output_redraws_rect_del(e->engine.data.output,
|
||||
x + e->framespace.x,
|
||||
y + e->framespace.y,
|
||||
w, h);
|
||||
obj->layer->evas->engine.func->output_redraws_rect_del
|
||||
(obj->layer->evas->engine.data.output,
|
||||
x + obj->layer->evas->framespace.x,
|
||||
y + obj->layer->evas->framespace.y,
|
||||
w, h);
|
||||
}
|
||||
done:
|
||||
evas_object_render_pre_effect_updates(&obj->layer->evas->clip_changes, eo_obj, is_v, was_v);
|
||||
|
|
Loading…
Reference in New Issue