X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2Futil%2Farea.h;h=37e1dc42132f00db8df59e97f54f5d79ae4003df;hb=c75069e03de761de15a6d74a4df0d7dbe6672b6e;hp=9a29ebd2ac07aeb446d1278affec11cd8cb8bd48;hpb=3f12a587406ddc975bff3fe505924e62cd125ff6;p=chaz%2Ftint2 diff --git a/src/util/area.h b/src/util/area.h index 9a29ebd..37e1dc4 100644 --- a/src/util/area.h +++ b/src/util/area.h @@ -5,101 +5,123 @@ * 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). +* Each Area has one Pixmap (pix). * -* Area also manage the tree of visible objects. Parent object drawn before child object. +* Area manage the tree of all 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) +* draw_foreground(obj) and resize(obj) are virtual function. * **************************************************************************/ #ifndef AREA_H #define AREA_H +#include #include -#include - -#include "common.h" +#include +#include typedef struct { - double color[3]; - double alpha; - int width; - int rounded; + double color[3]; + double alpha; + int width; + int rounded; } Border; typedef struct { - double color[3]; - double alpha; + double color[3]; + double alpha; } Color; - typedef struct { - Pixmap pmap; - Color back; - Border border; -} Pmap; + Color back; + Border border; +} Background; -// TODO: isoler 'draw' de 'refresh' -// TODO: isoler les données locales des données communes aux freres +// way to calculate the size +// SIZE_BY_LAYOUT objects : taskbar and task +// SIZE_BY_CONTENT objects : clock, battery, launcher, systray +enum { SIZE_BY_LAYOUT, SIZE_BY_CONTENT }; + 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); + // coordinate relative to panel window + int posx, posy; + // width and height including border + int width, height; + Pixmap pix; + Background *bg; + + // list of child : Area object + GSList *list; + + // object visible on screen. + // An object (like systray) could be enabled but hidden (because no tray icon). + int on_screen; + // way to calculate the size (SIZE_BY_CONTENT or SIZE_BY_LAYOUT) + int size_mode; + // need to calculate position and width + int resize; + // need redraw Pixmap + int redraw; + // paddingxlr = horizontal padding left/right + // paddingx = horizontal padding between childs + int paddingxlr, paddingx, paddingy; + // parent Area + void *parent; + // panel + void *panel; + + // each object can overwrite following function + void (*_draw_foreground)(void *obj, cairo_t *c); + // update area's content and update size (width/heith). + // return '1' if size changed, '0' otherwise. + int (*_resize)(void *obj); + // after pos/size changed, the rendering engine will call _on_change_layout(Area*) + int on_changed; + void (*_on_change_layout)(void *obj); + const char* (*_get_tooltip_text)(void *obj); } Area; +// on startup, initialize fixed pos/size +void init_rendering(void *obj, int pos); - +void rendering(void *obj); +void size_by_content (Area *a); +void size_by_layout (Area *a, int pos, int level); // draw background and foreground void refresh (Area *a); + +// generic resize for SIZE_BY_LAYOUT objects +int resize_by_layout(void *obj); // 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); +// hide/unhide area +void hide(Area *a); +void show(Area *a); + +// draw pixmap +void draw (Area *a); +void draw_background (Area *a, cairo_t *c); 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); + +// clear pixmap with transparent color +void clear_pixmap(Pixmap p, int x, int y, int w, int h); #endif