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 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135
|
/*
* (C)opyright MMVII Robert Manea <rob dot manea at gmail dot com>
* See LICENSE file for license details.
*
*/
#include <X11/Xlib.h>
#include <X11/Xutil.h>
#ifdef DZEN_XINERAMA
#include <X11/extensions/Xinerama.h>
#endif
#define FONT "-*-fixed-*-*-*-*-*-*-*-*-*-*-*-*"
#define BGCOLOR "#111111"
#define FGCOLOR "grey70"
#define ALIGNCENTER 0
#define ALIGNLEFT 1
#define ALIGNRIGHT 2
#define MIN_BUF_SIZE 1024
#define MAX_LINE_LEN 1024
/* gui data structures */
enum { ColFG, ColBG, ColLast };
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;
};
/* title window */
struct TW {
int x, y, width, height;
Window win;
Drawable drawable;
char alignment;
Bool ishidden;
};
/* slave window */
struct SW {
int x, y, width, height;
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;
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;
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 aligne);
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 */
|