[hackers] [libsl] add drw_clr_free and drw_scm_free for freeing schemes and colors || Hiltjo Posthuma

From: <git_AT_suckless.org>
Date: Sat, 27 Sep 2025 12:14:02 +0200 (CEST)

commit d616c471691af8ec05021c907d774ed8f14ec486
Author: Hiltjo Posthuma <hiltjo_AT_codemadness.org>
AuthorDate: Sat Sep 27 12:09:58 2025 +0200
Commit: Hiltjo Posthuma <hiltjo_AT_codemadness.org>
CommitDate: Sat Sep 27 12:09:58 2025 +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.

diff --git a/drw.c b/drw.c
index c41e6af..98dbaa8 100644
--- a/drw.c
+++ b/drw.c
_AT_@ -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)
 {
_AT_@ -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++)
_AT_@ -195,6 +194,29 @@ drw_scm_create(Drw *drw, const char *clrnames[], size_t clrcount)
         return ret;
 }
 
+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)
 {
diff --git a/drw.h b/drw.h
index 6471431..bda06f9 100644
--- a/drw.h
+++ b/drw.h
_AT_@ -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);
Received on Sat Sep 27 2025 - 12:14:02 CEST

This archive was generated by hypermail 2.3.0 : Sat Sep 27 2025 - 12:24:41 CEST