Sfoglia il codice sorgente

Configuring height directly by setting the height.

Rather than setting the padding.
master
phillbush 4 anni fa
parent
commit
685ca30d8d
3 ha cambiato i file con 26 aggiunte e 19 eliminazioni
  1. +6
    -1
      config.h
  2. +2
    -2
      xmenu.1
  3. +18
    -16
      xmenu.c

+ 6
- 1
config.h Vedi File

@@ -11,10 +11,15 @@ static const char *border_color = "#E6E6E6";

/* sizes in pixels */
static int width_pixels = 130; /* minimum width of a menu */
static int padding_pixels = 4; /* padding around label in a item */
static int height_pixels = 25; /* height of a single menu item */
static int border_pixels = 1; /* menu border */
static int separator_pixels = 3; /* space around separator */

/* the variables below cannot be set by X resources */

/* geometry of the right-pointing isoceles triangle for submenus */
static const int triangle_width = 3;
static const int triangle_height = 7;

/* padding of the area around the icon */
static const int iconpadding = 4;

+ 2
- 2
xmenu.1 Vedi File

@@ -99,8 +99,8 @@ The color of the separator between items in the menu.
.B xmenu.width
The minimum width, in pixels, of the items in the menu.
.TP
.B xmenu.padding
The size in pixels of the padding around the label text in items in the menu.
.B xmenu.height
The size in pixels of the height of a single menu item.
.TP
.B xmenu.borderWidth
The size in pixels of the border around the menu.


+ 18
- 16
xmenu.c Vedi File

@@ -13,7 +13,6 @@
#define PROGNAME "xmenu"
#define ITEMPREV 0
#define ITEMNEXT 1
#define IMGPADDING 8

/* macros */
#define LEN(x) (sizeof (x) / sizeof (x[0]))
@@ -79,6 +78,7 @@ static struct Item *allocitem(const char *label, const char *output, char *file)
static struct Menu *allocmenu(struct Menu *parent, struct Item *list, unsigned level);
static struct Menu *buildmenutree(unsigned level, const char *label, const char *output, char *file);
static struct Menu *parsestdin(void);
static Imlib_Image loadicon(const char *file, int size);
static void setupmenusize(struct Geometry *geom, struct Menu *menu);
static void setupmenupos(struct Geometry *geom, struct Menu *menu);
static void setupmenu(struct Geometry *geom, struct Menu *menu, XClassHint *classh);
@@ -207,9 +207,9 @@ getresources(void)
if (XrmGetResource(xdb, "xmenu.separatorWidth", "*", &type, &xval) == True)
if ((n = strtol(xval.addr, NULL, 10)) > 0)
separator_pixels = n;
if (XrmGetResource(xdb, "xmenu.padding", "*", &type, &xval) == True)
if (XrmGetResource(xdb, "xmenu.height", "*", &type, &xval) == True)
if ((n = strtol(xval.addr, NULL, 10)) > 0)
padding_pixels = n;
height_pixels = n;
if (XrmGetResource(xdb, "xmenu.width", "*", &type, &xval) == True)
if ((n = strtol(xval.addr, NULL, 10)) > 0)
width_pixels = n;
@@ -270,7 +270,7 @@ calcgeom(struct Geometry *geom)
XQueryPointer(dpy, rootwin, &w1, &w2, &geom->cursx, &geom->cursy, &a, &b, &mask);
geom->screenw = DisplayWidth(dpy, screen);
geom->screenh = DisplayHeight(dpy, screen);
geom->itemh = dc.font->height + padding_pixels * 2;
geom->itemh = height_pixels;
geom->itemw = width_pixels;
geom->border = border_pixels;
geom->separator = separator_pixels;
@@ -370,10 +370,10 @@ buildmenutree(unsigned level, const char *label, const char *output, char *file)

/* put the item in the menu tree */
if (prevmenu == NULL) { /* there is no menu yet */
menu = allocmenu(NULL, curritem, level);
rootmenu = menu;
prevmenu = menu;
curritem->prev = NULL;
menu = allocmenu(NULL, curritem, level);
rootmenu = menu;
prevmenu = menu;
curritem->prev = NULL;
} else if (level < prevmenu->level) { /* item is continuation of a parent menu */
/* go up the menu tree until find the menu this item continues */
for (menu = prevmenu, i = level;
@@ -499,12 +499,14 @@ setupmenusize(struct Geometry *geom, struct Menu *menu)
/* get length of item->label rendered in the font */
XftTextExtentsUtf8(dpy, dc.font, (XftChar8 *)item->label,
item->labellen, &ext);
labelwidth = ext.xOff + dc.font->height * 2 + IMGPADDING * 2;

/* set menu width */
labelwidth = ext.xOff + item->h * 2;
menu->w = MAX(menu->w, labelwidth);

/* create icon */
if (item->file != NULL)
item->icon = loadicon(item->file, dc.font->height);
item->icon = loadicon(item->file, item->h - iconpadding * 2);
}
}

@@ -734,16 +736,16 @@ drawitem(struct Menu *menu, struct Item *item, XftColor *color)
{
int x, y;

x = dc.font->height + IMGPADDING;
y = item->y + item->h/2 + dc.font->ascent/2 - 1;
x = item->h;
y = item->y + (item->h + dc.font->ascent) / 2;
XSetForeground(dpy, dc.gc, color[ColorFG].pixel);
XftDrawStringUtf8(menu->draw, &color[ColorFG], dc.font,
x, y, item->label, item->labellen);

/* draw triangle, if item contains a submenu */
if (item->submenu != NULL) {
x = menu->w - dc.font->height/2 - IMGPADDING/2 - triangle_width/2 - 1;
y = item->y + item->h/2 - triangle_height/2 - 1;
x = menu->w - (item->h + triangle_width + 1) / 2;
y = item->y + (item->h - triangle_height + 1) / 2;

XPoint triangle[] = {
{x, y},
@@ -758,8 +760,8 @@ drawitem(struct Menu *menu, struct Item *item, XftColor *color)

/* draw icon */
if (item->file != NULL) {
x = IMGPADDING / 2;
y = item->y + (item->h - dc.font->height) / 2;
x = iconpadding;
y = item->y + iconpadding;
imlib_context_set_drawable(menu->pixmap);
imlib_context_set_image(item->icon);
imlib_render_image_on_drawable(x, y);


Loading…
Annulla
Salva