ref: 9e0913fa71697863f3e9ca155e3b1f67a69bdb7c
parent: a1015612231e511ef11ecda9c48179a47a1ba980
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;
--
⑨