From 5fb43d35590b186dc3d04ca1ce0c3cbd2b50c0ed Mon Sep 17 00:00:00 2001 From: Jean-Philippe Andre Date: Tue, 3 Feb 2015 15:51:01 +0900 Subject: [PATCH] Evas masking: Forward previous mask where needed In a situation where an object with mask of mask is in a map (Yes! It can happen!) the masks would not get properly "multiplied". Now the problem is that some objects still seem to bypass some masks... Hmm... --- src/lib/evas/canvas/evas_render.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/lib/evas/canvas/evas_render.c b/src/lib/evas/canvas/evas_render.c index 43c55ccae2..c967adbe4c 100644 --- a/src/lib/evas/canvas/evas_render.c +++ b/src/lib/evas/canvas/evas_render.c @@ -1514,7 +1514,7 @@ evas_render_mapped(Evas_Public_Data *e, Evas_Object *eo_obj, evas_object_clip_recalc(obj); if (mask->mask->redraw || !mask->mask->surface) - evas_render_mask_subrender(obj->layer->evas, mask, NULL); + evas_render_mask_subrender(obj->layer->evas, mask, obj->clip.prev_mask); if (mask->mask->surface) { @@ -1573,7 +1573,7 @@ evas_render_mapped(Evas_Public_Data *e, Evas_Object *eo_obj, // This path can be hit when we're multiplying masks on top of each other... Evas_Object_Protected_Data *mask = obj->cur->clipper; if (mask->mask->redraw || !mask->mask->surface) - evas_render_mask_subrender(obj->layer->evas, mask, NULL); + evas_render_mask_subrender(obj->layer->evas, mask, obj->clip.prev_mask); if (mask->mask->surface) { @@ -1768,9 +1768,9 @@ evas_render_mask_subrender(Evas_Public_Data *evas, } else if (!prev_mask->mask->surface) { - // FIXME? + // Note: This is preventive code. Never seen it happen. WRN("Mask render order may be invalid"); - evas_render_mask_subrender(evas, prev_mask, NULL); + evas_render_mask_subrender(evas, prev_mask, prev_mask->clip.prev_mask); } }