simotek pushed a commit to branch efl-1.17.

http://git.enlightenment.org/core/efl.git/commit/?id=a966029c1043801252fa6308234a20f17f1758c1

commit a966029c1043801252fa6308234a20f17f1758c1
Author: Jean-Philippe Andre <jp.an...@samsung.com>
Date:   Mon Jul 18 13:37:15 2016 +0900

    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 7a8245c..f51b267 100644
--- a/src/lib/evas/canvas/evas_object_image.c
+++ b/src/lib/evas/canvas/evas_object_image.c
@@ -4075,6 +4075,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 a22c990..b6a05f4 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 1b4222e..82c0d19 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;

-- 


Reply via email to