summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorbakkeby <[email protected]>2022-10-16 21:32:01 +0200
committerbakkeby <[email protected]>2022-10-16 21:32:01 +0200
commite6a74ad3ea480ff7262af104db440d6bda0ab5ab (patch)
treec67ce0910f3c511e28dfedb04bced4baf7d69e4e
parentb732821f7b5458ae1bb2476da5441942ec8fa398 (diff)
downloaddwm-flexipatch-e6a74ad3ea480ff7262af104db440d6bda0ab5ab.tar.gz
dwm-flexipatch-e6a74ad3ea480ff7262af104db440d6bda0ab5ab.zip
roundedcorners: moving drawroundedcorners logic to resizeclient ref. #304
-rw-r--r--dwm.c25
-rw-r--r--patch/roundedcorners.c94
2 files changed, 51 insertions, 68 deletions
diff --git a/dwm.c b/dwm.c
index d0df3d7..25d57b6 100644
--- a/dwm.c
+++ b/dwm.c
@@ -1102,11 +1102,6 @@ arrangemon(Monitor *m)
strncpy(m->ltsymbol, m->lt[m->sellt]->symbol, sizeof m->ltsymbol);
if (m->lt[m->sellt]->arrange)
m->lt[m->sellt]->arrange(m);
- #if ROUNDED_CORNERS_PATCH
- Client *c;
- for (c = nexttiled(m->clients); c; c = nexttiled(c->next))
- drawroundedcorners(c);
- #endif // ROUNDED_CORNERS_PATCH
}
void
@@ -2746,9 +2741,6 @@ movemouse(const Arg *arg)
if (!selmon->lt[selmon->sellt]->arrange || c->isfloating) {
resize(c, nx, ny, c->w, c->h, 1);
}
- #if ROUNDED_CORNERS_PATCH
- drawroundedcorners(c);
- #endif // ROUNDED_CORNERS_PATCH
break;
}
} while (ev.type != ButtonRelease);
@@ -2772,9 +2764,6 @@ movemouse(const Arg *arg)
c->sfy = ny;
}
#endif // SAVEFLOATS_PATCH / EXRESIZE_PATCH
- #if ROUNDED_CORNERS_PATCH
- drawroundedcorners(c);
- #endif // ROUNDED_CORNERS_PATCH
ignoreconfigurerequests = 0;
}
@@ -2932,6 +2921,9 @@ resizeclient(Client *c, int x, int y, int w, int h)
c->expandmask = 0;
#endif // EXRESIZE_PATCH
wc.border_width = c->bw;
+ #if ROUNDED_CORNERS_PATCH
+ drawroundedcorners(c);
+ #endif // ROUNDED_CORNERS_PATCH
#if NOBORDER_PATCH
if (((nexttiled(c->mon->clients) == c && !nexttiled(c->next))
#if MONOCLE_LAYOUT
@@ -3064,9 +3056,6 @@ resizemouse(const Arg *arg)
}
if (!selmon->lt[selmon->sellt]->arrange || c->isfloating) {
resize(c, nx, ny, nw, nh, 1);
- #if ROUNDED_CORNERS_PATCH
- drawroundedcorners(c);
- #endif // ROUNDED_CORNERS_PATCH
}
break;
}
@@ -3482,10 +3471,6 @@ setfullscreen(Client *c, int fullscreen)
c->bw = 0;
c->isfloating = 1;
resizeclient(c, c->mon->mx, c->mon->my, c->mon->mw, c->mon->mh);
- #if ROUNDED_CORNERS_PATCH
- XRectangle rect = { .x = 0, .y = 0, .width = c->w, .height = c->h };
- XShapeCombineRectangles(dpy, c->win, ShapeBounding, 0, 0, &rect, 1, ShapeSet, 1);
- #endif // ROUNDED_CORNERS_PATCH
XRaiseWindow(dpy, c->win);
} else if (restorestate && (c->oldstate & (1 << 1))) {
c->bw = c->oldbw;
@@ -3520,10 +3505,6 @@ setfullscreen(Client *c, int fullscreen)
c->bw = 0;
c->isfloating = 1;
resizeclient(c, c->mon->mx, c->mon->my, c->mon->mw, c->mon->mh);
- #if ROUNDED_CORNERS_PATCH
- XRectangle rect = { .x = 0, .y = 0, .width = c->w, .height = c->h };
- XShapeCombineRectangles(dpy, c->win, ShapeBounding, 0, 0, &rect, 1, ShapeSet, 1);
- #endif // ROUNDED_CORNERS_PATCH
XRaiseWindow(dpy, c->win);
#endif // !FAKEFULLSCREEN_PATCH
} else if (!fullscreen && c->isfullscreen){
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);
}
-