tnew color stuff/new rendering stuff - dwm - [fork] customized build of dwm, th… | |
git clone git://src.adamsgaard.dk/dwm | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit b55bd709ee6d0b09c141bf5ffe0647866e0374ef | |
parent 9833610356f7ce033589680fddf87000e5788774 | |
Author: Anselm R. Garbe <[email protected]> | |
Date: Fri, 25 Aug 2006 12:59:45 +0200 | |
new color stuff/new rendering stuff | |
Diffstat: | |
M config.arg.h | 39 +++++++++++++++++++----------… | |
M config.default.h | 11 ++++++++--- | |
M draw.c | 49 ++++++++++++-----------------… | |
M dwm.h | 11 +++++++---- | |
M event.c | 4 +++- | |
M main.c | 14 +++++++++----- | |
6 files changed, 70 insertions(+), 58 deletions(-) | |
--- | |
diff --git a/config.arg.h b/config.arg.h | |
t@@ -4,50 +4,59 @@ | |
*/ | |
#define TAGS \ | |
-const char *tags[] = { "work", "net", "fnord", NULL }; | |
+const char *tags[] = { "1", "2", "3", "4", "5", NULL }; | |
#define DEFMODE dotile /* dofloat */ | |
-#define FONT "-*-terminus-medium-*-*-*-12-*-*-*-*-*-iso… | |
-#define BGCOLOR "#666699" | |
-#define FGCOLOR "#eeeeee" | |
-#define BORDERCOLOR "#9999CC" | |
+ | |
+#define FONT "fixed" | |
+#define SELBGCOLOR "#666699" | |
+#define SELFGCOLOR "#eeeeee" | |
+#define NORMBGCOLOR "#333366" | |
+#define NORMFGCOLOR "#cccccc" | |
+#define STATUSBGCOLOR "#dddddd" | |
+#define STATUSFGCOLOR "#222222" | |
+ | |
#define MODKEY Mod1Mask | |
#define MASTERW 60 /* percent */ | |
#define KEYS \ | |
static Key key[] = { \ | |
/* modifier key function … | |
- { MODKEY|ShiftMask, XK_Return, spawn, \ | |
- { .cmd = "exec uxterm -bg '#e0e0e0' -fg '#000000' -cr '#000000… | |
- { MODKEY, XK_p, spawn, \ | |
- { .cmd = "exec `ls -lL /usr/bin /usr/X11R6/bin /usr/local/bin … | |
- "awk 'NF>2 && $1 ~ /^[^d].*x/ {print $NF}' | sort -u |… | |
- { MODKEY, XK_j, focusnext, … | |
- { MODKEY, XK_k, focusprev, … | |
+ { MODKEY|ShiftMask, XK_Return, spawn, … | |
+ { MODKEY, XK_Tab, focusnext, … | |
+ { MODKEY|ShiftMask, XK_Tab, focusprev, … | |
{ MODKEY, XK_Return, zoom, … | |
{ MODKEY, XK_m, togglemax, … | |
{ MODKEY|ShiftMask, XK_1, tag, … | |
{ MODKEY|ShiftMask, XK_2, tag, … | |
{ MODKEY|ShiftMask, XK_3, tag, … | |
+ { MODKEY|ShiftMask, XK_4, tag, … | |
+ { MODKEY|ShiftMask, XK_5, tag, … | |
{ MODKEY|ControlMask|ShiftMask, XK_1, toggletag,… | |
{ MODKEY|ControlMask|ShiftMask, XK_2, toggletag,… | |
{ MODKEY|ControlMask|ShiftMask, XK_3, toggletag,… | |
+ { MODKEY|ControlMask|ShiftMask, XK_4, toggletag,… | |
+ { MODKEY|ControlMask|ShiftMask, XK_5, toggletag,… | |
{ MODKEY|ShiftMask, XK_c, killclient, … | |
{ MODKEY, XK_space, togglemode, {… | |
{ MODKEY, XK_1, view, … | |
{ MODKEY, XK_2, view, … | |
{ MODKEY, XK_3, view, … | |
+ { MODKEY, XK_4, view, … | |
+ { MODKEY, XK_5, view, … | |
{ MODKEY|ControlMask, XK_1, toggleview, … | |
{ MODKEY|ControlMask, XK_2, toggleview, … | |
{ MODKEY|ControlMask, XK_3, toggleview, … | |
+ { MODKEY|ControlMask, XK_4, toggleview, … | |
+ { MODKEY|ControlMask, XK_5, toggleview, … | |
{ MODKEY|ShiftMask, XK_q, quit, … | |
}; | |
+/* Query class:instance:title for regex matching info with following command: | |
+ * xprop | awk -F '"' '/^WM_CLASS/ { printf("%s:%s:",$4,$2) }; /^WM_NAME/{ pri… | |
#define RULES \ | |
static Rule rule[] = { \ | |
/* class:instance:title regex tags regex isfloat */ \ | |
- { "Firefox.*", "net", False }, \ | |
+ { "Firefox.*", "2", False }, \ | |
{ "Gimp.*", NULL, True}, \ | |
- { "MPlayer.*", NULL, True}, \ | |
- { "Acroread.*", NULL, True}, \ | |
}; | |
diff --git a/config.default.h b/config.default.h | |
t@@ -7,10 +7,15 @@ | |
const char *tags[] = { "1", "2", "3", "4", "5", NULL }; | |
#define DEFMODE dotile /* dofloat */ | |
+ | |
#define FONT "fixed" | |
-#define BGCOLOR "#666699" | |
-#define FGCOLOR "#eeeeee" | |
-#define BORDERCOLOR "#9999CC" | |
+#define SELBGCOLOR "#666699" | |
+#define SELFGCOLOR "#eeeeee" | |
+#define NORMBGCOLOR "#333366" | |
+#define NORMFGCOLOR "#cccccc" | |
+#define STATUSBGCOLOR "#dddddd" | |
+#define STATUSFGCOLOR "#222222" | |
+ | |
#define MODKEY Mod1Mask | |
#define MASTERW 60 /* percent */ | |
diff --git a/draw.c b/draw.c | |
t@@ -22,29 +22,16 @@ textnw(const char *text, unsigned int len) | |
} | |
static void | |
-drawtext(const char *text, Bool invert, Bool highlight) | |
+drawtext(const char *text, unsigned long col[ColLast], Bool highlight) | |
{ | |
int x, y, w, h; | |
static char buf[256]; | |
unsigned int len, olen; | |
XGCValues gcv; | |
- XPoint points[5]; | |
XRectangle r = { dc.x, dc.y, dc.w, dc.h }; | |
- XSetForeground(dpy, dc.gc, invert ? dc.fg : dc.bg); | |
+ XSetForeground(dpy, dc.gc, col[ColBG]); | |
XFillRectangles(dpy, dc.drawable, dc.gc, &r, 1); | |
- points[0].x = dc.x; | |
- points[0].y = dc.y; | |
- points[1].x = dc.w - 1; | |
- points[1].y = 0; | |
- points[2].x = 0; | |
- points[2].y = dc.h - 1; | |
- points[3].x = -(dc.w - 1); | |
- points[3].y = 0; | |
- points[4].x = 0; | |
- points[4].y = -(dc.h - 1); | |
- XSetForeground(dpy, dc.gc, dc.border); | |
- XDrawLines(dpy, dc.drawable, dc.gc, points, 5, CoordModePrevious); | |
if(!text) | |
return; | |
t@@ -74,15 +61,14 @@ drawtext(const char *text, Bool invert, Bool highlight) | |
if(w > dc.w) | |
return; /* too long */ | |
- gcv.foreground = invert ? dc.bg : dc.fg; | |
- gcv.background = invert ? dc.fg : dc.bg; | |
+ gcv.foreground = col[ColFG]; | |
if(dc.font.set) { | |
- XChangeGC(dpy, dc.gc, GCForeground | GCBackground, &gcv); | |
+ XChangeGC(dpy, dc.gc, GCForeground, &gcv); | |
XmbDrawString(dpy, dc.drawable, dc.font.set, dc.gc, x, y, buf,… | |
} | |
else { | |
gcv.font = dc.font.xfont->fid; | |
- XChangeGC(dpy, dc.gc, GCForeground | GCBackground | GCFont, &g… | |
+ XChangeGC(dpy, dc.gc, GCForeground | GCFont, &gcv); | |
XDrawString(dpy, dc.drawable, dc.gc, x, y, buf, len); | |
} | |
if(highlight) { | |
t@@ -108,21 +94,25 @@ drawall() | |
void | |
drawstatus() | |
{ | |
+ static const char *mode[] = { "~", "=" }; | |
int i, x; | |
- Bool istile = arrange == dotile; | |
dc.x = dc.y = 0; | |
dc.w = bw; | |
- drawtext(NULL, !istile, False); | |
+ | |
+ if(!modew) | |
+ modew = textw(mode[0]) > textw(mode[1]) ? textw(mode[0]) : tex… | |
+ drawtext(mode[arrange == dotile ? 1 : 0], dc.status, False); | |
dc.w = 0; | |
+ dc.x = modew; | |
for(i = 0; i < ntags; i++) { | |
dc.x += dc.w; | |
dc.w = textw(tags[i]); | |
- if(istile) | |
- drawtext(tags[i], seltag[i], sel && sel->tags[i]); | |
+ if(seltag[i]) | |
+ drawtext(tags[i], dc.sel, sel && sel->tags[i]); | |
else | |
- drawtext(tags[i], !seltag[i], sel && sel->tags[i]); | |
+ drawtext(tags[i], dc.norm, sel && sel->tags[i]); | |
} | |
x = dc.x + dc.w; | |
dc.w = textw(stext); | |
t@@ -131,11 +121,11 @@ drawstatus() | |
dc.x = x; | |
dc.w = bw - x; | |
} | |
- drawtext(stext, !istile, False); | |
+ drawtext(stext, dc.status, False); | |
if(sel && ((dc.w = dc.x - x) > bh)) { | |
dc.x = x; | |
- drawtext(sel->name, istile, False); | |
+ drawtext(sel->name, dc.sel, False); | |
} | |
XCopyArea(dpy, dc.drawable, barwin, dc.gc, 0, 0, bw, bh, 0, 0); | |
XSync(dpy, False); | |
t@@ -145,20 +135,19 @@ void | |
drawtitle(Client *c) | |
{ | |
int i; | |
- Bool istile = arrange == dotile; | |
if(c == sel && issel) { | |
drawstatus(); | |
XUnmapWindow(dpy, c->twin); | |
- XSetWindowBorder(dpy, c->win, dc.fg); | |
+ XSetWindowBorder(dpy, c->win, dc.sel[ColBG]); | |
return; | |
} | |
- XSetWindowBorder(dpy, c->win, dc.bg); | |
+ XSetWindowBorder(dpy, c->win, dc.norm[ColBG]); | |
XMapWindow(dpy, c->twin); | |
dc.x = dc.y = 0; | |
dc.w = c->tw; | |
- drawtext(c->name, !istile, False); | |
+ drawtext(c->name, dc.norm, False); | |
XCopyArea(dpy, dc.drawable, c->twin, dc.gc, 0, 0, c->tw, c->th, 0, 0); | |
XSync(dpy, False); | |
} | |
diff --git a/dwm.h b/dwm.h | |
t@@ -23,6 +23,9 @@ enum { WMProtocols, WMDelete, WMLast }; | |
/* cursor */ | |
enum { CurNormal, CurResize, CurMove, CurLast }; | |
+/* color */ | |
+enum { ColFG, ColBG, ColLast }; | |
+ | |
/* window corners */ | |
typedef enum { TopLeft, TopRight, BotLeft, BotRight } Corner; | |
t@@ -36,9 +39,9 @@ typedef struct { | |
typedef struct { /* draw context */ | |
int x, y, w, h; | |
- unsigned long bg; | |
- unsigned long fg; | |
- unsigned long border; | |
+ unsigned long norm[ColLast]; | |
+ unsigned long sel[ColLast]; | |
+ unsigned long status[ColLast]; | |
Drawable drawable; | |
Fnt font; | |
GC gc; | |
t@@ -66,7 +69,7 @@ struct Client { | |
extern const char *tags[]; | |
extern char stext[1024]; | |
extern int screen, sx, sy, sw, sh, bx, by, bw, bh, mw; | |
-extern unsigned int ntags, numlockmask; | |
+extern unsigned int ntags, numlockmask, modew; | |
extern void (*handler[LASTEvent])(XEvent *); | |
extern void (*arrange)(Arg *); | |
extern Atom wmatom[WMLast], netatom[NetLast]; | |
diff --git a/event.c b/event.c | |
t@@ -105,7 +105,9 @@ buttonpress(XEvent *e) | |
XButtonPressedEvent *ev = &e->xbutton; | |
if(barwin == ev->window) { | |
- x = 0; | |
+ if(ev->x < modew) | |
+ return; | |
+ x = modew; | |
for(a.i = 0; a.i < ntags; a.i++) { | |
x += textw(tags[a.i]); | |
if(ev->x < x) { | |
diff --git a/main.c b/main.c | |
t@@ -20,7 +20,7 @@ | |
char stext[1024]; | |
Bool *seltag; | |
int screen, sx, sy, sw, sh, bx, by, bw, bh, mw; | |
-unsigned int ntags, numlockmask; | |
+unsigned int ntags, numlockmask, modew; | |
Atom wmatom[WMLast], netatom[NetLast]; | |
Bool running = True; | |
Bool issel = True; | |
t@@ -121,11 +121,15 @@ setup() | |
seltag[0] = True; | |
/* style */ | |
- dc.bg = getcolor(BGCOLOR); | |
- dc.fg = getcolor(FGCOLOR); | |
- dc.border = getcolor(BORDERCOLOR); | |
+ dc.norm[ColBG] = getcolor(NORMBGCOLOR); | |
+ dc.norm[ColFG] = getcolor(NORMFGCOLOR); | |
+ dc.sel[ColBG] = getcolor(SELBGCOLOR); | |
+ dc.sel[ColFG] = getcolor(SELFGCOLOR); | |
+ dc.status[ColBG] = getcolor(STATUSBGCOLOR); | |
+ dc.status[ColFG] = getcolor(STATUSFGCOLOR); | |
setfont(FONT); | |
+ modew = 0; | |
sx = sy = 0; | |
sw = DisplayWidth(dpy, screen); | |
sh = DisplayHeight(dpy, screen); | |
t@@ -133,7 +137,7 @@ setup() | |
bx = by = 0; | |
bw = sw; | |
- dc.h = bh = dc.font.height + 4; | |
+ dc.h = bh = dc.font.height + 2; | |
wa.override_redirect = 1; | |
wa.background_pixmap = ParentRelative; | |
wa.event_mask = ButtonPressMask | ExposureMask; |