From e1ff00070428ba0eb9bbc0180eac92f2f6762226 Mon Sep 17 00:00:00 2001 From: Jean-Philippe Andre Date: Mon, 18 Jul 2016 13:37:15 +0900 Subject: [PATCH] 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). --- src/lib/evas/canvas/evas_object_image.c | 2 ++ src/lib/evas/canvas/evas_object_rectangle.c | 2 +- src/lib/evas/include/evas_inline.x | 3 --- 3 files changed, 3 insertions(+), 4 deletions(-) diff --git a/src/lib/evas/canvas/evas_object_image.c b/src/lib/evas/canvas/evas_object_image.c index 8f40147c61..36babe3f8e 100644 --- a/src/lib/evas/canvas/evas_object_image.c +++ b/src/lib/evas/canvas/evas_object_image.c @@ -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) diff --git a/src/lib/evas/canvas/evas_object_rectangle.c b/src/lib/evas/canvas/evas_object_rectangle.c index 122d755176..d394546351 100644 --- a/src/lib/evas/canvas/evas_object_rectangle.c +++ b/src/lib/evas/canvas/evas_object_rectangle.c @@ -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 diff --git a/src/lib/evas/include/evas_inline.x b/src/lib/evas/include/evas_inline.x index 6255614c81..510077c759 100644 --- a/src/lib/evas/include/evas_inline.x +++ b/src/lib/evas/include/evas_inline.x @@ -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;