diff options
| author | bakkeby <[email protected]> | 2022-10-16 21:32:01 +0200 |
|---|---|---|
| committer | bakkeby <[email protected]> | 2022-10-16 21:32:01 +0200 |
| commit | e6a74ad3ea480ff7262af104db440d6bda0ab5ab (patch) | |
| tree | c67ce0910f3c511e28dfedb04bced4baf7d69e4e /patch/roundedcorners.c | |
| parent | b732821f7b5458ae1bb2476da5441942ec8fa398 (diff) | |
| download | dwm-flexipatch-e6a74ad3ea480ff7262af104db440d6bda0ab5ab.tar.gz dwm-flexipatch-e6a74ad3ea480ff7262af104db440d6bda0ab5ab.zip | |
roundedcorners: moving drawroundedcorners logic to resizeclient ref. #304
Diffstat (limited to 'patch/roundedcorners.c')
| -rw-r--r-- | patch/roundedcorners.c | 94 |
1 files changed, 48 insertions, 46 deletions
diff --git a/patch/roundedcorners.c b/patch/roundedcorners.c index 881dbab..c6a1bbb 100644 --- a/patch/roundedcorners.c +++ b/patch/roundedcorners.c @@ -2,50 +2,52 @@ void drawroundedcorners(Client *c) { - if (corner_radius <= 0 || !c || c->isfullscreen) - return; - - Window win; - win = c->win; - if (!win) - return; - - XWindowAttributes win_attr; - if (!XGetWindowAttributes(dpy, win, &win_attr)) - return; - - int dia = 2 * corner_radius; - int w = c->w; - int h = c->h; - if (w < dia || h < dia) - return; - - Pixmap mask; - mask = XCreatePixmap(dpy, win, w, h, 1); - if (!mask) - return; - - XGCValues xgcv; - GC shape_gc; - shape_gc = XCreateGC(dpy, mask, 0, &xgcv); - - if (!shape_gc) { - XFreePixmap(dpy, mask); - free(shape_gc); - return; - } - - XSetForeground(dpy, shape_gc, 0); - XFillRectangle(dpy, mask, shape_gc, 0, 0, w, h); - XSetForeground(dpy, shape_gc, 1); - XFillArc(dpy, mask, shape_gc, 0, 0, dia, dia, 0, 23040); - XFillArc(dpy, mask, shape_gc, w-dia-1, 0, dia, dia, 0, 23040); - XFillArc(dpy, mask, shape_gc, 0, h-dia-1, dia, dia, 0, 23040); - XFillArc(dpy, mask, shape_gc, w-dia-1, h-dia-1, dia, dia, 0, 23040); - XFillRectangle(dpy, mask, shape_gc, corner_radius, 0, w-dia, h); - XFillRectangle(dpy, mask, shape_gc, 0, corner_radius, w, h-dia); - XShapeCombineMask(dpy, win, ShapeBounding, 0, 0, mask, ShapeSet); - XFreePixmap(dpy, mask); - XFreeGC(dpy, shape_gc); + XWindowAttributes win_attr; + Pixmap mask; + XGCValues xgcv; + GC shape_gc; + int dia, w, h; + + if (corner_radius <= 0 || !c) + return; + + /* Clear window shape if fullscreen */ + if (c->w == c->mon->mw && c->h == c->mon->mh) { + XRectangle rect = { .x = 0, .y = 0, .width = c->w, .height = c->h }; + XShapeCombineRectangles(dpy, c->win, ShapeBounding, 0, 0, &rect, 1, ShapeSet, 1); + return; + } + + if (!XGetWindowAttributes(dpy, c->win, &win_attr)) + return; + + dia = 2 * corner_radius; + w = c->w + 2 * c->bw; + h = c->h + 2 * c->bw; + if (w < dia || h < dia) + return; + + mask = XCreatePixmap(dpy, c->win, w, h, 1); + if (!mask) + return; + + shape_gc = XCreateGC(dpy, mask, 0, &xgcv); + if (!shape_gc) { + XFreePixmap(dpy, mask); + free(shape_gc); + return; + } + + XSetForeground(dpy, shape_gc, 0); + XFillRectangle(dpy, mask, shape_gc, 0, 0, w, h); + XSetForeground(dpy, shape_gc, 1); + XFillArc(dpy, mask, shape_gc, 0, 0, dia, dia, 0, 23040); + XFillArc(dpy, mask, shape_gc, w-dia-1, 0, dia, dia, 0, 23040); + XFillArc(dpy, mask, shape_gc, 0, h-dia-1, dia, dia, 0, 23040); + XFillArc(dpy, mask, shape_gc, w-dia-1, h-dia-1, dia, dia, 0, 23040); + XFillRectangle(dpy, mask, shape_gc, corner_radius, 0, w-dia, h); + XFillRectangle(dpy, mask, shape_gc, 0, corner_radius, w, h-dia); + XShapeCombineMask(dpy, c->win, ShapeBounding, -c->bw, -c->bw, mask, ShapeSet); + XFreePixmap(dpy, mask); + XFreeGC(dpy, shape_gc); } - |
