From 14553a6251a5d21ce71d176db996af6153065a92 Mon Sep 17 00:00:00 2001 From: Hosang Kim Date: Fri, 16 Aug 2024 14:17:38 +0900 Subject: [PATCH] evas: When rendering image for clipping, check image has a filter. Change-Id: I4a14fbdd1e3bfe30b3d37a90ae57ba17b4936baf --- src/lib/evas/canvas/evas_object_image.c | 7 +++++++ src/lib/evas/canvas/evas_render.c | 6 ++++-- src/lib/evas/include/evas_private.h | 1 + 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/src/lib/evas/canvas/evas_object_image.c b/src/lib/evas/canvas/evas_object_image.c index 37dc0f6..f624537 100755 --- a/src/lib/evas/canvas/evas_object_image.c +++ b/src/lib/evas/canvas/evas_object_image.c @@ -4248,6 +4248,13 @@ _evas_object_image_surface_get(Evas_Object_Protected_Data *obj, Eina_Bool create return pd->engine_data; } +Eina_Bool +_evas_object_image_has_filter_get(Evas_Object *obj) +{ + Evas_Image_Data *o = efl_data_scope_get(obj, MY_CLASS); + return o->has_filter; +} + EOLIAN static void _efl_canvas_image_internal_efl_object_debug_name_override(Eo *eo_obj, Evas_Image_Data *o, Eina_Strbuf *sb) { diff --git a/src/lib/evas/canvas/evas_render.c b/src/lib/evas/canvas/evas_render.c index 84c6ddd..b56e0c8 100644 --- a/src/lib/evas/canvas/evas_render.c +++ b/src/lib/evas/canvas/evas_render.c @@ -2724,7 +2724,7 @@ evas_render_mask_subrender(Evas_Public_Data *evas, if (is_image && ENFN->image_scaled_update) { - Eina_Bool filled = EINA_FALSE, border = EINA_FALSE; + Eina_Bool filled = EINA_FALSE, border = EINA_FALSE, has_filter = EINA_FALSE; int bl = 0, br = 0, bt = 0, bb = 0; if (evas_object_image_filled_get(mask->object)) @@ -2741,7 +2741,9 @@ evas_render_mask_subrender(Evas_Public_Data *evas, if (bl || br || bt || bb) border = EINA_TRUE; - if (!border && filled && !prev_mask && mask->func->engine_data_get) + has_filter = _evas_object_image_has_filter_get(mask->object); + + if (!border && filled && !has_filter && !prev_mask && mask->func->engine_data_get) { eina_evlog("+mask_scaled_update", mask->object, 0.0, NULL); /* Fast path (for GL) that avoids creating a map surface, render the diff --git a/src/lib/evas/include/evas_private.h b/src/lib/evas/include/evas_private.h index 7f4532d..7142969 100755 --- a/src/lib/evas/include/evas_private.h +++ b/src/lib/evas/include/evas_private.h @@ -1252,6 +1252,7 @@ void _evas_object_image_video_overlay_do(Evas_Object *obj); Eina_Bool _evas_object_image_can_use_plane(Evas_Object_Protected_Data *obj, Efl_Canvas_Output *output); void _evas_object_image_plane_release(Evas_Object *eo_obj, Evas_Object_Protected_Data *obj, Efl_Canvas_Output *output); void _evas_object_image_free(Evas_Object *obj); +Eina_Bool _evas_object_image_has_filter_get(Evas_Object *obj); void evas_object_smart_bounding_box_get(Evas_Object_Protected_Data *obj, Eina_Rectangle *cur_bounding_box, Eina_Rectangle *prev_bounding_box); void evas_object_smart_del(Evas_Object *obj); void evas_object_smart_cleanup(Evas_Object *obj); -- 2.7.4