| dwm-alpha-6.1.diff - sites - public wiki contents of suckless.org | |
| git clone git://git.suckless.org/sites | |
| Log | |
| Files | |
| Refs | |
| --- | |
| dwm-alpha-6.1.diff (8683B) | |
| --- | |
| 1 diff --git a/config.def.h b/config.def.h | |
| 2 index 7054c06..4448d46 100644 | |
| 3 --- a/config.def.h | |
| 4 +++ b/config.def.h | |
| 5 @@ -11,6 +11,8 @@ static const char normfgcolor[] = "#bbbbbb"; | |
| 6 static const char selbordercolor[] = "#005577"; | |
| 7 static const char selbgcolor[] = "#005577"; | |
| 8 static const char selfgcolor[] = "#eeeeee"; | |
| 9 +static unsigned int baralpha = 0xd0; | |
| 10 +static unsigned int borderalpha = OPAQUE; | |
| 11 static const unsigned int borderpx = 1; /* border pixel of wind… | |
| 12 static const unsigned int snap = 32; /* snap pixel */ | |
| 13 static const int showbar = 1; /* 0 means no bar */ | |
| 14 diff --git a/config.mk b/config.mk | |
| 15 index 4eefb71..de25d2a 100644 | |
| 16 --- a/config.mk | |
| 17 +++ b/config.mk | |
| 18 @@ -22,7 +22,7 @@ FREETYPEINC = /usr/include/freetype2 | |
| 19 | |
| 20 # includes and libs | |
| 21 INCS = -I${X11INC} -I${FREETYPEINC} | |
| 22 -LIBS = -L${X11LIB} -lX11 ${XINERAMALIBS} ${FREETYPELIBS} | |
| 23 +LIBS = -L${X11LIB} -lX11 ${XINERAMALIBS} ${FREETYPELIBS} -lXrender | |
| 24 | |
| 25 # flags | |
| 26 CPPFLAGS = -D_BSD_SOURCE -D_POSIX_C_SOURCE=2 -DVERSION=\"${VERSION}\" $… | |
| 27 diff --git a/drw.c b/drw.c | |
| 28 index f49200b..12e3ebc 100644 | |
| 29 --- a/drw.c | |
| 30 +++ b/drw.c | |
| 31 @@ -61,7 +61,7 @@ utf8decode(const char *c, long *u, size_t clen) | |
| 32 } | |
| 33 | |
| 34 Drw * | |
| 35 -drw_create(Display *dpy, int screen, Window root, unsigned int w, unsig… | |
| 36 +drw_create(Display *dpy, int screen, Window root, unsigned int w, unsig… | |
| 37 { | |
| 38 Drw *drw; | |
| 39 | |
| 40 @@ -71,8 +71,11 @@ drw_create(Display *dpy, int screen, Window root, uns… | |
| 41 drw->root = root; | |
| 42 drw->w = w; | |
| 43 drw->h = h; | |
| 44 - drw->drawable = XCreatePixmap(dpy, root, w, h, DefaultDepth(dpy… | |
| 45 - drw->gc = XCreateGC(dpy, root, 0, NULL); | |
| 46 + drw->visual = visual; | |
| 47 + drw->depth = depth; | |
| 48 + drw->cmap = cmap; | |
| 49 + drw->drawable = XCreatePixmap(dpy, root, w, h, depth); | |
| 50 + drw->gc = XCreateGC(dpy, drw->drawable, 0, NULL); | |
| 51 drw->fontcount = 0; | |
| 52 XSetLineAttributes(dpy, drw->gc, 1, LineSolid, CapButt, JoinMit… | |
| 53 | |
| 54 @@ -86,7 +89,7 @@ drw_resize(Drw *drw, unsigned int w, unsigned int h) | |
| 55 drw->h = h; | |
| 56 if (drw->drawable) | |
| 57 XFreePixmap(drw->dpy, drw->drawable); | |
| 58 - drw->drawable = XCreatePixmap(drw->dpy, drw->root, w, h, Defaul… | |
| 59 + drw->drawable = XCreatePixmap(drw->dpy, drw->root, w, h, drw->d… | |
| 60 } | |
| 61 | |
| 62 void | |
| 63 @@ -180,16 +183,15 @@ drw_font_free(Fnt *font) | |
| 64 } | |
| 65 | |
| 66 Clr * | |
| 67 -drw_clr_create(Drw *drw, const char *clrname) | |
| 68 +drw_clr_create(Drw *drw, const char *clrname, unsigned int alpha) | |
| 69 { | |
| 70 Clr *clr; | |
| 71 | |
| 72 clr = ecalloc(1, sizeof(Clr)); | |
| 73 - if (!XftColorAllocName(drw->dpy, DefaultVisual(drw->dpy, drw->s… | |
| 74 - DefaultColormap(drw->dpy, drw->screen), | |
| 75 + if (!XftColorAllocName(drw->dpy, drw->visual, drw->cmap, | |
| 76 clrname, &clr->rgb)) | |
| 77 die("error, cannot allocate color '%s'\n", clrname); | |
| 78 - clr->pix = clr->rgb.pixel; | |
| 79 + clr->pix = (clr->rgb.pixel & 0x00ffffffU) | (alpha << 24); | |
| 80 | |
| 81 return clr; | |
| 82 } | |
| 83 @@ -245,9 +247,7 @@ drw_text(Drw *drw, int x, int y, unsigned int w, uns… | |
| 84 XSetForeground(drw->dpy, drw->gc, invert ? | |
| 85 drw->scheme->fg->pix : drw->scheme->bg->… | |
| 86 XFillRectangle(drw->dpy, drw->drawable, drw->gc, x, y, … | |
| 87 - d = XftDrawCreate(drw->dpy, drw->drawable, | |
| 88 - DefaultVisual(drw->dpy, drw->screen), | |
| 89 - DefaultColormap(drw->dpy, drw->screen… | |
| 90 + d = XftDrawCreate(drw->dpy, drw->drawable, drw->visual,… | |
| 91 } | |
| 92 | |
| 93 curfont = drw->fonts[0]; | |
| 94 diff --git a/drw.h b/drw.h | |
| 95 index e3b8515..1fed824 100644 | |
| 96 --- a/drw.h | |
| 97 +++ b/drw.h | |
| 98 @@ -30,6 +30,9 @@ typedef struct { | |
| 99 Display *dpy; | |
| 100 int screen; | |
| 101 Window root; | |
| 102 + Visual *visual; | |
| 103 + unsigned int depth; | |
| 104 + Colormap cmap; | |
| 105 Drawable drawable; | |
| 106 GC gc; | |
| 107 ClrScheme *scheme; | |
| 108 @@ -43,7 +46,7 @@ typedef struct { | |
| 109 } Extnts; | |
| 110 | |
| 111 /* Drawable abstraction */ | |
| 112 -Drw *drw_create(Display *, int, Window, unsigned int, unsigned int); | |
| 113 +Drw *drw_create(Display *, int, Window, unsigned int, unsigned int, Vis… | |
| 114 void drw_resize(Drw *, unsigned int, unsigned int); | |
| 115 void drw_free(Drw *); | |
| 116 | |
| 117 @@ -55,7 +58,7 @@ void drw_font_getexts(Fnt *, const char *, unsigned in… | |
| 118 unsigned int drw_font_getexts_width(Fnt *, const char *, unsigned int); | |
| 119 | |
| 120 /* Colour abstraction */ | |
| 121 -Clr *drw_clr_create(Drw *, const char *); | |
| 122 +Clr *drw_clr_create(Drw *, const char *, unsigned int); | |
| 123 void drw_clr_free(Clr *); | |
| 124 | |
| 125 /* Cursor abstraction */ | |
| 126 diff --git a/dwm.c b/dwm.c | |
| 127 index 0362114..17fe373 100644 | |
| 128 --- a/dwm.c | |
| 129 +++ b/dwm.c | |
| 130 @@ -57,6 +57,8 @@ | |
| 131 #define TAGMASK ((1 << LENGTH(tags)) - 1) | |
| 132 #define TEXTW(X) (drw_text(drw, 0, 0, 0, 0, (X), 0) + dr… | |
| 133 | |
| 134 +#define OPAQUE 0xffU | |
| 135 + | |
| 136 /* enums */ | |
| 137 enum { CurNormal, CurResize, CurMove, CurLast }; /* cursor */ | |
| 138 enum { SchemeNorm, SchemeSel, SchemeLast }; /* color schemes */ | |
| 139 @@ -232,6 +234,7 @@ static Monitor *wintomon(Window w); | |
| 140 static int xerror(Display *dpy, XErrorEvent *ee); | |
| 141 static int xerrordummy(Display *dpy, XErrorEvent *ee); | |
| 142 static int xerrorstart(Display *dpy, XErrorEvent *ee); | |
| 143 +static void xinitvisual(); | |
| 144 static void zoom(const Arg *arg); | |
| 145 | |
| 146 /* variables */ | |
| 147 @@ -267,6 +270,11 @@ static Drw *drw; | |
| 148 static Monitor *mons, *selmon; | |
| 149 static Window root; | |
| 150 | |
| 151 +static int useargb = 0; | |
| 152 +static Visual *visual; | |
| 153 +static int depth; | |
| 154 +static Colormap cmap; | |
| 155 + | |
| 156 /* configuration, allows nested code to access above variables */ | |
| 157 #include "config.h" | |
| 158 | |
| 159 @@ -1556,7 +1564,8 @@ setup(void) | |
| 160 sw = DisplayWidth(dpy, screen); | |
| 161 sh = DisplayHeight(dpy, screen); | |
| 162 root = RootWindow(dpy, screen); | |
| 163 - drw = drw_create(dpy, screen, root, sw, sh); | |
| 164 + xinitvisual(); | |
| 165 + drw = drw_create(dpy, screen, root, sw, sh, visual, depth, cmap… | |
| 166 drw_load_fonts(drw, fonts, LENGTH(fonts)); | |
| 167 if (!drw->fontcount) | |
| 168 die("no fonts could be loaded.\n"); | |
| 169 @@ -1580,12 +1589,12 @@ setup(void) | |
| 170 cursor[CurResize] = drw_cur_create(drw, XC_sizing); | |
| 171 cursor[CurMove] = drw_cur_create(drw, XC_fleur); | |
| 172 /* init appearance */ | |
| 173 - scheme[SchemeNorm].border = drw_clr_create(drw, normbordercolor… | |
| 174 - scheme[SchemeNorm].bg = drw_clr_create(drw, normbgcolor); | |
| 175 - scheme[SchemeNorm].fg = drw_clr_create(drw, normfgcolor); | |
| 176 - scheme[SchemeSel].border = drw_clr_create(drw, selbordercolor); | |
| 177 - scheme[SchemeSel].bg = drw_clr_create(drw, selbgcolor); | |
| 178 - scheme[SchemeSel].fg = drw_clr_create(drw, selfgcolor); | |
| 179 + scheme[SchemeNorm].border = drw_clr_create(drw, normbordercolor… | |
| 180 + scheme[SchemeNorm].bg = drw_clr_create(drw, normbgcolor, baralp… | |
| 181 + scheme[SchemeNorm].fg = drw_clr_create(drw, normfgcolor, OPAQUE… | |
| 182 + scheme[SchemeSel].border = drw_clr_create(drw, selbordercolor, … | |
| 183 + scheme[SchemeSel].bg = drw_clr_create(drw, selbgcolor, baralpha… | |
| 184 + scheme[SchemeSel].fg = drw_clr_create(drw, selfgcolor, OPAQUE); | |
| 185 /* init bars */ | |
| 186 updatebars(); | |
| 187 updatestatus(); | |
| 188 @@ -1798,15 +1807,17 @@ updatebars(void) | |
| 189 Monitor *m; | |
| 190 XSetWindowAttributes wa = { | |
| 191 .override_redirect = True, | |
| 192 - .background_pixmap = ParentRelative, | |
| 193 + .background_pixel = 0, | |
| 194 + .border_pixel = 0, | |
| 195 + .colormap = cmap, | |
| 196 .event_mask = ButtonPressMask|ExposureMask | |
| 197 }; | |
| 198 for (m = mons; m; m = m->next) { | |
| 199 if (m->barwin) | |
| 200 continue; | |
| 201 - m->barwin = XCreateWindow(dpy, root, m->wx, m->by, m->w… | |
| 202 - CopyFromParent, DefaultVisual… | |
| 203 - CWOverrideRedirect|CWBackPixm… | |
| 204 + m->barwin = XCreateWindow(dpy, root, m->wx, m->by, m->w… | |
| 205 + InputOutput, visual, | |
| 206 + CWOverrideRedirect|CWBackPixe… | |
| 207 XDefineCursor(dpy, m->barwin, cursor[CurNormal]->cursor… | |
| 208 XMapRaised(dpy, m->barwin); | |
| 209 } | |
| 210 @@ -2107,6 +2118,43 @@ xerrorstart(Display *dpy, XErrorEvent *ee) | |
| 211 } | |
| 212 | |
| 213 void | |
| 214 +xinitvisual() | |
| 215 +{ | |
| 216 + XVisualInfo *infos; | |
| 217 + XRenderPictFormat *fmt; | |
| 218 + int nitems; | |
| 219 + int i; | |
| 220 + | |
| 221 + XVisualInfo tpl = { | |
| 222 + .screen = screen, | |
| 223 + .depth = 32, | |
| 224 + .class = TrueColor | |
| 225 + }; | |
| 226 + long masks = VisualScreenMask | VisualDepthMask | VisualClassMa… | |
| 227 + | |
| 228 + infos = XGetVisualInfo(dpy, masks, &tpl, &nitems); | |
| 229 + visual = NULL; | |
| 230 + for(i = 0; i < nitems; i ++) { | |
| 231 + fmt = XRenderFindVisualFormat(dpy, infos[i].visual); | |
| 232 + if (fmt->type == PictTypeDirect && fmt->direct.alphaMas… | |
| 233 + visual = infos[i].visual; | |
| 234 + depth = infos[i].depth; | |
| 235 + cmap = XCreateColormap(dpy, root, visual, Alloc… | |
| 236 + useargb = 1; | |
| 237 + break; | |
| 238 + } | |
| 239 + } | |
| 240 + | |
| 241 + XFree(infos); | |
| 242 + | |
| 243 + if (! visual) { | |
| 244 + visual = DefaultVisual(dpy, screen); | |
| 245 + depth = DefaultDepth(dpy, screen); | |
| 246 + cmap = DefaultColormap(dpy, screen); | |
| 247 + } | |
| 248 +} | |
| 249 + | |
| 250 +void | |
| 251 zoom(const Arg *arg) | |
| 252 { | |
| 253 Client *c = selmon->sel; |