Introduction
Introduction Statistics Contact Development Disclaimer Help
dwm-pango-20230520-e81f17d.diff - sites - public wiki contents of suckless.org
git clone git://git.suckless.org/sites
Log
Files
Refs
---
dwm-pango-20230520-e81f17d.diff (22140B)
---
1 From 47099f4e65801269e7ec69bfd1f3c209b63da882 Mon Sep 17 00:00:00 2001
2 From: Khalid Bin Walid <[email protected]>
3 Date: Sat, 20 May 2023 20:38:49 +0900
4 Subject: [PATCH 1/2] apply dwm-pango patch
5
6 ---
7 config.def.h | 2 +-
8 config.mk | 4 +-
9 drw.c | 325 ++++++++++++++-------------------------------------
10 drw.h | 19 ++-
11 dwm.c | 28 ++---
12 util.h | 4 +
13 6 files changed, 117 insertions(+), 265 deletions(-)
14
15 diff --git a/config.def.h b/config.def.h
16 index 9efa774..ef0e1b8 100644
17 --- a/config.def.h
18 +++ b/config.def.h
19 @@ -5,7 +5,7 @@ static const unsigned int borderpx = 1; /* borde…
20 static const unsigned int snap = 32; /* snap pixel */
21 static const int showbar = 1; /* 0 means no bar */
22 static const int topbar = 1; /* 0 means bottom bar */
23 -static const char *fonts[] = { "monospace:size=10" };
24 +static const char font[] = "monospace 10";
25 static const char dmenufont[] = "monospace:size=10";
26 static const char col_gray1[] = "#222222";
27 static const char col_gray2[] = "#444444";
28 diff --git a/config.mk b/config.mk
29 index ba64d3d..96c25af 100644
30 --- a/config.mk
31 +++ b/config.mk
32 @@ -22,8 +22,8 @@ FREETYPEINC = /usr/include/freetype2
33 #MANPREFIX = ${PREFIX}/man
34
35 # includes and libs
36 -INCS = -I${X11INC} -I${FREETYPEINC}
37 -LIBS = -L${X11LIB} -lX11 ${XINERAMALIBS} ${FREETYPELIBS}
38 +INCS = -I${X11INC} -I${FREETYPEINC} `pkg-config --cflags xft pango pang…
39 +LIBS = -L${X11LIB} -lX11 ${XINERAMALIBS} ${FREETYPELIBS} `pkg-config --…
40
41 # flags
42 CPPFLAGS = -D_DEFAULT_SOURCE -D_BSD_SOURCE -D_XOPEN_SOURCE=700L -DVERSI…
43 diff --git a/drw.c b/drw.c
44 index a58a2b4..d7ebfd8 100644
45 --- a/drw.c
46 +++ b/drw.c
47 @@ -4,62 +4,12 @@
48 #include <string.h>
49 #include <X11/Xlib.h>
50 #include <X11/Xft/Xft.h>
51 +#include <pango/pango.h>
52 +#include <pango/pangoxft.h>
53
54 #include "drw.h"
55 #include "util.h"
56
57 -#define UTF_INVALID 0xFFFD
58 -#define UTF_SIZ 4
59 -
60 -static const unsigned char utfbyte[UTF_SIZ + 1] = {0x80, 0, 0xC0, 0x…
61 -static const unsigned char utfmask[UTF_SIZ + 1] = {0xC0, 0x80, 0xE0, 0x…
62 -static const long utfmin[UTF_SIZ + 1] = { 0, 0, 0x80, 0x800,…
63 -static const long utfmax[UTF_SIZ + 1] = {0x10FFFF, 0x7F, 0x7FF, 0xFFFF,…
64 -
65 -static long
66 -utf8decodebyte(const char c, size_t *i)
67 -{
68 - for (*i = 0; *i < (UTF_SIZ + 1); ++(*i))
69 - if (((unsigned char)c & utfmask[*i]) == utfbyte[*i])
70 - return (unsigned char)c & ~utfmask[*i];
71 - return 0;
72 -}
73 -
74 -static size_t
75 -utf8validate(long *u, size_t i)
76 -{
77 - if (!BETWEEN(*u, utfmin[i], utfmax[i]) || BETWEEN(*u, 0xD800, 0…
78 - *u = UTF_INVALID;
79 - for (i = 1; *u > utfmax[i]; ++i)
80 - ;
81 - return i;
82 -}
83 -
84 -static size_t
85 -utf8decode(const char *c, long *u, size_t clen)
86 -{
87 - size_t i, j, len, type;
88 - long udecoded;
89 -
90 - *u = UTF_INVALID;
91 - if (!clen)
92 - return 0;
93 - udecoded = utf8decodebyte(c[0], &len);
94 - if (!BETWEEN(len, 1, UTF_SIZ))
95 - return 1;
96 - for (i = 1, j = 1; i < clen && j < len; ++i, ++j) {
97 - udecoded = (udecoded << 6) | utf8decodebyte(c[i], &type…
98 - if (type)
99 - return j;
100 - }
101 - if (j < len)
102 - return 0;
103 - *u = udecoded;
104 - utf8validate(u, len);
105 -
106 - return len;
107 -}
108 -
109 Drw *
110 drw_create(Display *dpy, int screen, Window root, unsigned int w, unsig…
111 {
112 @@ -95,50 +45,41 @@ drw_free(Drw *drw)
113 {
114 XFreePixmap(drw->dpy, drw->drawable);
115 XFreeGC(drw->dpy, drw->gc);
116 - drw_fontset_free(drw->fonts);
117 + drw_font_free(drw->font);
118 free(drw);
119 }
120
121 /* This function is an implementation detail. Library users should use
122 - * drw_fontset_create instead.
123 + * drw_font_create instead.
124 */
125 static Fnt *
126 -xfont_create(Drw *drw, const char *fontname, FcPattern *fontpattern)
127 +xfont_create(Drw *drw, const char *fontname)
128 {
129 Fnt *font;
130 - XftFont *xfont = NULL;
131 - FcPattern *pattern = NULL;
132 -
133 - if (fontname) {
134 - /* Using the pattern found at font->xfont->pattern does…
135 - * same substitution results as using the pattern retur…
136 - * FcNameParse; using the latter results in the desired…
137 - * behaviour whereas the former just results in missing…
138 - * rectangles being drawn, at least with some fonts. */
139 - if (!(xfont = XftFontOpenName(drw->dpy, drw->screen, fo…
140 - fprintf(stderr, "error, cannot load font from n…
141 - return NULL;
142 - }
143 - if (!(pattern = FcNameParse((FcChar8 *) fontname))) {
144 - fprintf(stderr, "error, cannot parse font name …
145 - XftFontClose(drw->dpy, xfont);
146 - return NULL;
147 - }
148 - } else if (fontpattern) {
149 - if (!(xfont = XftFontOpenPattern(drw->dpy, fontpattern)…
150 - fprintf(stderr, "error, cannot load font from p…
151 - return NULL;
152 - }
153 - } else {
154 + PangoFontMap *fontmap;
155 + PangoContext *context;
156 + PangoFontDescription *desc;
157 + PangoFontMetrics *metrics;
158 +
159 + if (!fontname) {
160 die("no font specified.");
161 }
162
163 font = ecalloc(1, sizeof(Fnt));
164 - font->xfont = xfont;
165 - font->pattern = pattern;
166 - font->h = xfont->ascent + xfont->descent;
167 font->dpy = drw->dpy;
168
169 + fontmap = pango_xft_get_font_map(drw->dpy, drw->screen);
170 + context = pango_font_map_create_context(fontmap);
171 + desc = pango_font_description_from_string(fontname);
172 + font->layout = pango_layout_new(context);
173 + pango_layout_set_font_description(font->layout, desc);
174 +
175 + metrics = pango_context_get_metrics(context, desc, NULL);
176 + font->h = pango_font_metrics_get_height(metrics) / PANGO_SCALE;
177 +
178 + pango_font_metrics_unref(metrics);
179 + g_object_unref(context);
180 +
181 return font;
182 }
183
184 @@ -147,35 +88,28 @@ xfont_free(Fnt *font)
185 {
186 if (!font)
187 return;
188 - if (font->pattern)
189 - FcPatternDestroy(font->pattern);
190 - XftFontClose(font->dpy, font->xfont);
191 + if (font->layout)
192 + g_object_unref(font->layout);
193 free(font);
194 }
195
196 Fnt*
197 -drw_fontset_create(Drw* drw, const char *fonts[], size_t fontcount)
198 +drw_font_create(Drw* drw, const char font[])
199 {
200 - Fnt *cur, *ret = NULL;
201 - size_t i;
202 + Fnt *fnt = NULL;
203
204 - if (!drw || !fonts)
205 + if (!drw || !font)
206 return NULL;
207
208 - for (i = 1; i <= fontcount; i++) {
209 - if ((cur = xfont_create(drw, fonts[fontcount - i], NULL…
210 - cur->next = ret;
211 - ret = cur;
212 - }
213 - }
214 - return (drw->fonts = ret);
215 + fnt = xfont_create(drw, font);
216 +
217 + return (drw->font = fnt);
218 }
219
220 void
221 -drw_fontset_free(Fnt *font)
222 +drw_font_free(Fnt *font)
223 {
224 if (font) {
225 - drw_fontset_free(font->next);
226 xfont_free(font);
227 }
228 }
229 @@ -187,8 +121,8 @@ drw_clr_create(Drw *drw, Clr *dest, const char *clrn…
230 return;
231
232 if (!XftColorAllocName(drw->dpy, DefaultVisual(drw->dpy, drw->s…
233 - DefaultColormap(drw->dpy, drw->screen),
234 - clrname, dest))
235 + DefaultColormap(drw-…
236 + clrname, dest))
237 die("error, cannot allocate color '%s'", clrname);
238 }
239
240 @@ -209,13 +143,6 @@ drw_scm_create(Drw *drw, const char *clrnames[], si…
241 return ret;
242 }
243
244 -void
245 -drw_setfontset(Drw *drw, Fnt *set)
246 -{
247 - if (drw)
248 - drw->fonts = set;
249 -}
250 -
251 void
252 drw_setscheme(Drw *drw, Clr *scm)
253 {
254 @@ -236,26 +163,16 @@ drw_rect(Drw *drw, int x, int y, unsigned int w, u…
255 }
256
257 int
258 -drw_text(Drw *drw, int x, int y, unsigned int w, unsigned int h, unsign…
259 +drw_text(Drw *drw, int x, int y, unsigned int w, unsigned int h, unsign…
260 {
261 - int i, ty, ellipsis_x = 0;
262 - unsigned int tmpw, ew, ellipsis_w = 0, ellipsis_len;
263 + char buf[1024];
264 + int i, ty, th;
265 + unsigned int ew, eh;
266 XftDraw *d = NULL;
267 - Fnt *usedfont, *curfont, *nextfont;
268 - int utf8strlen, utf8charlen, render = x || y || w || h;
269 - long utf8codepoint = 0;
270 - const char *utf8str;
271 - FcCharSet *fccharset;
272 - FcPattern *fcpattern;
273 - FcPattern *match;
274 - XftResult result;
275 - int charexists = 0, overflow = 0;
276 - /* keep track of a couple codepoints for which we have no match…
277 - enum { nomatches_len = 64 };
278 - static struct { long codepoint[nomatches_len]; unsigned int idx…
279 - static unsigned int ellipsis_width = 0;
280 -
281 - if (!drw || (render && (!drw->scheme || !w)) || !text || !drw->…
282 + size_t len;
283 + int render = x || y || w || h;
284 +
285 + if (!drw || (render && !drw->scheme) || !text || !drw->font)
286 return 0;
287
288 if (!render) {
289 @@ -264,120 +181,47 @@ drw_text(Drw *drw, int x, int y, unsigned int w, …
290 XSetForeground(drw->dpy, drw->gc, drw->scheme[invert ? …
291 XFillRectangle(drw->dpy, drw->drawable, drw->gc, x, y, …
292 d = XftDrawCreate(drw->dpy, drw->drawable,
293 - DefaultVisual(drw->dpy, drw->screen),
294 - DefaultColormap(drw->dpy, drw->screen…
295 + DefaultVisual(drw->dp…
296 + DefaultColormap(drw->…
297 x += lpad;
298 w -= lpad;
299 }
300
301 - usedfont = drw->fonts;
302 - if (!ellipsis_width && render)
303 - ellipsis_width = drw_fontset_getwidth(drw, "...");
304 - while (1) {
305 - ew = ellipsis_len = utf8strlen = 0;
306 - utf8str = text;
307 - nextfont = NULL;
308 - while (*text) {
309 - utf8charlen = utf8decode(text, &utf8codepoint, …
310 - for (curfont = drw->fonts; curfont; curfont = c…
311 - charexists = charexists || XftCharExist…
312 - if (charexists) {
313 - drw_font_getexts(curfont, text,…
314 - if (ew + ellipsis_width <= w) {
315 - /* keep track where the…
316 - ellipsis_x = x + ew;
317 - ellipsis_w = w - ew;
318 - ellipsis_len = utf8strl…
319 - }
320 -
321 - if (ew + tmpw > w) {
322 - overflow = 1;
323 - /* called from drw_font…
324 - * it wants the width A…
325 - */
326 - if (!render)
327 - x += tmpw;
328 - else
329 - utf8strlen = el…
330 - } else if (curfont == usedfont)…
331 - utf8strlen += utf8charl…
332 - text += utf8charlen;
333 - ew += tmpw;
334 - } else {
335 - nextfont = curfont;
336 - }
337 - break;
338 - }
339 - }
340 + len = strlen(text);
341
342 - if (overflow || !charexists || nextfont)
343 - break;
344 - else
345 - charexists = 0;
346 + if (len) {
347 + drw_font_getexts(drw->font, text, len, &ew, &eh, markup…
348 + th = eh;
349 + /* shorten text if necessary */
350 + for (len = MIN(len, sizeof(buf) - 1); len && ew > w; le…
351 + drw_font_getexts(drw->font, text, len, &ew, &eh…
352 + if (eh > th)
353 + th = eh;
354 }
355
356 - if (utf8strlen) {
357 + if (len) {
358 + memcpy(buf, text, len);
359 + buf[len] = '\0';
360 + if (len < strlen(text))
361 + for (i = len; i && i > len - 3; buf[--i…
362 + ; /* NOP */
363 +
364 if (render) {
365 - ty = y + (h - usedfont->h) / 2 + usedfo…
366 - XftDrawStringUtf8(d, &drw->scheme[inver…
367 - usedfont->xfont, x, t…
368 + ty = y + (h - th) / 2;
369 + if(markup)
370 + pango_layout_set_markup(drw->fo…
371 + else
372 + pango_layout_set_text(drw->font…
373 + pango_xft_render_layout(d, &drw->scheme…
374 + drw->font->layout, x * PANGO_SC…
375 + if(markup) /* clear markup attributes */
376 + pango_layout_set_attributes(drw…
377 }
378 x += ew;
379 w -= ew;
380 }
381 - if (render && overflow)
382 - drw_text(drw, ellipsis_x, y, ellipsis_w, h, 0, …
383 -
384 - if (!*text || overflow) {
385 - break;
386 - } else if (nextfont) {
387 - charexists = 0;
388 - usedfont = nextfont;
389 - } else {
390 - /* Regardless of whether or not a fallback font…
391 - * character must be drawn. */
392 - charexists = 1;
393 -
394 - for (i = 0; i < nomatches_len; ++i) {
395 - /* avoid calling XftFontMatch if we kno…
396 - if (utf8codepoint == nomatches.codepoin…
397 - goto no_match;
398 - }
399 -
400 - fccharset = FcCharSetCreate();
401 - FcCharSetAddChar(fccharset, utf8codepoint);
402 -
403 - if (!drw->fonts->pattern) {
404 - /* Refer to the comment in xfont_create…
405 - die("the first font in the cache must b…
406 - }
407 -
408 - fcpattern = FcPatternDuplicate(drw->fonts->patt…
409 - FcPatternAddCharSet(fcpattern, FC_CHARSET, fcch…
410 - FcPatternAddBool(fcpattern, FC_SCALABLE, FcTrue…
411 -
412 - FcConfigSubstitute(NULL, fcpattern, FcMatchPatt…
413 - FcDefaultSubstitute(fcpattern);
414 - match = XftFontMatch(drw->dpy, drw->screen, fcp…
415 -
416 - FcCharSetDestroy(fccharset);
417 - FcPatternDestroy(fcpattern);
418 -
419 - if (match) {
420 - usedfont = xfont_create(drw, NULL, matc…
421 - if (usedfont && XftCharExists(drw->dpy,…
422 - for (curfont = drw->fonts; curf…
423 - ; /* NOP */
424 - curfont->next = usedfont;
425 - } else {
426 - xfont_free(usedfont);
427 - nomatches.codepoint[++nomatches…
428 -no_match:
429 - usedfont = drw->fonts;
430 - }
431 - }
432 - }
433 }
434 +
435 if (d)
436 XftDrawDestroy(d);
437
438 @@ -395,35 +239,40 @@ drw_map(Drw *drw, Window win, int x, int y, unsign…
439 }
440
441 unsigned int
442 -drw_fontset_getwidth(Drw *drw, const char *text)
443 +drw_font_getwidth(Drw *drw, const char *text, Bool markup)
444 {
445 - if (!drw || !drw->fonts || !text)
446 + if (!drw || !drw->font || !text)
447 return 0;
448 - return drw_text(drw, 0, 0, 0, 0, 0, text, 0);
449 + return drw_text(drw, 0, 0, 0, 0, 0, text, 0, markup);
450 }
451
452 unsigned int
453 -drw_fontset_getwidth_clamp(Drw *drw, const char *text, unsigned int n)
454 +drw_font_getwidth_clamp(Drw *drw, const char *text, unsigned int n, Boo…
455 {
456 unsigned int tmp = 0;
457 - if (drw && drw->fonts && text && n)
458 - tmp = drw_text(drw, 0, 0, 0, 0, 0, text, n);
459 + if (drw && drw->font && text && n)
460 + tmp = drw_text(drw, 0, 0, 0, 0, 0, text, n, markup);
461 return MIN(n, tmp);
462 }
463
464 void
465 -drw_font_getexts(Fnt *font, const char *text, unsigned int len, unsigne…
466 +drw_font_getexts(Fnt *font, const char *text, unsigned int len, unsigne…
467 {
468 - XGlyphInfo ext;
469 -
470 if (!font || !text)
471 return;
472
473 - XftTextExtentsUtf8(font->dpy, font->xfont, (XftChar8 *)text, le…
474 + PangoRectangle r;
475 + if(markup)
476 + pango_layout_set_markup(font->layout, text, len);
477 + else
478 + pango_layout_set_text(font->layout, text, len);
479 + pango_layout_get_extents(font->layout, 0, &r);
480 + if(markup) /* clear markup attributes */
481 + pango_layout_set_attributes(font->layout, NULL);
482 if (w)
483 - *w = ext.xOff;
484 + *w = r.width / PANGO_SCALE;
485 if (h)
486 - *h = font->h;
487 + *h = r.height / PANGO_SCALE;
488 }
489
490 Cur *
491 diff --git a/drw.h b/drw.h
492 index 6471431..9487c72 100644
493 --- a/drw.h
494 +++ b/drw.h
495 @@ -7,9 +7,7 @@ typedef struct {
496 typedef struct Fnt {
497 Display *dpy;
498 unsigned int h;
499 - XftFont *xfont;
500 - FcPattern *pattern;
501 - struct Fnt *next;
502 + PangoLayout *layout;
503 } Fnt;
504
505 enum { ColFg, ColBg, ColBorder }; /* Clr scheme index */
506 @@ -23,7 +21,7 @@ typedef struct {
507 Drawable drawable;
508 GC gc;
509 Clr *scheme;
510 - Fnt *fonts;
511 + Fnt *font;
512 } Drw;
513
514 /* Drawable abstraction */
515 @@ -32,11 +30,11 @@ void drw_resize(Drw *drw, unsigned int w, unsigned i…
516 void drw_free(Drw *drw);
517
518 /* Fnt abstraction */
519 -Fnt *drw_fontset_create(Drw* drw, const char *fonts[], size_t fontcount…
520 -void drw_fontset_free(Fnt* set);
521 -unsigned int drw_fontset_getwidth(Drw *drw, const char *text);
522 -unsigned int drw_fontset_getwidth_clamp(Drw *drw, const char *text, uns…
523 -void drw_font_getexts(Fnt *font, const char *text, unsigned int len, un…
524 +Fnt *drw_font_create(Drw* drw, const char font[]);
525 +void drw_font_free(Fnt* set);
526 +unsigned int drw_font_getwidth(Drw *drw, const char *text, Bool markup);
527 +unsigned int drw_font_getwidth_clamp(Drw *drw, const char *text, unsign…
528 +void drw_font_getexts(Fnt *font, const char *text, unsigned int len, un…
529
530 /* Colorscheme abstraction */
531 void drw_clr_create(Drw *drw, Clr *dest, const char *clrname);
532 @@ -47,12 +45,11 @@ Cur *drw_cur_create(Drw *drw, int shape);
533 void drw_cur_free(Drw *drw, Cur *cursor);
534
535 /* Drawing context manipulation */
536 -void drw_setfontset(Drw *drw, Fnt *set);
537 void drw_setscheme(Drw *drw, Clr *scm);
538
539 /* Drawing functions */
540 void drw_rect(Drw *drw, int x, int y, unsigned int w, unsigned int h, i…
541 -int drw_text(Drw *drw, int x, int y, unsigned int w, unsigned int h, un…
542 +int drw_text(Drw *drw, int x, int y, unsigned int w, unsigned int h, un…
543
544 /* Map functions */
545 void drw_map(Drw *drw, Window win, int x, int y, unsigned int w, unsign…
546 diff --git a/dwm.c b/dwm.c
547 index f1d86b2..e535d73 100644
548 --- a/dwm.c
549 +++ b/dwm.c
550 @@ -40,6 +40,7 @@
551 #include <X11/extensions/Xinerama.h>
552 #endif /* XINERAMA */
553 #include <X11/Xft/Xft.h>
554 +#include <pango/pango.h>
555
556 #include "drw.h"
557 #include "util.h"
558 @@ -55,7 +56,8 @@
559 #define WIDTH(X) ((X)->w + 2 * (X)->bw)
560 #define HEIGHT(X) ((X)->h + 2 * (X)->bw)
561 #define TAGMASK ((1 << LENGTH(tags)) - 1)
562 -#define TEXTW(X) (drw_fontset_getwidth(drw, (X)) + lrpad)
563 +#define TEXTW(X) (drw_font_getwidth(drw, (X), False) + l…
564 +#define TEXTWM(X) (drw_font_getwidth(drw, (X), True) + lr…
565
566 /* enums */
567 enum { CurNormal, CurResize, CurMove, CurLast }; /* cursor */
568 @@ -236,7 +238,7 @@ static void zoom(const Arg *arg);
569
570 /* variables */
571 static const char broken[] = "broken";
572 -static char stext[256];
573 +static char stext[512];
574 static int screen;
575 static int sw, sh; /* X display screen geometry width, height…
576 static int bh; /* bar height */
577 @@ -441,7 +443,7 @@ buttonpress(XEvent *e)
578 arg.ui = 1 << i;
579 } else if (ev->x < x + TEXTW(selmon->ltsymbol))
580 click = ClkLtSymbol;
581 - else if (ev->x > selmon->ww - (int)TEXTW(stext))
582 + else if (ev->x > selmon->ww - (int)TEXTWM(stext))
583 click = ClkStatusText;
584 else
585 click = ClkWinTitle;
586 @@ -699,8 +701,8 @@ void
587 drawbar(Monitor *m)
588 {
589 int x, w, tw = 0;
590 - int boxs = drw->fonts->h / 9;
591 - int boxw = drw->fonts->h / 6 + 2;
592 + int boxs = drw->font->h / 9;
593 + int boxw = drw->font->h / 6 + 2;
594 unsigned int i, occ = 0, urg = 0;
595 Client *c;
596
597 @@ -710,8 +712,8 @@ drawbar(Monitor *m)
598 /* draw status first so it can be overdrawn by tags later */
599 if (m == selmon) { /* status is only drawn on selected monitor …
600 drw_setscheme(drw, scheme[SchemeNorm]);
601 - tw = TEXTW(stext) - lrpad + 2; /* 2px right padding */
602 - drw_text(drw, m->ww - tw, 0, tw, bh, 0, stext, 0);
603 + tw = TEXTWM(stext) - lrpad + 2; /* 2px right padding */
604 + drw_text(drw, m->ww - tw, 0, tw, bh, 0, stext, 0, True);
605 }
606
607 for (c = m->clients; c; c = c->next) {
608 @@ -723,7 +725,7 @@ drawbar(Monitor *m)
609 for (i = 0; i < LENGTH(tags); i++) {
610 w = TEXTW(tags[i]);
611 drw_setscheme(drw, scheme[m->tagset[m->seltags] & 1 << …
612 - drw_text(drw, x, 0, w, bh, lrpad / 2, tags[i], urg & 1 …
613 + drw_text(drw, x, 0, w, bh, lrpad / 2, tags[i], urg & 1 …
614 if (occ & 1 << i)
615 drw_rect(drw, x + boxs, boxs, boxw, boxw,
616 m == selmon && selmon->sel && selmon->s…
617 @@ -732,12 +734,12 @@ drawbar(Monitor *m)
618 }
619 w = TEXTW(m->ltsymbol);
620 drw_setscheme(drw, scheme[SchemeNorm]);
621 - x = drw_text(drw, x, 0, w, bh, lrpad / 2, m->ltsymbol, 0);
622 + x = drw_text(drw, x, 0, w, bh, lrpad / 2, m->ltsymbol, 0, False…
623
624 if ((w = m->ww - tw - x) > bh) {
625 if (m->sel) {
626 drw_setscheme(drw, scheme[m == selmon ? SchemeS…
627 - drw_text(drw, x, 0, w, bh, lrpad / 2, m->sel->n…
628 + drw_text(drw, x, 0, w, bh, lrpad / 2, m->sel->n…
629 if (m->sel->isfloating)
630 drw_rect(drw, x + boxs, boxs, boxw, box…
631 } else {
632 @@ -1559,10 +1561,10 @@ setup(void)
633 sh = DisplayHeight(dpy, screen);
634 root = RootWindow(dpy, screen);
635 drw = drw_create(dpy, screen, root, sw, sh);
636 - if (!drw_fontset_create(drw, fonts, LENGTH(fonts)))
637 + if (!drw_font_create(drw, font))
638 die("no fonts could be loaded.");
639 - lrpad = drw->fonts->h;
640 - bh = drw->fonts->h + 2;
641 + lrpad = drw->font->h;
642 + bh = drw->font->h + 2;
643 updategeom();
644 /* init atoms */
645 utf8string = XInternAtom(dpy, "UTF8_STRING", False);
646 diff --git a/util.h b/util.h
647 index f633b51..531ab25 100644
648 --- a/util.h
649 +++ b/util.h
650 @@ -1,7 +1,11 @@
651 /* See LICENSE file for copyright and license details. */
652
653 +#ifndef MAX
654 #define MAX(A, B) ((A) > (B) ? (A) : (B))
655 +#endif
656 +#ifndef MIN
657 #define MIN(A, B) ((A) < (B) ? (A) : (B))
658 +#endif
659 #define BETWEEN(X, A, B) ((A) <= (X) && (X) <= (B))
660
661 void die(const char *fmt, ...);
662 --
663 2.40.1
664
665
666 From f54ad36bfe201c64f2f7b82c38c01e08a98fb485 Mon Sep 17 00:00:00 2001
667 From: Khalid Bin Walid <[email protected]>
668 Date: Sat, 20 May 2023 20:54:22 +0900
669 Subject: [PATCH 2/2] revert unintentional space to tab conversion
670
671 ---
672 drw.c | 8 ++++----
673 1 file changed, 4 insertions(+), 4 deletions(-)
674
675 diff --git a/drw.c b/drw.c
676 index d7ebfd8..908bb89 100644
677 --- a/drw.c
678 +++ b/drw.c
679 @@ -121,8 +121,8 @@ drw_clr_create(Drw *drw, Clr *dest, const char *clrn…
680 return;
681
682 if (!XftColorAllocName(drw->dpy, DefaultVisual(drw->dpy, drw->s…
683 - DefaultColormap(drw-…
684 - clrname, dest))
685 + DefaultColormap(drw->dpy, drw->screen),
686 + clrname, dest))
687 die("error, cannot allocate color '%s'", clrname);
688 }
689
690 @@ -181,8 +181,8 @@ drw_text(Drw *drw, int x, int y, unsigned int w, uns…
691 XSetForeground(drw->dpy, drw->gc, drw->scheme[invert ? …
692 XFillRectangle(drw->dpy, drw->drawable, drw->gc, x, y, …
693 d = XftDrawCreate(drw->dpy, drw->drawable,
694 - DefaultVisual(drw->dp…
695 - DefaultColormap(drw->…
696 + DefaultVisual(drw->dpy, drw->screen),
697 + DefaultColormap(drw->dpy, drw->screen));
698 x += lpad;
699 w -= lpad;
700 }
701 --
702 2.40.1
703
You are viewing proxied material from suckless.org. The copyright of proxied material belongs to its original authors. Any comments or complaints in relation to proxied material should be directed to the original authors of the content concerned. Please see the disclaimer for more details.