X-Git-Url: http://git.subgeniuskitty.com/xmenu/.git/blobdiff_plain/8902c43b920e55bb96fc7006e6a10f6a6abf332e..6abae763c6cce70c9b753778b5e3742a7719715a:/xmenu.h diff --git a/xmenu.h b/xmenu.h index 11fd29f..051bc4a 100644 --- a/xmenu.h +++ b/xmenu.h @@ -1,13 +1,21 @@ #define PROGNAME "xmenu" -/* macros for keyboard menu navigation */ -#define ITEMPREV 0 -#define ITEMNEXT 1 +/* enum for keyboard menu navigation */ +enum { ITEMPREV, ITEMNEXT, ITEMFIRST, ITEMLAST }; + +/* enum for text alignment */ +enum {LeftAlignment, CenterAlignment, RightAlignment}; /* macros */ -#define LEN(x) (sizeof (x) / sizeof (x[0])) -#define MAX(x,y) ((x)>(y)?(x):(y)) -#define MIN(x,y) ((x)<(y)?(x):(y)) +#define LEN(x) (sizeof (x) / sizeof (x[0])) +#define MAX(x,y) ((x)>(y)?(x):(y)) +#define MIN(x,y) ((x)<(y)?(x):(y)) +#define BETWEEN(x, a, b) ((a) <= (x) && (x) <= (b)) +#define GETNUM(n, s) { \ + unsigned long __TMP__; \ + if ((__TMP__ = strtoul((s), NULL, 10)) < INT_MAX) \ + (n) = __TMP__; \ + } /* color enum */ enum {ColorFG, ColorBG, ColorLast}; @@ -17,28 +25,31 @@ enum {NetWMName, NetWMWindowType, NetWMWindowTypePopupMenu, NetLast}; /* configuration structure */ struct Config { + /* the values below are set by config.h */ const char *font; - const char *background_color; const char *foreground_color; const char *selbackground_color; const char *selforeground_color; const char *separator_color; const char *border_color; - int width_pixels; int height_pixels; int border_pixels; int separator_pixels; int gap_pixels; - int triangle_width; int triangle_height; - int iconpadding; + int horzpadding; + int alignment; - int cursx, cursy; /* cursor position */ - int screenw, screenh; /* screen width and height */ + /* the values below are set by options */ + int monitor; + int posx, posy; /* rootmenu position */ + + /* the value below is computed by xmenu */ + int iconsize; }; /* draw context structure */ @@ -49,7 +60,10 @@ struct DC { XftColor separator; GC gc; - XftFont *font; + + FcPattern *pattern; + XftFont **fonts; + size_t nfonts; }; /* menu item structure */ @@ -59,13 +73,19 @@ struct Item { char *file; /* filename of the icon */ int y; /* item y position relative to menu */ int h; /* item height */ - size_t labellen; /* strlen(label) */ + int textw; /* text width */ struct Item *prev; /* previous item */ struct Item *next; /* next item */ struct Menu *submenu; /* submenu spawned by clicking on item */ + Drawable sel, unsel; /* pixmap for selected and unselected item */ Imlib_Image icon; }; +/* monitor geometry structure */ +struct Monitor { + int x, y, w, h; /* monitor geometry */ +}; + /* menu structure */ struct Menu { struct Menu *parent; /* parent menu */ @@ -73,8 +93,9 @@ struct Menu { struct Item *list; /* list of items contained by the menu */ struct Item *selected; /* item currently selected in the menu */ int x, y, w, h; /* menu geometry */ + int hasicon; /* whether the menu has item with icons */ + int drawn; /* whether the menu was already drawn */ + int maxtextw; /* maximum text width */ unsigned level; /* menu level relative to root */ - Drawable pixmap; /* pixmap to draw the menu on */ - XftDraw *draw; Window win; /* menu window to map on the screen */ };