fixed decorated window with compiz

git-svn-id: http://tint2.googlecode.com/svn/trunk@22 121b4492-b84c-0410-8b4c-0d4edfb3f3cc
This commit is contained in:
lorthiois@bbsoft.fr
2009-01-05 21:01:05 +00:00
parent 89bcccb468
commit e0a80ef5a2
20 changed files with 166 additions and 155 deletions

View File

@@ -5,60 +5,23 @@
* Area is at the begining of each graphical object so &object == &area.
*
* Area manage the background and border drawing, size and padding.
* Area manage also the tree of visible objects
* Area also manage the tree of visible objects
* panel -> taskbars -> tasks
* -> systray -> icons
* -> clock
*
* un objet comprend les actions:
* 1) redraw(obj)
* force l'indicateur 'redraw' sur l'objet
* parcoure la liste des sous objets => redraw(obj)
* 2) draw(obj)
* dessine le background, dessine le contenu dans pmap
* parcoure la liste des sous objets => draw(obj)
* le pmap de l'objet se base sur le pmap de l'objet parent (cumul des couches)
* 3) draw_background(obj)
* dessine le fond dans pmap
* 4) draw_foreground(obj) = 0 : fonction virtuelle à redéfinir
* dessine le contenu dans pmap
* si l'objet n'a pas de contenu, la fonction est nulle
* 5) resize_width(obj, width) = 0 : fonction virtuelle à redéfinir
* draw_foreground(obj) and draw(obj) are virtual function.
*
* resize_width(obj, width) = 0 : fonction virtuelle à redéfinir
* recalcule la largeur de l'objet (car la hauteur est fixe)
* - taille systray calculée à partir de la liste des icones
* - taille clock calculée à partir de l'heure
* - taille d'une tache calculée à partir de la taskbar (ajout, suppression, taille)
* - taille d'une taskbar calculée à partir de la taille du panel et des autres objets
* 6) voir refresh(obj)
*
* Implémentation :
* - l'objet est en fait une zone (area).
* l'imbrication des sous objet doit permettre de gérer le layout.
* - les taches ont 2 objets : l'un pour la tache inactive et l'autre pour la tache active
* draw(obj) est appellé sur le premier objet automatiquement
* et draw_foreground(obj) lance l'affichage du 2 ieme objet
* ainsi la taskbar gère bien une liste d'objets mais draw(obj) dessine les 2 objets
* - les fonctions de refresh et de draw sont totalement dissociées
*
* ----------------------------------------------------
* A évaluer :
* 1. voir comment définir et gérer le panel_layout avec les objets
* => peut on s'affranchir des données spécifiques à chaque objet ?
* => comment gérer l'affichage du layout ?
* => comment configurer le layout ?
* => voir le cumul des couches et l'imbrication entre objet et parent ?
* 2. voir la fonction de refresh des objets ??
* surtout le refresh des taches qui est différent pour la tache active
*
* 3. tester l'implémentation et évaluer les autres abstractions possibles ?
*
* 4. comment gérer le groupage des taches
*
* voir resize_taskbar(), resize_clock() et resize_tasks()
* voir les taches actives et inactives ?? une seule tache est active !
* variable widthChanged ou bien emission d'un signal ???
*
* 6) config(obj) configure un objet (définie les positions verticales)
* voir config(obj) configure un objet (définie les positions verticales)
*
**************************************************************************/
@@ -89,38 +52,40 @@ typedef struct
typedef struct {
// need redraw Pixmap
int redraw;
int paddingx, paddingy;
// TODO: isoler 'draw' de 'refresh'
// TODO: isoler les données locales des données communes aux freres
// absolute coordinate in panel
int posx, posy;
int width, height;
Pixmap pmap;
// list of child : Area object
GSList *list;
// need redraw Pixmap
int redraw;
int paddingx, paddingy;
// parent Area
void *parent;
Color back;
Border border;
// absolute coordinate in panel
int posx, posy;
// parent Area
void *parent;
// pointer to function
// draw_foreground : return 1 if width changed, return O otherwise
int (*draw_foreground)(void *obj, cairo_t *c);
// each object can overwrite following function
void (*draw)(void *obj);
void (*draw_foreground)(void *obj, cairo_t *c);
void (*add_child)(void *obj);
int (*remove_child)(void *obj);
// list of child : Area object
GSList *list;
int (*remove_child)(void *obj);
} Area;
// redraw an area and childs
void redraw (Area *a);
// draw background and foreground
// return 1 if width changed, return O otherwise
int draw (Area *a);
void refresh (Area *a);
// set 'redraw' on an area and childs
void set_redraw (Area *a);
void draw (Area *a);
void draw_background (Area *a, cairo_t *c);
void remove_area (Area *a);