evas: Some more opacity check fixes

This should fix T3309

Snapshot objects are image objects, so the function is_opaque
exists. No need to bypass it. Also, alpha rectangles are not
opaque. Assume that anything with a filter is not opaque.

All of this fixes T3309 but the main point was on snapshot
objects (probably because the only point of a snapshot is
to apply a filter on it).
This commit is contained in:
Jean-Philippe Andre 2016-07-18 13:37:15 +09:00
parent 9248d3a5ac
commit e1ff000704
3 changed files with 3 additions and 4 deletions

View File

@ -2489,6 +2489,8 @@ evas_object_image_is_opaque(Evas_Object *eo_obj EINA_UNUSED,
return o->cur->opaque;
if (!o->engine_data)
return o->cur->opaque;
if (o->has_filter)
return o->cur->opaque;
// FIXME: use proxy
if (o->cur->source)

View File

@ -362,7 +362,7 @@ evas_object_rectangle_is_opaque(Evas_Object *eo_obj EINA_UNUSED,
return 1;
if (obj->cur->render_op != EVAS_RENDER_BLEND)
return 0;
return 1;
return (obj->cur->cache.clip.a == 255) ? 1 : 0;
}
static int

View File

@ -79,9 +79,6 @@ evas_object_is_opaque(Evas_Object *eo_obj, Evas_Object_Protected_Data *obj)
if ((obj->cur->clipper && obj->cur->clipper->mask->is_mask) ||
(obj->clip.mask))
return 0;
/* Non masked snapshot are supposed to be opaque */
if (obj->cur->snapshot)
return 1;
if (obj->func->is_opaque)
return obj->func->is_opaque(eo_obj, obj, obj->private_data);
return 1;