Enlightenment CVS committal

Author  : pfritz
Project : e17
Module  : libs/ewl

Dir     : e17/libs/ewl/src/lib


Modified Files:
        ewl_box.c ewl_container.c ewl_container.h 


Log Message:
add ewl_container_child_count_visible_get()
use this function in the box code, this solves some spacing problems

===================================================================
RCS file: /cvs/e/e17/libs/ewl/src/lib/ewl_box.c,v
retrieving revision 1.43
retrieving revision 1.44
diff -u -3 -r1.43 -r1.44
--- ewl_box.c   1 Jul 2007 18:45:51 -0000       1.43
+++ ewl_box.c   8 Jul 2007 19:08:56 -0000       1.44
@@ -301,7 +301,7 @@
                ewl_box_cb_child_homogeneous_show(c, NULL);
        }
        else {
-               int nodes, space;
+               int nodes;
 
                ewl_callback_del(EWL_WIDGET(b), EWL_CALLBACK_CONFIGURE,
                                ewl_box_cb_configure_homogeneous);
@@ -316,15 +316,14 @@
                /*
                 * calculate the new preferred size
                 */
-               nodes = ecore_dlist_nodes(c->children) - 1;
-               space = (nodes > 1) ? b->spacing : 0;
+               nodes = ewl_container_child_count_visible_get(c) - 1;
                if (b->orientation == EWL_ORIENTATION_HORIZONTAL) {
                        ewl_container_largest_prefer(c, 
                                                EWL_ORIENTATION_VERTICAL);
                        ewl_container_sum_prefer(c,
                                                EWL_ORIENTATION_HORIZONTAL);
                        ewl_object_preferred_inner_w_set(EWL_OBJECT(b),
-                                       PREFERRED_W(b) + space * nodes);
+                                       PREFERRED_W(b) + b->spacing * nodes);
                }
                else {
                        ewl_container_largest_prefer(c, 
@@ -332,7 +331,7 @@
                        ewl_container_sum_prefer(c,
                                                EWL_ORIENTATION_VERTICAL);
                        ewl_object_preferred_inner_h_set(EWL_OBJECT(b),
-                                       PREFERRED_H(b) + space * nodes);
+                                       PREFERRED_H(b) + b->spacing * nodes);
                }
        }
 
@@ -377,10 +376,9 @@
 
        w = EWL_WIDGET(b);
 
-       nodes = ecore_dlist_nodes(EWL_CONTAINER(b)->children);
+       nodes = ewl_container_child_count_visible_get(EWL_CONTAINER(b)) - 1;
 
