]> Dogcows Code - chaz/tint2/blob - src/util/area.h
fixed bugs with new design (first step)
[chaz/tint2] / src / util / area.h
1 /**************************************************************************
2 * Copyright (C) 2008 thierry lorthiois (lorthiois@bbsoft.fr)
3 *
4 * base class for all graphical objects (panel, taskbar, task, systray, clock, ...).
5 * Area is at the begining of each graphical object so &object == &area.
6 *
7 * Area manage the background and border drawing, size and padding.
8 * Area manage also the tree of visible objects
9 * panel -> taskbars -> tasks
10 * -> systray -> icons
11 * -> clock
12 *
13 * un objet comprend les actions:
14 * 1) redraw(obj)
15 * force l'indicateur 'redraw' sur l'objet
16 * parcoure la liste des sous objets => redraw(obj)
17 * 2) draw(obj)
18 * dessine le background, dessine le contenu dans pmap
19 * parcoure la liste des sous objets => draw(obj)
20 * le pmap de l'objet se base sur le pmap de l'objet parent (cumul des couches)
21 * 3) draw_background(obj)
22 * dessine le fond dans pmap
23 * 4) draw_foreground(obj) = 0 : fonction virtuelle à redéfinir
24 * dessine le contenu dans pmap
25 * si l'objet n'a pas de contenu, la fonction est nulle
26 * 5) resize_width(obj, width) = 0 : fonction virtuelle à redéfinir
27 * recalcule la largeur de l'objet (car la hauteur est fixe)
28 * - taille systray calculée à partir de la liste des icones
29 * - taille clock calculée à partir de l'heure
30 * - taille d'une tache calculée à partir de la taskbar (ajout, suppression, taille)
31 * - taille d'une taskbar calculée à partir de la taille du panel et des autres objets
32 * 6) voir refresh(obj)
33 *
34 * Implémentation :
35 * - l'objet est en fait une zone (area).
36 * l'imbrication des sous objet doit permettre de gérer le layout.
37 * - les taches ont 2 objets : l'un pour la tache inactive et l'autre pour la tache active
38 * draw(obj) est appellé sur le premier objet automatiquement
39 * et draw_foreground(obj) lance l'affichage du 2 ieme objet
40 * ainsi la taskbar gère bien une liste d'objets mais draw(obj) dessine les 2 objets
41 * - les fonctions de refresh et de draw sont totalement dissociées
42 *
43 * ----------------------------------------------------
44 * A évaluer :
45 * 1. voir comment définir et gérer le panel_layout avec les objets
46 * => peut on s'affranchir des données spécifiques à chaque objet ?
47 * => comment gérer l'affichage du layout ?
48 * => comment configurer le layout ?
49 * => voir le cumul des couches et l'imbrication entre objet et parent ?
50 * 2. voir la fonction de refresh des objets ??
51 * surtout le refresh des taches qui est différent pour la tache active
52 *
53 * 3. tester l'implémentation et évaluer les autres abstractions possibles ?
54 *
55 * 4. comment gérer le groupage des taches
56 *
57 * voir resize_taskbar(), resize_clock() et resize_tasks()
58 * voir les taches actives et inactives ?? une seule tache est active !
59 * variable widthChanged ou bien emission d'un signal ???
60 *
61 * 6) config(obj) configure un objet (définie les positions verticales)
62 *
63 **************************************************************************/
64
65 #ifndef AREA_H
66 #define AREA_H
67
68 #include <X11/Xlib.h>
69 #include <pango/pangocairo.h>
70
71 #include "common.h"
72
73
74
75 typedef struct
76 {
77 double color[3];
78 double alpha;
79 int width;
80 int rounded;
81 } Border;
82
83
84 typedef struct
85 {
86 double color[3];
87 double alpha;
88 } Color;
89
90
91 typedef struct {
92 // need redraw Pixmap
93 int redraw;
94
95 int paddingx, paddingy;
96 int width, height;
97 Pixmap pmap;
98
99 Color back;
100 Border border;
101
102 // absolute coordinate in panel
103 int posx, posy;
104 // parent Area
105 void *parent;
106
107 // pointer to function
108 // draw_foreground : return 1 if width changed, return O otherwise
109 int (*draw_foreground)(void *obj, cairo_t *c);
110 void (*add_child)(void *obj);
111 int (*remove_child)(void *obj);
112
113 // list of child : Area object
114 GSList *list;
115 } Area;
116
117
118 // redraw an area and childs
119 void redraw (Area *a);
120
121 // draw background and foreground
122 // return 1 if width changed, return O otherwise
123 int draw (Area *a);
124 void draw_background (Area *a, cairo_t *c);
125
126 void remove_area (Area *a);
127 void add_area (Area *a);
128 void free_area (Area *a);
129
130 #endif
131
This page took 0.039856 seconds and 5 git commands to generate.