/* * (C)opyright 2007-2009 Robert Manea * See LICENSE file for license details. * */ #include #include #include #ifdef DZEN_XINERAMA #include #endif #ifdef DZEN_XFT #include #endif #define FONT "-*-fixed-*-*-*-*-*-*-*-*-*-*-*-*" #define BGCOLOR "#111111" #define FGCOLOR "grey70" #define ESC_CHAR '^' #define ALIGNCENTER 0 #define ALIGNLEFT 1 #define ALIGNRIGHT 2 #define MIN_BUF_SIZE 1024 #define MAX_LINE_LEN 8192 #define MAX_CLICKABLE_AREAS 256 #ifndef Button6 # define Button6 6 #endif #ifndef Button7 # define Button7 7 #endif enum { ColFG, ColBG, ColLast }; /* exapansion directions */ enum { noexpand, left, right, both }; typedef struct DZEN Dzen; typedef struct Fnt Fnt; typedef struct TW TWIN; typedef struct SW SWIN; typedef struct _Sline Sline; struct Fnt { XFontStruct *xfont; XFontSet set; int ascent; int descent; int height; #ifdef DZEN_XFT XftFont *xftfont; XGlyphInfo *extents; int width; #endif }; /* clickable areas */ typedef struct _CLICK_A { int active; int button; int start_x; int end_x; int start_y; int end_y; char cmd[1024]; } click_a; extern click_a sens_areas[MAX_CLICKABLE_AREAS]; extern int sens_areas_cnt; extern int xorig; /* title window */ struct TW { int x, y, width, height; char *name; Window win; Drawable drawable; char alignment; int expand; int x_right_corner; Bool ishidden; }; /* slave window */ struct SW { int x, y, width, height; char *name; Window win; Window *line; Drawable *drawable; /* input buffer */ char **tbuf; int tsize; int tcnt; /* line fg colors */ unsigned long *tcol; int max_lines; int first_line_vis; int last_line_vis; int sel_line; char alignment; Bool ismenu; Bool ishmenu; Bool issticky; Bool ismapped; }; struct DZEN { int x, y, w, h; Bool running; unsigned long norm[ColLast]; TWIN title_win; SWIN slave_win; /* sensitive areas */ Window sa_win; const char *fnt; const char *bg; const char *fg; int line_height; Display *dpy; int screen; unsigned int depth; Visual *visual; GC gc, rgc, tgc; Fnt font; Fnt fnpl[64]; Bool ispersistent; Bool tsupdate; Bool colorize; unsigned long timeout; long cur_line; int ret_val; /* should always be 0 if DZEN_XINERAMA not defined */ int xinescreen; }; extern Dzen dzen; void free_buffer(void); void x_draw_body(void); /* draw.c */ extern void drawtext(const char *text, int reverse, int line, int align); extern char * parse_line(const char * text, int linenr, int align, int reverse, int nodraw); extern long getcolor(const char *colstr); /* returns color of colstr */ extern void setfont(const char *fontstr); /* sets global font */ extern unsigned int textw(const char *text); /* returns width of text in px */ extern void drawheader(const char *text); extern void drawbody(char *text); /* util.c */ extern void *emalloc(unsigned int size); /* allocates memory, exits on error */ extern void eprint(const char *errstr, ...); /* prints errstr and exits with 1 */ extern char *estrdup(const char *str); /* duplicates str, exits on allocation error */ extern void spawn(const char *arg); /* execute arg */ extern long colorcache_get(const char *name); /* gets a cached color */ extern void colorcache_set(const char *name, long value); /* sets a cached color */ #ifdef DZEN_XFT extern int xftcolorcache_get(const char *name, XftColor *color); /* gets a cached color */ extern void xftcolorcache_set(const char *name, XftColor *color); /* sets a cached color */ #endif