libsl

shared code master of various suckless projects
git clone git://git.suckless.org/libsl
Log | Files | Refs | LICENSE

commit d616c471691af8ec05021c907d774ed8f14ec486
parent 206fe9b99f01604b10e6d8e5ab52a035712476f0
Author: Hiltjo Posthuma <hiltjo@codemadness.org>
Date:   Sat, 27 Sep 2025 12:09:58 +0200

add drw_clr_free and drw_scm_free for freeing schemes and colors

Other small cleanup:
- Change type to Clr (typedef to XftColor here, for X11 version it is XColor).
- Remove misleading comment.

Diffstat:
Mdrw.c | 28+++++++++++++++++++++++++---
Mdrw.h | 2++
2 files changed, 27 insertions(+), 3 deletions(-)

diff --git a/drw.c b/drw.c @@ -178,8 +178,7 @@ drw_clr_create(Drw *drw, Clr *dest, const char *clrname) die("error, cannot allocate color '%s'", clrname); } -/* Wrapper to create color schemes. The caller has to call free(3) on the - * returned color scheme when done using it. */ +/* Create color schemes. */ Clr * drw_scm_create(Drw *drw, const char *clrnames[], size_t clrcount) { @@ -187,7 +186,7 @@ drw_scm_create(Drw *drw, const char *clrnames[], size_t clrcount) Clr *ret; /* need at least two colors for a scheme */ - if (!drw || !clrnames || clrcount < 2 || !(ret = ecalloc(clrcount, sizeof(XftColor)))) + if (!drw || !clrnames || clrcount < 2 || !(ret = ecalloc(clrcount, sizeof(Clr)))) return NULL; for (i = 0; i < clrcount; i++) @@ -196,6 +195,29 @@ drw_scm_create(Drw *drw, const char *clrnames[], size_t clrcount) } void +drw_clr_free(Drw *drw, Clr *c) +{ + if (!drw || !c) + return; + + /* c is typedef XftColor Clr */ + XftColorFree(drw->dpy, DefaultVisual(drw->dpy, drw->screen), + DefaultColormap(drw->dpy, drw->screen), c); +} + +void +drw_scm_free(Drw *drw, Clr *scm, size_t clrcount) +{ + size_t i; + + if (!drw || !scm) + return; + + for (i = 0; i < clrcount; i++) + drw_clr_free(drw, &scm[i]); +} + +void drw_setfontset(Drw *drw, Fnt *set) { if (drw) diff --git a/drw.h b/drw.h @@ -40,7 +40,9 @@ void drw_font_getexts(Fnt *font, const char *text, unsigned int len, unsigned in /* Colorscheme abstraction */ void drw_clr_create(Drw *drw, Clr *dest, const char *clrname); +void drw_clr_free(Drw *drw, Clr *c); Clr *drw_scm_create(Drw *drw, const char *clrnames[], size_t clrcount); +void drw_scm_free(Drw *drw, Clr *scm, size_t clrcount); /* Cursor abstraction */ Cur *drw_cur_create(Drw *drw, int shape);