all repos — tint2 @ ba24db4c6cb2a2ed12904073ce6be97832e3a448

fork of the tint2 desktop panel for my custom setup - only minimized windows across all desktops for the taskbar

code documentation

git-svn-id: http://tint2.googlecode.com/svn/trunk@532 121b4492-b84c-0410-8b4c-0d4edfb3f3cc
thilor77 thilor77@121b4492-b84c-0410-8b4c-0d4edfb3f3cc
commit

ba24db4c6cb2a2ed12904073ce6be97832e3a448

parent

cd2d794c5a3344b9d77680e187879d0283d6c344

3 files changed, 39 insertions(+), 35 deletions(-)

jump to
M src/tint.csrc/tint.c

@@ -186,6 +186,8 @@ if (panel->area.width > server.monitor[0].width)

panel->area.width = server.monitor[0].width; panel->temp_pmap = XCreatePixmap(server.dsp, server.root_win, panel->area.width, panel->area.height, server.depth); + size_by_content(&panel->area); + size_by_layout(&panel->area); refresh(&panel->area); Imlib_Image img = NULL;

@@ -775,6 +777,8 @@ }

else { if (panel->temp_pmap) XFreePixmap(server.dsp, panel->temp_pmap); panel->temp_pmap = XCreatePixmap(server.dsp, server.root_win, panel->area.width, panel->area.height, server.depth); + size_by_content(&panel->area); + size_by_layout(&panel->area); refresh(&panel->area); XCopyArea(server.dsp, panel->temp_pmap, panel->main_win, server.gc, 0, 0, panel->area.width, panel->area.height, 0, 0); }
M src/util/area.csrc/util/area.c

@@ -32,13 +32,30 @@ #include "panel.h"

/************************************************************ - * Layering & drawing loop of tint2 + * !!! This design is experimental and not yet fully implemented !!!!!!!!!!!!! * + * AREA : * Areas in tint2 are similar to widgets in a GUI. - * Areas (task, clock, systray, taskbar,...) are nodes in a tree. - * The position of each Area is defined by parent's position and brothers on the left. + * Graphical objects (panel, taskbar, task, systray, clock, ...) in tint2 'inherit' an Area class. + * Area is an abstract class of objects. It's at the begining of each object (&object == &area). + * Area manage the background and border drawing, size and padding. * - * !!! This design is experimental and not yet complete !!!!!!!!!!!!! + * DATA ORGANISATION : + * tint2 define one panel per monitor. And each panel have a tree of Area (nodes). + * The root of the tree is Panel.Area. And task, clock, systray, taskbar,... are nodes. + * + * 'panel_items' parameter (in config) define the list and the order of nodes in tree's panel. + * 'panel_items = SC' define a panel with just Systray and Clock. + * So the root Panel.Area will have 2 childs (Systray and Clock). + * + * The tree allow to browse panel's objects from background to foreground and from left to right. + * The position of each node/Area depend on parent's position and brothers on the left. + * + * DRAWING EVENT : + * In the end, redrawing an object (like the clock) could come from an external event (date change) + * or from a layering event (size or position change). + * + * DRAWING LOOP : * * 1) browse tree and resize SIZE_BY_CONTENT node * - children node are resized before its parent

@@ -46,23 +63,20 @@ * - if 'size' changed then 'resize = 1' on the parent

* 2) browse tree and resize SIZE_BY_LAYOUT node * - parent node is resized before its children * - if 'size' changed then 'resize = 1' on childs with SIZE_BY_LAYOUT - * 3) calculate posx of all objects + * 3) calculate posx of objects * - parent's position is calculated before children's position + * - if 'position' changed then 'redraw = 1' * 4) redraw needed objects + * - parent node is drawn before its children + * + * perhaps 2) and 3) can be merged... ************************************************************/ -void size_by_content (Area *a); -void size_by_layout (Area *a); - void refresh (Area *a) { // don't draw and resize hide objects if (!a->on_screen) return; - - //size(a); - size_by_content(a); - size_by_layout(a); // don't draw transparent objects (without foreground and without background) if (a->redraw) {

@@ -87,28 +101,11 @@ refresh(l->data);

} -void size (Area *a) -{ - GSList *l; - - if (a->resize) { - a->resize = 0; - // force the resize of childs - for (l = a->list; l ; l = l->next) { - Area *area = (Area*)l->data; - area->resize = 1; - size(area); - } - - // resize can generate a redraw - if (a->_resize) - a->_resize(a); - } -} - - void size_by_content (Area *a) { + // don't draw and resize hide objects + if (!a->on_screen) return; + // children node are resized before its parent GSList *l; for (l = a->list; l ; l = l->next)

@@ -129,6 +126,9 @@

void size_by_layout (Area *a) { + // don't draw and resize hide objects + if (!a->on_screen) return; + // parent node is resized before its children // calculate current area's size GSList *l;
M src/util/area.hsrc/util/area.h

@@ -89,11 +89,11 @@ } Area;

+void size_by_content (Area *a); +void size_by_layout (Area *a); // draw background and foreground void refresh (Area *a); - -void size (Area *a); - + // set 'redraw' on an area and childs void set_redraw (Area *a);