Introduction
Introduction Statistics Contact Development Disclaimer Help
introduce drw_fontset_getwidth_clamp() - dmenu - my customized version of dmenu…
git clone git://git.codemadness.org/dmenu
Log
Files
Refs
README
LICENSE
---
commit 6be057f060543bb0f3ed9423904263617cdffffe
parent 41fdabbf7c517f8d524b70cbd78238cc319ccef3
Author: NRK <[email protected]>
Date: Thu, 24 Mar 2022 02:00:00 +0600
introduce drw_fontset_getwidth_clamp()
getting the width of a string is an O(n) operation, and in many cases
users only care about getting the width upto a certain number.
instead of calling drw_fontset_getwidth() and *then* clamping the
result, this patch introduces drw_fontset_getwidth_clamp() function,
similar to strnlen(), which will stop once we reach n.
the `invert` parameter was overloaded internally to preserve the API,
however library users should be calling drw_fontset_getwidth_clamp() and
not depend upon internal behavior of drw_text().
Diffstat:
M drw.c | 19 +++++++++++++++++--
M drw.h | 1 +
2 files changed, 18 insertions(+), 2 deletions(-)
---
diff --git a/drw.c b/drw.c
@@ -268,7 +268,7 @@ drw_text(Drw *drw, int x, int y, unsigned int w, unsigned i…
return 0;
if (!render) {
- w = ~w;
+ w = invert ? invert : ~invert;
} else {
XSetForeground(drw->dpy, drw->gc, drw->scheme[invert ? ColFg :…
XFillRectangle(drw->dpy, drw->drawable, drw->gc, x, y, w, h);
@@ -300,7 +300,13 @@ drw_text(Drw *drw, int x, int y, unsigned int w, unsigned …
if (ew + tmpw > w) {
overflow = 1;
- utf8strlen = ellipsis_len;
+ /* called from drw_fontset_get…
+ * it wants the width AFTER th…
+ */
+ if (!render)
+ x += tmpw;
+ else
+ utf8strlen = ellipsis_…
} else if (curfont == usedfont) {
utf8strlen += utf8charlen;
text += utf8charlen;
@@ -397,6 +403,15 @@ drw_fontset_getwidth(Drw *drw, const char *text)
return drw_text(drw, 0, 0, 0, 0, 0, text, 0);
}
+unsigned int
+drw_fontset_getwidth_clamp(Drw *drw, const char *text, unsigned int n)
+{
+ unsigned int tmp = 0;
+ if (drw && drw->fonts && text && n)
+ tmp = drw_text(drw, 0, 0, 0, 0, 0, text, n);
+ return MIN(n, tmp);
+}
+
void
drw_font_getexts(Fnt *font, const char *text, unsigned int len, unsigned int *…
{
diff --git a/drw.h b/drw.h
@@ -35,6 +35,7 @@ void drw_free(Drw *drw);
Fnt *drw_fontset_create(Drw* drw, const char *fonts[], size_t fontcount);
void drw_fontset_free(Fnt* set);
unsigned int drw_fontset_getwidth(Drw *drw, const char *text);
+unsigned int drw_fontset_getwidth_clamp(Drw *drw, const char *text, unsigned i…
void drw_font_getexts(Fnt *font, const char *text, unsigned int len, unsigned …
/* Colorscheme abstraction */
You are viewing proxied material from codemadness.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.