jpeg pushed a commit to branch master. http://git.enlightenment.org/core/efl.git/commit/?id=df03631ef63ae0848828a25cc3caec3387e0917b
commit df03631ef63ae0848828a25cc3caec3387e0917b Author: Jean-Philippe Andre <jp.an...@samsung.com> Date: Tue Apr 5 17:19:55 2016 +0900 Evas smart: Mark all smart clippers as no_render This allows doing ugly things such as setting a clipper/mask on any smart object, without having to worry about seeing a white rectangle cover the whole screen. While the above scenario is not a great idea (bypass elementary in its handling of the clipper), having a big white rect covering the entire UI seems even worse. I wonder if elm objects shouldn't simply allow user clippers, and somehow manage them along with the smart object internal clipper. --- src/lib/evas/canvas/evas_object_smart.c | 13 ++++++++++++- src/lib/evas/canvas/evas_object_smart_clipped.c | 1 + 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/lib/evas/canvas/evas_object_smart.c b/src/lib/evas/canvas/evas_object_smart.c index 57c8801..461338d 100644 --- a/src/lib/evas/canvas/evas_object_smart.c +++ b/src/lib/evas/canvas/evas_object_smart.c @@ -682,9 +682,20 @@ EOLIAN static void _evas_object_smart_smart_no_render_set(Eo *eo_obj, Evas_Smart_Data *o EINA_UNUSED, Eina_Bool hide) { Evas_Object_Protected_Data *obj2; + Evas_Object_Smart_Clipped_Data *cso; + Evas_Object *cso_clipper; + + if (eo_isa(eo_obj, EVAS_SMART_CLIPPED_CLASS)) + cso = eo_data_scope_get(eo_obj, EVAS_SMART_CLIPPED_CLASS); + else + cso = evas_object_smart_data_get(eo_obj); + cso_clipper = cso ? cso->clipper : NULL; EINA_INLIST_FOREACH(evas_object_smart_members_get_direct(eo_obj), obj2) - evas_obj_no_render_set(obj2->object, hide); + { + if (cso_clipper != obj2->object) + evas_obj_no_render_set(obj2->object, hide); + } } EOLIAN static void diff --git a/src/lib/evas/canvas/evas_object_smart_clipped.c b/src/lib/evas/canvas/evas_object_smart_clipped.c index c066e03..8584223 100644 --- a/src/lib/evas/canvas/evas_object_smart_clipped.c +++ b/src/lib/evas/canvas/evas_object_smart_clipped.c @@ -63,6 +63,7 @@ evas_object_smart_clipped_smart_add(Evas_Object *eo_obj) evas_object_resize(cso->clipper, 200000, 200000); evas_object_pass_events_set(cso->clipper, 1); evas_object_hide(cso->clipper); /* show when have something clipped to it */ + evas_obj_no_render_set(cso->clipper, 1); evas_object_smart_data_set(eo_obj, cso); } --