projects
/
xmenu
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
tags
|
clone url
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (parent:
644a15b
)
Adding routine getfontucode()
author
phillbush
<phillbush@cock.li>
Fri, 31 Jul 2020 22:50:50 +0000
(19:50 -0300)
committer
phillbush
<phillbush@cock.li>
Fri, 31 Jul 2020 22:50:50 +0000
(19:50 -0300)
xmenu.c
patch
|
blob
|
blame
|
history
diff --git
a/xmenu.c
b/xmenu.c
index
68c8360
..
6e189cc
100644
(file)
--- a/
xmenu.c
+++ b/
xmenu.c
@@
-41,6
+41,7
@@
static struct Menu *parsestdin(void);
/* text drawer, and its helper routine */
static FcChar32 getnextutf8char(const char *s, const char **end_ret);
/* text drawer, and its helper routine */
static FcChar32 getnextutf8char(const char *s, const char **end_ret);
+static XftFont *getfontucode(FcChar32 ucode);
static int drawtext(XftDraw *draw, XftColor *color, int x, int y, unsigned h, const char *text);
/* structure setters, and their helper routines */
static int drawtext(XftDraw *draw, XftColor *color, int x, int y, unsigned h, const char *text);
/* structure setters, and their helper routines */
@@
-638,53
+639,54
@@
getnextutf8char(const char *s, const char **next_ret)
return ucode;
}
return ucode;
}
-/* draw text into XftDraw */
+/* get which font contains a given code point */
+static XftFont *
+getfontucode(FcChar32 ucode)
+{
+ size_t i;
+
+ for (i = 0; i < dc.nfonts; i++)
+ if (XftCharExists(dpy, dc.fonts[i], ucode) == FcTrue)
+ return dc.fonts[i];
+ return NULL;
+}
+
+/* draw text into XftDraw, return width of text glyphs */
static int
drawtext(XftDraw *draw, XftColor *color, int x, int y, unsigned h, const char *text)
{
static int
drawtext(XftDraw *draw, XftColor *color, int x, int y, unsigned h, const char *text)
{
- const char *s, *nexts;
- FcChar32 ucode;
- XftFont *currfont;
- int textlen = 0;
+ int textwidth = 0;
int texty;
texty = y + (h - (dc.fonts[0]->ascent + dc.fonts[0]->descent))/2 + dc.fonts[0]->ascent;
int texty;
texty = y + (h - (dc.fonts[0]->ascent + dc.fonts[0]->descent))/2 + dc.fonts[0]->ascent;
- s = text;
- while (*s) {
+ while (*text) {
+ XftFont *currfont;
XGlyphInfo ext;
XGlyphInfo ext;
- int charexists;
+ FcChar32 ucode;
+ const char *next;
size_t len;
size_t len;
- size_t i;
- charexists = 0;
- ucode = getnextutf8char(s, &nexts);
- for (i = 0; i < dc.nfonts; i++) {
- charexists = XftCharExists(dpy, dc.fonts[i], ucode);
- if (charexists)
- break;
- }
- if (charexists)
- currfont = dc.fonts[i];
+ ucode = getnextutf8char(text, &next);
+ if ((currfont = getfontucode(ucode)) == NULL)
+ currfont = dc.fonts[0];
- len = next
s - s
;
+ len = next
- text
;
- XftTextExtentsUtf8(dpy, currfont, (XftChar8 *)s,
- len, &ext);
- textlen += ext.xOff;
+ XftTextExtentsUtf8(dpy, currfont, (XftChar8 *)text, len, &ext);
+ textwidth += ext.xOff;
if (draw) {
if (!fflag)
texty = y + (h - (currfont->ascent + currfont->descent))/2 + currfont->ascent;
if (draw) {
if (!fflag)
texty = y + (h - (currfont->ascent + currfont->descent))/2 + currfont->ascent;
- XftDrawStringUtf8(draw, color, currfont, x, texty,
- (XftChar8 *)s, len);
+ XftDrawStringUtf8(draw, color, currfont, x, texty, (XftChar8 *)text, len);
x += ext.xOff;
}
x += ext.xOff;
}
-
s = nexts
;
+
text = next
;
}
}
- return text
len
;
+ return text
width
;
}
/* setup the height, width and icon of the items of a menu */
}
/* setup the height, width and icon of the items of a menu */