]> Dogcows Code - chaz/tint2/blob - src/util/area.h
New import
[chaz/tint2] / 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.
4 *
5 * Area is at the begining of each object so &object == &area.
6 *
7 * une zone comprend :
8 * - fond : couleur / opacité
9 * - contenu
10 * - largeur / hauteur
11 * - paddingx / paddingy
12 * - pixmap mémorisant l'affichage (évite de redessiner l'objet à chaque rafraichissement)
13 * - une liste de sous objets
14 *
15 * un objet comprend les actions:
16 * 1) redraw(obj)
17 * force l'indicateur 'redraw' sur l'objet
18 * parcoure la liste des sous objets => redraw(obj)
19 * 2) draw(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)
35 *
36 * Implémentation :
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
49 *
50 * ----------------------------------------------------
51 * A évaluer :
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
59 *
60 * 3. tester l'implémentation et évaluer les autres abstractions possibles ?
61 *
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 ?
65 *
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 ???
69 *
70 * 6) config(obj) configure un objet (définie les positions verticales)
71 *
72 **************************************************************************/
73
74 #ifndef AREA_H
75 #define AREA_H
76
77 #include <X11/Xlib.h>
78 #include <pango/pangocairo.h>
79
80 #include "common.h"
81
82
83
84 typedef struct
85 {
86 double color[3];
87 double alpha;
88 int width;
89 int rounded;
90 } Border;
91
92
93 typedef struct
94 {
95 double color[3];
96 double alpha;
97 } Color;
98
99
100 typedef struct {
101 // need redraw Pixmap
102 int redraw;
103
104 int paddingx, paddingy;
105 int width, height;
106 Pixmap pmap;
107
108 Color back;
109 Border border;
110
111 // absolute coordinate in panel
112 int posx, posy;
113 // parent Area
114 void *parent;
115
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);
121
122 // list of child
123 GSList *list;
124 } Area;
125
126
127 // redraw an area and childs
128 void redraw (Area *a);
129
130 // draw background and foreground
131 // return 1 if width changed, return O otherwise
132 int draw (Area *a);
133 void draw_background (Area *a, cairo_t *c);
134
135 void refresh (Area *a);
136 void remove_area (Area *a);
137 void add_area (Area *a);
138
139 #endif
140
This page took 0.03988 seconds and 5 git commands to generate.