evas filters: Save selected render op of the final object
authorJean-Philippe Andre <jp.andre@samsung.com>
Thu, 9 Mar 2017 08:36:39 +0000 (17:36 +0900)
committerJean-Philippe Andre <jp.andre@samsung.com>
Thu, 9 Mar 2017 08:39:39 +0000 (17:39 +0900)
If an object is meant to use COPY mode (for evil purposes,
most likely), then its filtered output should also be using
COPY mode.

@fix

src/lib/evas/filters/evas_filter.c
src/lib/evas/filters/evas_filter_private.h

index 6ce9cb9..9438a4e 100644 (file)
@@ -1286,6 +1286,7 @@ evas_filter_target_set(Evas_Filter_Context *ctx, void *draw_context,
    if (ctx->target.r == 255 && ctx->target.g == 255 &&
        ctx->target.b == 255 && ctx->target.a == 255)
      ctx->target.color_use = EINA_FALSE;
+   ctx->target.rop = ENFN->context_render_op_get(ENDT, draw_context);
 
    ENFN->context_clip_image_get
       (ENDT, draw_context, &mask, &ctx->target.mask_x, &ctx->target.mask_y);
@@ -1337,6 +1338,7 @@ _filter_target_render(Evas_Filter_Context *ctx)
                                      ctx->evas, EINA_FALSE);
      }
 
+   ENFN->context_render_op_set(ENDT, drawctx, ctx->target.rop);
    ENFN->image_draw(ENDT, drawctx, surface, image,
                     0, 0, src->w, src->h,
                     ctx->target.x, ctx->target.y, src->w, src->h,
index 0eb2052..c9be59e 100644 (file)
@@ -137,6 +137,7 @@ struct _Evas_Filter_Context
       int r, g, b, a; // clip color
       void *mask; // mask
       int mask_x, mask_y; // mask offset
+      Evas_Render_Op rop;
       Eina_Bool clip_use : 1;
       Eina_Bool color_use : 1;
    } target;