evas: When rendering image for clipping, check image has a filter. 29/316229/3 accepted/tizen/unified/20240821.165312 accepted/tizen/unified/dev/20240822.230540 accepted/tizen/unified/x/20240822.014306
authorHosang Kim <hosang12.kim@samsung.com>
Fri, 16 Aug 2024 05:17:38 +0000 (14:17 +0900)
committerkim hosang <hosang12.kim@samsung.com>
Wed, 21 Aug 2024 04:20:22 +0000 (04:20 +0000)
Change-Id: I4a14fbdd1e3bfe30b3d37a90ae57ba17b4936baf

src/lib/evas/canvas/evas_object_image.c
src/lib/evas/canvas/evas_render.c
src/lib/evas/include/evas_private.h

index 37dc0f6..f624537 100755 (executable)
@@ -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)
 {
index 84c6ddd..b56e0c8 100644 (file)
@@ -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
index 7f4532d..7142969 100755 (executable)
@@ -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);