all repos — tint2 @ d818e66097984cc6da29fc901fa96fd54bf5cbac

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

src/util/area.h (raw)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
/**************************************************************************
* Copyright (C) 2008 thierry lorthiois (lorthiois@bbsoft.fr)
*
* base class for all graphical objects (panel, taskbar, task, systray, clock, ...).
* Area is at the begining of each object (&object == &area).
*
* Area manage the background and border drawing, size and padding.
* Each Area have 2 Pixmap (pix and pix_active).
*
* Area also manage the tree of visible objects. Parent object drawn before child object.
*   panel -> taskbars -> tasks
*         -> systray -> icons
*         -> clock
*
* draw_foreground(obj) is virtual function.
*
* TODO :
* 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
*
* voir resize_taskbar(), resize_clock() et resize_tasks()
* voir config(obj) configure un objet (définie les positions verticales)
*
**************************************************************************/

#ifndef AREA_H
#define AREA_H

#include <glib.h>
#include <X11/Xlib.h>
#include <cairo.h>
#include <cairo-xlib.h>


typedef struct
{
   double color[3];
   double alpha;
   int width;
   int rounded;
} Border;


typedef struct
{
   double color[3];
   double alpha;
} Color;


typedef struct
{
   Pixmap pmap;
   Color back;
   Border border;
} Pmap;


// TODO: isoler 'draw' de 'refresh'
// TODO: isoler les données locales des données communes aux freres
typedef struct {
   // absolute coordinate in panel
   int posx, posy;
   int width, height;
   Pmap pix;
   Pmap pix_active;

   // list of child : Area object
   GSList *list;

   // need redraw Pixmap
   int redraw;
   int use_active, is_active;
   int paddingx, paddingy;
   // parent Area
   void *parent;

   // each object can overwrite following function
   void (*draw_foreground)(void *obj, cairo_t *c, int active);
   void (*add_child)(void *obj);
   int (*remove_child)(void *obj);
} Area;



// draw background and foreground
void refresh (Area *a);

// set 'redraw' on an area and childs
void set_redraw (Area *a);

// draw pixmap and pixmap_active
void draw (Area *a, int active);
void draw_background (Area *a, cairo_t *c, int active);

void remove_area (Area *a);
void add_area (Area *a);
void free_area (Area *a);

// draw rounded rectangle
void draw_rect(cairo_t *c, double x, double y, double w, double h, double r);

#endif