evas filters: Save selected render op of the final object

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
This commit is contained in:
Jean-Philippe Andre 2017-03-09 17:36:39 +09:00
parent c1a2c89ac8
commit 815e53ee35
2 changed files with 3 additions and 0 deletions

View 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,

View 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;