From: Doyoun Kang Date: Mon, 30 Dec 2024 10:08:11 +0000 (+0900) Subject: e_comp_object: restack the transform obj under the bottommost subsurface X-Git-Tag: accepted/tizen/8.0/unified/20250123.170224~2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=1da259b9840398ba19fd567832cbedb39cb0bc13;p=platform%2Fupstream%2Fenlightenment.git e_comp_object: restack the transform obj under the bottommost subsurface fix the problem of subsurface is not composited when subsurface is rendered by evas and the transform obj is enabled. This patch is cherry-picked from below commit on tizen_9.0. - commit b4e33ed2e303404149a862131f0aa603c8cc9fea - Author: Changyeon Lee - Date: Mon Aug 5 13:46:13 2024 +0900 - Subject: e_comp_object: restack the transform obj under the bottommost subsurface Change-Id: Ib68c05aae1220e6afa37a5c9bdc7886bc45490cc --- diff --git a/src/bin/e_comp_object.c b/src/bin/e_comp_object.c index a85de0224b..ec4931e90d 100644 --- a/src/bin/e_comp_object.c +++ b/src/bin/e_comp_object.c @@ -486,35 +486,72 @@ _e_comp_object_cb_mirror_hide(void *data, Evas *e EINA_UNUSED, Evas_Object *obj } ///////////////////////////////////// +static Evas_Object * +_e_comp_object_bottommost_object_get(Evas_Object *obj) +{ + E_Client *sub; + API_ENTRY obj; + + if (!cw->ec) return obj; + if (!cw->ec->comp_data) return obj; + if (!cw->ec->comp_data->sub.below_list) return obj; + + sub = eina_list_data_get(cw->ec->comp_data->sub.below_list); + while (sub) + { + if (!sub->comp_data || !sub->comp_data->sub.below_list) + return sub->frame; + + sub = eina_list_data_get(sub->comp_data->sub.below_list); + } + + return obj; +} static void _e_comp_object_transform_obj_stack_update(Evas_Object *obj) { int layer = 0; + Evas_Object *bottommost_obj; + E_Client *topmost_ec; + E_Comp_Object *topmost_cw; API_ENTRY; EINA_SAFETY_ON_NULL_RETURN(cw->ec); if (cw->ec->input_only) return; - layer = evas_object_layer_get(obj); + topmost_ec = e_comp_wl_topmost_parent_get(cw->ec); + if (!topmost_ec) return; - if (cw->transform_bg_obj) + topmost_cw = evas_object_smart_data_get(topmost_ec->frame); + if (!topmost_cw) return; + + if (e_util_strcmp(evas_object_type_get(topmost_ec->frame), SMART_NAME)) + return; + + if ((!topmost_cw->transform_bg_obj) && (!topmost_cw->transform_tranp_obj)) + return; + + bottommost_obj = _e_comp_object_bottommost_object_get(obj); + layer = evas_object_layer_get(bottommost_obj); + + if (topmost_cw->transform_bg_obj) { - if (layer != evas_object_layer_get(cw->transform_bg_obj)) + if (layer != evas_object_layer_get(topmost_cw->transform_bg_obj)) { - evas_object_layer_set(cw->transform_bg_obj, layer); + evas_object_layer_set(topmost_cw->transform_bg_obj, layer); } - evas_object_stack_below(cw->transform_bg_obj, obj); + evas_object_stack_below(topmost_cw->transform_bg_obj, bottommost_obj); } - if (cw->transform_tranp_obj) + if (topmost_cw->transform_tranp_obj) { - if (layer != evas_object_layer_get(cw->transform_tranp_obj)) + if (layer != evas_object_layer_get(topmost_cw->transform_tranp_obj)) { - evas_object_layer_set(cw->transform_tranp_obj, layer); + evas_object_layer_set(topmost_cw->transform_tranp_obj, layer); } - evas_object_stack_below(cw->transform_tranp_obj, obj); + evas_object_stack_below(topmost_cw->transform_tranp_obj, bottommost_obj); } }