jpeg pushed a commit to branch master.

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

commit b0c67adb101d7cab029be0b3c3a400c8d95a4aae
Author: Jean-Philippe Andre <jp.an...@samsung.com>
Date:   Fri Dec 16 12:16:01 2016 +0900

    evas: Fix masks of masks
    
    Don't ask. This is a world of magic.
---
 src/lib/evas/canvas/evas_object_main.c |  1 +
 src/lib/evas/canvas/evas_render.c      | 21 +++++++--------------
 src/lib/evas/include/evas_inline.x     |  2 ++
 3 files changed, 10 insertions(+), 14 deletions(-)

diff --git a/src/lib/evas/canvas/evas_object_main.c 
b/src/lib/evas/canvas/evas_object_main.c
index a4b67d8..795ac3f 100644
--- a/src/lib/evas/canvas/evas_object_main.c
+++ b/src/lib/evas/canvas/evas_object_main.c
@@ -298,6 +298,7 @@ evas_object_clip_recalc(Evas_Object_Protected_Data *obj)
                {
                   Evas_Object_Protected_Data *parent =
                     efl_data_scope_get(obj->smart.parent, 
EFL_CANVAS_OBJECT_CLASS);
+                  evas_object_clip_recalc(parent);
                   if (parent->clip.mask)
                     {
                        if (parent->clip.mask != obj->clip.mask)
diff --git a/src/lib/evas/canvas/evas_render.c 
b/src/lib/evas/canvas/evas_render.c
index 85acd3f..a3b4a14 100644
--- a/src/lib/evas/canvas/evas_render.c
+++ b/src/lib/evas/canvas/evas_render.c
@@ -894,10 +894,8 @@ _evas_render_phase1_object_changed_normal(Phase1_Context 
*p1ctx,
              RD(level, "  skip - not smart, not active or clippees or not 
relevant\n");
           }
      }
-   else if (is_active &&
-            _evas_render_object_is_mask(obj) &&
-            (evas_object_is_visible(eo_obj, obj) ||
-             evas_object_was_visible(eo_obj, obj)))
+   else if (is_active && _evas_render_object_is_mask(obj) &&
+            (obj->cur->visible || obj->prev->visible))
      {
         if (EINA_UNLIKELY(obj->restack))
           OBJ_ARRAY_PUSH(p1ctx->restack_objects, obj);
@@ -1137,7 +1135,7 @@ _evas_render_phase1_object_process(Phase1_Context *p1ctx,
           }
         else if (EINA_UNLIKELY(is_active &&
                                _evas_render_object_is_mask(obj) &&
-                               evas_object_is_visible(eo_obj, obj)))
+                               obj->cur->visible))
           {
              RD(level, "  visible clipper image\n");
              OBJ_ARRAY_PUSH(p1ctx->render_objects, obj);
@@ -2812,8 +2810,7 @@ evas_render_updates_internal_loop(Evas *eo_e, 
Evas_Public_Data *evas,
              x = cx; y = cy; w = cw; h = ch;
              if (((w > 0) && (h > 0)) || (obj->is_smart))
                {
-                  Evas_Object_Protected_Data *prev_mask = NULL;
-                  Evas_Object_Protected_Data *mask = NULL;
+                  Evas_Object_Protected_Data *mask;
 
                   if (!obj->is_smart)
                     {
@@ -2835,15 +2832,11 @@ evas_render_updates_internal_loop(Evas *eo_e, 
Evas_Public_Data *evas,
 
                   ENFN->context_clip_set(ENDT, context, x, y, w, h);
 
-                  /* Clipper masks */
-                  if (_evas_render_object_is_mask(obj->cur->clipper))
-                    mask = obj->cur->clipper; // main object clipped by this 
mask
-                  else if (obj->clip.mask)
-                    mask = obj->clip.mask; // propagated clip
-                  prev_mask = obj->clip.prev_mask;
-
+                  mask = obj->clip.mask;
                   if (mask)
                     {
+                       Evas_Object_Protected_Data *prev_mask = 
obj->clip.prev_mask;
+
                        if (mask->mask->redraw || !mask->mask->surface)
                          evas_render_mask_subrender(obj->layer->evas, mask, 
prev_mask, 4, do_async);
 
diff --git a/src/lib/evas/include/evas_inline.x 
b/src/lib/evas/include/evas_inline.x
index d56d365..fdf91dd 100644
--- a/src/lib/evas/include/evas_inline.x
+++ b/src/lib/evas/include/evas_inline.x
@@ -245,6 +245,8 @@ evas_object_is_active(Evas_Object *eo_obj, 
Evas_Object_Protected_Data *obj)
       need to be smarter and only do that when really needed. */
    if (obj->proxy->proxies && obj->changed)
      return 1;
+   if (obj->mask->is_mask && obj->clip.clipees)
+     return 1;
    return 0;
 }
 

-- 


Reply via email to