sites

public wiki contents of suckless.org
git clone git://git.suckless.org/sites
Log | Files | Refs

dwm-bardwmlogo-6.6.diff (3292B)


      1 From c0e147bf031f9c2638e2c192a97e2d200e4b74be Mon Sep 17 00:00:00 2001
      2 From: Rizqi Nur Assyaufi <bandithijo@gmail.com>
      3 Date: Fri, 15 Aug 2025 20:49:26 +0800
      4 Subject: [PATCH] Add DWM logo on left bar before tags
      5 
      6 This patch adds a DWM logo to the left side of the status bar, positioned
      7 before the tags, for aesthetic or branding purposes.
      8 
      9 Defines a fixed logo width (`dwmlogowdth = 54`) and adjusts tag rendering to
     10 prevent overlap.
     11 
     12 Uses multiple `drw_rect()` calls to render a pixel-art style "dwm" logo using
     13 rectangles.
     14 
     15 This patch is purely visual and does not impact DWM's core functionality or
     16 performance. It may appeal to users who want a more personalized or distinctive
     17 appearance for their window manager.
     18 
     19 ---
     20  dwm.c | 34 +++++++++++++++++++++++++++++++++-
     21  1 file changed, 33 insertions(+), 1 deletion(-)
     22 
     23 diff --git a/dwm.c b/dwm.c
     24 index 1443802..c9b2858 100644
     25 --- a/dwm.c
     26 +++ b/dwm.c
     27 @@ -140,6 +140,10 @@ typedef struct {
     28  	int monitor;
     29  } Rule;
     30  
     31 +typedef struct {
     32 +	int x, y, w, h;
     33 +} DwmLogo;
     34 +
     35  /* function declarations */
     36  static void applyrules(Client *c);
     37  static int applysizehints(Client *c, int *x, int *y, int *w, int *h, int interact);
     38 @@ -240,6 +244,7 @@ static int screen;
     39  static int sw, sh;           /* X display screen geometry width, height */
     40  static int bh;               /* bar height */
     41  static int lrpad;            /* sum of left and right padding for text */
     42 +static int dwmlogowdth = 54; /* dwm logo width */
     43  static int (*xerrorxlib)(Display *, XErrorEvent *);
     44  static unsigned int numlockmask = 0;
     45  static void (*handler[LASTEvent]) (XEvent *) = {
     46 @@ -432,6 +437,7 @@ buttonpress(XEvent *e)
     47  	}
     48  	if (ev->window == selmon->barwin) {
     49  		i = x = 0;
     50 +		x = dwmlogowdth; /* dwm logo width */
     51  		do
     52  			x += TEXTW(tags[i]);
     53  		while (ev->x >= x && ++i < LENGTH(tags));
     54 @@ -698,6 +704,7 @@ void
     55  drawbar(Monitor *m)
     56  {
     57  	int x, w, tw = 0;
     58 +	int stroke = 4, letterHeight = bh - 4;
     59  	int boxs = drw->fonts->h / 9;
     60  	int boxw = drw->fonts->h / 6 + 2;
     61  	unsigned int i, occ = 0, urg = 0;
     62 @@ -718,7 +725,32 @@ drawbar(Monitor *m)
     63  		if (c->isurgent)
     64  			urg |= c->tags;
     65  	}
     66 -	x = 0;
     67 +
     68 +	/* use colored scheme for visibility */
     69 +	drw_setscheme(drw, scheme[SchemeNorm]);
     70 +
     71 +	/* draw dark background for logo */
     72 +	drw_rect(drw, 0, 0, dwmlogowdth, bh, 1, 1);
     73 +
     74 +	/* draw dwm logo */
     75 +	const DwmLogo dwmLogo[] = {
     76 +		{  0,  9, stroke, letterHeight / 2 }, /* d: left vertical */
     77 +		{  0, 15,     35, stroke           }, /* d: bottom horizontal */
     78 +		{ 13,  1, stroke, letterHeight     }, /* d: right vertical */
     79 +		{  0,  7,     15, stroke           }, /* d: top horizontal */
     80 +		{ 22,  7, stroke, letterHeight / 2 }, /* w: center vertical */
     81 +		{ 31,  7, stroke, letterHeight / 2 }, /* w: right vertical */
     82 +		{ 31,  7,     22, stroke           }, /* m: top horizontal */
     83 +		{ 40, 11, stroke, letterHeight / 2 }, /* m: center vertical */
     84 +		{ 49, 11, stroke, letterHeight / 2 }  /* m: right vertical */
     85 +	};
     86 +
     87 +	for (int i = 0; i < LENGTH(dwmLogo); i++) {
     88 +		drw_rect(drw, dwmLogo[i].x, dwmLogo[i].y, dwmLogo[i].w, dwmLogo[i].h, 1, 0);
     89 +	}
     90 +
     91 +	/* start drawing tags after logo */
     92 +	x = dwmlogowdth;
     93  	for (i = 0; i < LENGTH(tags); i++) {
     94  		w = TEXTW(tags[i]);
     95  		drw_setscheme(drw, scheme[m->tagset[m->seltags] & 1 << i ? SchemeSel : SchemeNorm]);
     96 -- 
     97 2.50.1
     98