-       if (nodes) {
-               nodes--;
+       if (nodes > 0) {
                if (b->orientation == EWL_ORIENTATION_HORIZONTAL)
                        ewl_object_preferred_inner_w_set(EWL_OBJECT(w),
                                        PREFERRED_W(w) - (nodes * b->spacing) +
@@ -436,7 +434,7 @@
 
        b = EWL_BOX(w);
 
-       fill_count = ecore_dlist_nodes(EWL_CONTAINER(w)->children);
+       fill_count = ewl_container_child_count_visible_get(EWL_CONTAINER(w));
 
        /*
         * Catch the easy case, and return.
@@ -523,12 +521,7 @@
        if (ecore_dlist_is_empty(EWL_CONTAINER(w)->children))
                DRETURN(DLEVEL_STABLE);
 
-       num = 0;
-       ecore_dlist_goto_first(EWL_CONTAINER(w)->children);
-       while ((child = ecore_dlist_next(EWL_CONTAINER(w)->children))) {
-               if (VISIBLE(child))
-                       num++;
-       }
+       num = ewl_container_child_count_visible_get(EWL_CONTAINER(w));
 
        if (!num)
                DRETURN(DLEVEL_STABLE);
@@ -589,7 +582,8 @@
        DCHECK_TYPE_RET("b", b, EWL_BOX_TYPE, 0);
        DCHECK_PARAM_PTR_RET("spread", spread, 0);
 
-       initial = *fill_size / ecore_dlist_nodes(EWL_CONTAINER(b)->children);
+       initial = *fill_size / 
+               ewl_container_child_count_visible_get(EWL_CONTAINER(b));
 
        /*
         * Sort the children into lists dependant on their alignment within the
@@ -855,7 +849,7 @@
        DCHECK_TYPE("c", c, EWL_BOX_TYPE);
        DCHECK_TYPE("w", w, EWL_WIDGET_TYPE);
 
-       if (ecore_dlist_nodes(c->children) > 1)
+       if (ewl_container_child_count_visible_get(c) > 1)
                space = EWL_BOX(c)->spacing;
 
        /*
@@ -906,7 +900,7 @@
        DCHECK_PARAM_PTR("c", c);
        DCHECK_TYPE("c", c, EWL_CONTAINER_TYPE);
 
-       numc = ecore_dlist_nodes(c->children);
+       numc = ewl_container_child_count_visible_get(c);
        if (numc > 1)
                space = EWL_BOX(c)->spacing;
 
@@ -943,7 +937,7 @@
        DCHECK_TYPE("c", c, EWL_BOX_TYPE);
        DCHECK_TYPE("w", w, EWL_WIDGET_TYPE);
 
-       if (ecore_dlist_nodes(c->children) > 1)
+       if (ewl_container_child_count_visible_get(c) > 1)
                space = b->spacing;
 
        if (b->orientation == EWL_ORIENTATION_HORIZONTAL) {
===================================================================
RCS file: /cvs/e/e17/libs/ewl/src/lib/ewl_container.c,v
retrieving revision 1.59
retrieving revision 1.60
diff -u -3 -r1.59 -r1.60
--- ewl_container.c     1 Apr 2007 21:48:06 -0000       1.59
+++ ewl_container.c     8 Jul 2007 19:08:56 -0000       1.60
@@ -465,6 +465,27 @@
        DRETURN_INT(count, DLEVEL_STABLE);
 }
 
+/**
+ * @param c: The container to get the child count from
+ * @return Returns the number of visible child widgets
+ * @brief Returns the number of visible child widgets in the container
+ *
+ * This function return the number of visible child widgets in this container,
+ * no matter if the container is set to redirect or not.
+ * Note: other than ewl_container_count_get() and 
+ * ewl_container_count_internal_get() it does not return the number of
+ * children in the redirection end container.
+ */
+int
+ewl_container_child_count_visible_get(Ewl_Container *c)
+{
+       DENTER_FUNCTION(DLEVEL_STABLE);
+       DCHECK_PARAM_PTR_RET("c", c, 0);
+       DCHECK_TYPE_RET("c", c, EWL_CONTAINER_TYPE, 0);
+
+       DRETURN_INT(c->visible_children, DLEVEL_STABLE);
+}
+
 static Ewl_Widget *
 ewl_container_child_helper_get(Ewl_Container *parent, int index, 
                                                unsigned int skip)
@@ -1098,6 +1119,7 @@
        DCHECK_TYPE("c", c, EWL_CONTAINER_TYPE);
        DCHECK_TYPE("w", w, EWL_WIDGET_TYPE);
 
+       c->visible_children++;
        if (c->child_show)
                c->child_show(c, w);
 
@@ -1131,13 +1153,17 @@
        if (DESTROYED(c))
                DRETURN(DLEVEL_STABLE);
 
+       c->visible_children--; 
+       if (c->visible_children < 0)
+               DWARNING("visible_children is %d\n", c->visible_children);
+
        if (c->child_hide)
                c->child_hide(c, w);
 
        if (c->clip_box) {
                const Evas_List *clippees;
                clippees = evas_object_clipees_get(c->clip_box);
-               if (!clippees)
+               if (!clippees) 
                        evas_object_hide(c->clip_box);
        }
 
===================================================================
RCS file: /cvs/e/e17/libs/ewl/src/lib/ewl_container.h,v
retrieving revision 1.31
retrieving revision 1.32
diff -u -3 -r1.31 -r1.32
--- ewl_container.h     4 Mar 2007 00:52:01 -0000       1.31
+++ ewl_container.h     8 Jul 2007 19:08:56 -0000       1.32
@@ -90,6 +90,7 @@
        Ewl_Widget widget; /**< Inherit the basics of the widget. */
 
        Ecore_DList *children; /**< List of children that are contained. */
+       int visible_children; /**< the number of visible children */
 
        void *clip_box; /**< Clip box to bound widgets inside. */
 
@@ -141,6 +142,7 @@
                                                 Ewl_Container_Iterator i);
 int             ewl_container_child_count_get(Ewl_Container *c);
 int             ewl_container_child_count_internal_get(Ewl_Container *c);
+int             ewl_container_child_count_visible_get(Ewl_Container *c);
 
 void            ewl_container_destroy(Ewl_Container *c);
 void            ewl_container_reset(Ewl_Container *c);



-------------------------------------------------------------------------
This SF.net email is sponsored by DB2 Express
Download DB2 Express C - the FREE version of DB2 express and take
control of your XML. No limits. Just data. Click to get it now.
http://sourceforge.net/powerbar/db2/
_______________________________________________
enlightenment-cvs mailing list
enlightenment-cvs@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs

Reply via email to