]> Dogcows Code - chaz/tint2/blobdiff - src/util/area.c
panel_items : fixed some segfault.
[chaz/tint2] / src / util / area.c
index 7455561b34e90e5f0862ac476ce794953531ab97..460abd94e0f7ffc258c981f14ee2c317eefa2519 100644 (file)
  * 'panel_items = SC' define a panel with just Systray and Clock.
  * So the tree 'Panel.Area' will have 2 childs (Systray and Clock).
  *
- * 1) ok
- * 2) ??
- * 3) ??
- * répartition entre niveau global et niveau local ??
- *   size_by_content peut-il modifier redraw=1 en cas de changement ? ou est ce géré par chaque composant ?
- *   size_by_layout peut-il modifier redraw ?
- *
  ************************************************************/
 
+void rendering(void *obj)
+{
+       Panel *panel = (Panel*)obj;
+       
+       size_by_content(&panel->area);
+       size_by_layout(&panel->area, 0, 0);
+       
+       refresh(&panel->area);
+}
+
 
 void size_by_content (Area *a)
 {
@@ -94,16 +97,16 @@ void size_by_content (Area *a)
 
                if (a->_resize) {
                        if (a->_resize(a)) {
-                               // 'size' changed then 'resize = 1' on the parent
+                               // 'size' changed => 'resize = 1' on the parent and redraw object
                                ((Area*)a->parent)->resize = 1;
+                               a->redraw = 1;
                        }
-                       a->redraw = 1;
                }
        }
 }
 
 
-void size_by_layout (Area *a)
+void size_by_layout (Area *a, int pos, int level)
 {
        // don't resize hiden objects
        if (!a->on_screen) return;
@@ -125,8 +128,24 @@ void size_by_layout (Area *a)
                }
        }
 
-       for (l = a->list; l ; l = l->next)
-               size_by_layout(l->data);        
+       // update position of childs
+       pos += a->paddingxlr + a->bg->border.width;
+       int i=0;
+       for (l = a->list; l ; l = l->next) {
+               Area *child = ((Area*)l->data);
+               i++;
+               
+               if (pos != child->posx) {
+                       // pos changed => redraw
+                       child->posx = pos;
+                       child->redraw = 1;
+               }
+               //printf("level %d, object %d, pos %d\n", level, i, pos);
+               
+               size_by_layout(child, pos, level+1);
+               
+               pos += child->width + a->paddingx;
+       }
 }
 
 
This page took 0.022319 seconds and 4 git commands to generate.