]>
Dogcows Code - chaz/tint2/blob - src/util/area.h
1 /**************************************************************************
2 * base class for all objects (panel, taskbar, task, systray, clock, ...).
3 * each object 'inherit' Area and implement draw_foreground if needed.
5 * Area is at the begining of each object so &object == &area.
8 * - fond : couleur / opacité
11 * - paddingx / paddingy
12 * - pixmap mémorisant l'affichage (évite de redessiner l'objet à chaque rafraichissement)
13 * - une liste de sous objets
15 * un objet comprend les actions:
17 * force l'indicateur 'redraw' sur l'objet
18 * parcoure la liste des sous objets => redraw(obj)
20 * dessine le background, dessine le contenu dans pmap
21 * parcoure la liste des sous objets => draw(obj)
22 * le pmap de l'objet se base sur le pmap de l'objet parent (cumul des couches)
23 * 3) draw_background(obj)
24 * dessine le fond dans pmap
25 * 4) draw_foreground(obj) = 0 : fonction virtuelle à redéfinir
26 * dessine le contenu dans pmap
27 * si l'objet n'a pas de contenu, la fonction est nulle
28 * 5) resize_width(obj, width) = 0 : fonction virtuelle à redéfinir
29 * recalcule la largeur de l'objet (car la hauteur est fixe)
30 * - taille systray calculée à partir de la liste des icones
31 * - taille clock calculée à partir de l'heure
32 * - taille d'une tache calculée à partir de la taskbar (ajout, suppression, taille)
33 * - taille d'une taskbar calculée à partir de la taille du panel et des autres objets
34 * 6) voir refresh(obj)
37 * - tous les éléments du panel possèdent 1 objet en début de structure
38 * panel, taskbar, systray, task, ...
39 * - l'objet est en fait une zone (area).
40 * l'imbrication des sous objet doit permettre de gérer le layout.
41 * - on a une relation 1<->1 entre un objet et une zone graphique
42 * les taskbar affichent toutes les taches.
43 * donc on utilise la liste des objets pour gérer la liste des taches.
44 * - les taches ont 2 objets : l'un pour la tache inactive et l'autre pour la tache active
45 * draw(obj) est appellé sur le premier objet automatiquement
46 * et draw_foreground(obj) lance l'affichage du 2 ieme objet
47 * ainsi la taskbar gère bien une liste d'objets mais draw(obj) dessine les 2 objets
48 * - les fonctions de refresh et de draw sont totalement dissociées
50 * ----------------------------------------------------
52 * 1. voir comment définir et gérer le panel_layout avec les objets
53 * => peut on s'affranchir des données spécifiques à chaque objet ?
54 * => comment gérer l'affichage du layout ?
55 * => comment configurer le layout ?
56 * => voir le cumul des couches et l'imbrication entre objet et parent ?
57 * 2. voir la fonction de refresh des objets ??
58 * surtout le refresh des taches qui est différent pour la tache active
60 * 3. tester l'implémentation et évaluer les autres abstractions possibles ?
62 * 4. comment gérer le groupage des taches
63 * 5. la clock est le contenu du panel. mais elle ne tiens pas compte du padding vertical ?
64 * c'est ok pour la clock. voir l'impact sur paddingx ?
66 * voir resize_taskbar(), resize_clock() et resize_tasks()
67 * voir les taches actives et inactives ?? une seule tache est active !
68 * variable widthChanged ou bien emission d'un signal ???
70 * 6) config(obj) configure un objet (définie les positions verticales)
72 **************************************************************************/
78 #include <pango/pangocairo.h>
101 // need redraw Pixmap
104 int paddingx
, paddingy
;
111 // absolute coordinate in panel
116 // pointer to function
117 // draw_foreground : return 1 if width changed, return O otherwise
118 int (*draw_foreground
)(void *obj
, cairo_t
*c
);
119 void (*add_child
)(void *obj
);
120 int (*remove_child
)(void *obj
);
127 // redraw an area and childs
128 void redraw (Area
*a
);
130 // draw background and foreground
131 // return 1 if width changed, return O otherwise
133 void draw_background (Area
*a
, cairo_t
*c
);
135 void refresh (Area
*a
);
136 void remove_area (Area
*a
);
137 void add_area (Area
*a
);
This page took 0.039859 seconds and 5 git commands to generate.