ref: 540f13f2494300be335b04bf53f821133335f597
parent: aa5e70e555d9cf046c9b3128563d3748b22a284b
author: Jacob Moody <moody@posixcafe.org>
date: Thu Jan 2 19:51:43 EST 2025
libmemdraw: change openmemsubfont() to accept rune minimum as argument Subfonts for non ascii characters are offset by some minimum rune, typically specified within the parent font file. Because libmemdraw only deals in subfonts, if we want to have it draw non ascii runes we need some method of providing that base offset. This function is only used in one place, so update the function signature and fix the only caller.
--- a/sys/include/memdraw.h
+++ b/sys/include/memdraw.h
@@ -80,6 +80,7 @@
short n; /* number of chars in font */
uchar height; /* height of bitmap */
char ascent; /* top of bitmap to baseline */
+ Rune min; /* rune offset for first glyph in subfont */
Fontchar *info; /* n+1 character descriptors */
Memimage *bits; /* of font */
};
@@ -156,7 +157,7 @@
* Subfont management
*/
extern Memsubfont* allocmemsubfont(char*, int, int, int, Fontchar*, Memimage*);
-extern Memsubfont* openmemsubfont(char*);
+extern Memsubfont* openmemsubfont(char*, Rune);
extern void freememsubfont(Memsubfont*);
extern Point memsubfontwidth(Memsubfont*, char*);
extern Memsubfont* getmemdefont(void);
--- a/sys/man/2/memdraw
+++ b/sys/man/2/memdraw
@@ -150,7 +150,7 @@
.nf
Memsubfont* allocmemsubfont(char *name, int n, int height,
int ascent, Fontchar *info, Memimage *i)
-Memsubfont* openmemsubfont(char *name)
+Memsubfont* openmemsubfont(char *name, Rune min)
void freememsubfont(Memsubfont *f)
Point memsubfontwidth(Memsubfont *f, char *s)
Memsubfont* getmemdefont(void)
--- a/sys/src/cmd/venti/srv/graph.c
+++ b/sys/src/cmd/venti/srv/graph.c
@@ -58,7 +58,7 @@
#ifdef PLAN9PORT
smallfont = openmemsubfont(unsharp("#9/font/lucsans/lstr.10"));
#else
- smallfont = openmemsubfont("/lib/font/bit/lucidasans/lstr.10");
+ smallfont = openmemsubfont("/lib/font/bit/lucidasans/lstr.10", 0);
#endif
black = memblack;
blue = allocrepl(DBlue);
--- a/sys/src/libmemdraw/openmemsubfont.c
+++ b/sys/src/libmemdraw/openmemsubfont.c
@@ -4,7 +4,7 @@
#include <memdraw.h>
Memsubfont*
-openmemsubfont(char *name)
+openmemsubfont(char *name, Rune min)
{
Memsubfont *sf;
Memimage *i;
@@ -45,6 +45,7 @@
free(fc);
goto Err;
}
+ sf->min = min;
close(fd);
free(p);
return sf;
--- a/sys/src/libmemdraw/string.c
+++ b/sys/src/libmemdraw/string.c
@@ -25,6 +25,7 @@
}
s += w;
}
+ c -= f->min;
if(c >= f->n)
continue;
i = f->info+c;
@@ -58,6 +59,7 @@
}
s += w;
}
+ c -= f->min;
if(c >= f->n)
continue;
i = f->info+c;
--
⑨