rendered paste bodyIndex: src/lib/esmart_container/Esmart_Container.h===================================================================RCS file: /var/cvs/e/e17/libs/esmart/src/lib/esmart_container/Esmart_Container.h,vretrieving revision 1.11diff -u -r1.11 Esmart_Container.h--- src/lib/esmart_container/Esmart_Container.h 12 Jul 2008 06:40:36 -0000 1.11+++ src/lib/esmart_container/Esmart_Container.h 18 Jul 2008 15:59:30 -0000@@ -147,6 +147,18 @@ EAPI int esmart_container_layout_plugin_set(Evas_Object *container, const char *name); +/*! \brief Set that container should clip elements+ * @param container Object+ * @param val Boolean value: 1 to clip elements (default), 0 to not+ */+EAPI void esmart_container_clip_elements_set(Evas_Object *container, + unsigned char val);++/*! \brief Checks that container clips elements or not+ * @param container Object+ * @return Boolean value: 1 if clip elements, 0 if not+ */+EAPI unsigned char esmart_container_clip_elements_get(Evas_Object *container); #ifdef __cplusplus }Index: src/lib/esmart_container/esmart_container.c===================================================================RCS file: /var/cvs/e/e17/libs/esmart/src/lib/esmart_container/esmart_container.c,vretrieving revision 1.17diff -u -r1.17 esmart_container.c--- src/lib/esmart_container/esmart_container.c 16 Jul 2008 21:37:49 -0000 1.17+++ src/lib/esmart_container/esmart_container.c 18 Jul 2008 15:59:30 -0000@@ -419,6 +419,47 @@ return length; } +EAPI void+esmart_container_clip_elements_set(Evas_Object *container, unsigned char val)+{+ Container *cont;+ Evas_List *l;++ cont = _container_fetch(container);+ if (val)+ evas_object_show(cont->clipper);+ else+ evas_object_hide(cont->clipper);+ cont->clip_elements = val;++ if (val)+ { /* Clip all elements */+ for (l = cont->elements; l; l = l->next)+ {+ Container_Element *el = l->data;++ evas_object_clip_set(el->obj, cont->clipper);+ }+ }+ else+ { /* Unclip all elements */+ for (l = cont->elements; l; l = l->next)+ {+ Container_Element *el = l->data;++ evas_object_clip_unset(el->obj);+ }+ }+}++EAPI unsigned char+esmart_container_clip_elements_get(Evas_Object *container)+{+ Container *cont;++ cont = _container_fetch(container);+ return cont->clip_elements;+} /**************** internal functions *******************/ @@ -435,7 +476,7 @@ el->obj = obj; evas_object_data_set(obj, "Container_Element", el); evas_object_show(obj);- + evas_object_geometry_get(obj, NULL, NULL, &w, &h); el->orig_w = w; el->orig_h = h;@@ -444,9 +485,12 @@ evas_object_repeat_events_set(el->grabber, 1); evas_object_color_set(el->grabber, 0, 0, 0, 0); evas_object_show(el->grabber);- + el->container = cont;- evas_object_clip_set(el->obj, cont->clipper);++ if (cont->clip_elements || !evas_object_visible_get(cont->obj))+ evas_object_clip_set(el->obj, cont->clipper);+ evas_object_clip_set(el->grabber, cont->clipper); /* evas_object_layer_set(el->obj, evas_object_layer_get(cont->obj));@@ -456,6 +500,7 @@ evas_object_stack_above(el->obj, cont->obj); */ evas_object_smart_member_add(el->obj, cont->obj);+ evas_object_smart_member_add(el->grabber, cont->obj); evas_object_event_callback_add(el->grabber, EVAS_CALLBACK_MOUSE_DOWN, _cb_element_down, el);Index: src/lib/esmart_container/esmart_container_private.h===================================================================RCS file: /var/cvs/e/e17/libs/esmart/src/lib/esmart_container/esmart_container_private.h,vretrieving revision 1.7diff -u -r1.7 esmart_container_private.h--- src/lib/esmart_container/esmart_container_private.h 12 Jul 2008 06:40:36 -0000 1.7+++ src/lib/esmart_container/esmart_container_private.h 18 Jul 2008 15:59:30 -0000@@ -48,6 +48,9 @@ void *data_order_change; unsigned char changed : 1;++ unsigned char clip_elements : 1; /* decide wether to clip elements to container + or not */ }; struct _Container_ElementIndex: src/lib/esmart_container/esmart_container_smart.c===================================================================RCS file: /var/cvs/e/e17/libs/esmart/src/lib/esmart_container/esmart_container_smart.c,vretrieving revision 1.8diff -u -r1.8 esmart_container_smart.c--- src/lib/esmart_container/esmart_container_smart.c 16 Jul 2008 21:37:49 -0000 1.8+++ src/lib/esmart_container/esmart_container_smart.c 18 Jul 2008 15:59:30 -0000@@ -177,22 +177,43 @@ _container_show(Evas_Object *obj) { Container *data;+ Evas_List *l; data = evas_object_smart_data_get(obj); evas_object_show(data->clipper); evas_object_show(data->grabber);+ + /* This is needed because clipping is optional */+ if (!data->clip_elements)+ {+ for (l = data->elements; l; l = l->next)+ {+ Container_Element *el = l->data;++ evas_object_clip_unset(el->obj);+ }+ } } static void _container_hide(Evas_Object *obj) { Container *data;+ Evas_List *l; data = evas_object_smart_data_get(obj); evas_object_hide(data->clipper); evas_object_hide(data->grabber);+ + /* This is needed because clipping is optional, but we use it anyway when hiding */+ for (l = data->elements; l; l = l->next)+ {+ Container_Element *el = l->data;++ evas_object_clip_set(el->obj, data->clipper);+ } }