map_write->surface = NULL;
EINA_COW_WRITE_END(evas_object_map_cow, obj->map, map_write);
}
+ if (obj->mask->is_mask)
+ {
+ EINA_COW_WRITE_BEGIN(evas_object_mask_cow, obj->mask, Evas_Object_Mask_Data, mask)
+ mask->is_mask = EINA_FALSE;
+ mask->redraw = EINA_FALSE;
+ mask->is_alpha = EINA_FALSE;
+ mask->x = mask->y = mask->w = mask->h = 0;
+ if (mask->surface)
+ {
+ obj->layer->evas->engine.func->image_map_surface_free
+ (obj->layer->evas->engine.data.output, mask->surface);
+ mask->surface = NULL;
+ }
+ EINA_COW_WRITE_END(evas_object_mask_cow, obj->mask, mask);
+ }
evas_object_grabs_cleanup(eo_obj, obj);
evas_object_intercept_cleanup(eo_obj);
if (obj->smart.parent) was_smart_child = 1;
}
else
{
+ Eina_Bool unset_image_clip = EINA_FALSE;
RDI(level);
if (obj->cur->clipper)
if (mask->mask->surface)
{
+ unset_image_clip = EINA_TRUE;
e->engine.func->context_clip_image_set
(e->engine.data.output, ctx,
mask->mask->surface,
obj->func->render(eo_obj, obj, obj->private_data,
e->engine.data.output, ctx,
surface, off_x, off_y, EINA_FALSE);
+ if (unset_image_clip)
+ {
+ e->engine.func->context_clip_image_unset
+ (e->engine.data.output, ctx);
+ }
}
if (!use_mapped_ctx)
e->engine.func->context_free(e->engine.data.output, ctx);
mdata->is_alpha = EINA_TRUE;
}
+ mdata->surface = ENFN->image_dirty_region(ENDT, mdata->surface, 0, 0, w, h);
+
/* END OF HACK */
end:
ctx->target.x, ctx->target.y, src->w, src->h,
EINA_TRUE, EINA_FALSE);
+ if (ctx->target.mask)
+ ENFN->context_clip_image_unset(ENDT, drawctx);
+
if (!ctx->gl_engine)
ENFN->context_free(ENDT, drawctx);
else if (use_clip)
}
static void
+eng_context_free(void *data, void *context)
+{
+ RGBA_Draw_Context *ctx = context;
+
+ if (!ctx) return;
+ if (ctx->clip.mask)
+ eng_context_clip_image_unset(data, context);
+ evas_common_draw_context_free(context);
+}
+
+static void
eng_context_3d_use(void *data)
{
Render_Engine_GL_Generic *re = data;
ORD(context_clip_image_set);
ORD(context_clip_image_unset);
ORD(context_clip_image_get);
+ ORD(context_free);
ORD(rectangle_draw);
ORD(line_draw);
}
static void
-eng_context_free(void *data EINA_UNUSED, void *context)
-{
- evas_common_draw_context_free(context);
-}
-
-static void
eng_context_clip_set(void *data EINA_UNUSED, void *context, int x, int y, int w, int h)
{
evas_common_draw_context_set_clip(context, x, y, w, h);
}
static void
+eng_context_free(void *data, void *context)
+{
+ RGBA_Draw_Context *ctx = context;
+
+ if (!ctx) return;
+ if (ctx->clip.mask)
+ eng_context_clip_image_unset(data, context);
+ evas_common_draw_context_free(context);
+}
+
+static void
eng_context_clip_clip(void *data EINA_UNUSED, void *context, int x, int y, int w, int h)
{
evas_common_draw_context_clip_clip(context, x, y, w, h);