ref: 5c21b9c3b694d2a8c7adb262c1fef6a61e193c37
parent: c5439205e34b970023b639df60cfdbb7c81cfcc6
author: sirjofri <sirjofri@sirjofri.de>
date: Sat Feb 14 08:44:21 EST 2026
allow different fonts, better vertical font placement (centered)
--- a/cardgen.c
+++ b/cardgen.c
@@ -22,8 +22,8 @@
};
Point lbllocs[2] = {- { 10+30+10, 20 },- { 200-30-10-10, 300-20-10 },+ { 10+30+10, 10+15 },+ { 200-30-10-10, 300-30-10+15 },};
/* 0 left, 1 right */
@@ -55,6 +55,10 @@
/* code */
Memimage *memred;
+Memimage *memgreen;
+Memsubfont *memfont;
+int fontheight;
+int debug = 0;
static void
drawspades(Memimage *mi)
@@ -337,7 +341,6 @@
Memimage *mi;
int i, fd;
char *file;
- Memsubfont *defont;
char *label;
Point text;
Point p;
@@ -347,8 +350,7 @@
if (!label)
return;
- defont = getmemdefont();
- text = memsubfontwidth(defont, label);
+ text = memsubfontwidth(memfont, label);
mi = allocmemimage(Rect(0, 0, cardwid, cardhgt), RGBA32);
if (!mi)
@@ -365,7 +367,10 @@
p = lbllocs[i];
if (lblalign[i])
p.x -= text.x;
- memimagestring(mi, p, memblack, ZP, defont, label);
+ if (debug)
+ memimageline(mi, p, p, Enddisc, Enddisc, 0, memgreen, ZP, SoverD);
+ p.y -= fontheight/2.;
+ memimagestring(mi, p, memblack, ZP, memfont, label);
}
file = smprint("out/%d", num+fadd);@@ -383,11 +388,18 @@
main(int argc, char **argv)
{int i, j;
+ char *fontfile = nil;
ARGBEGIN{case 't':
gentemplates++;
break;
+ case 'f':
+ fontfile = EARGF(usage());
+ break;
+ case 'd':
+ debug++;
+ break;
case 'h':
usage();
}ARGEND;
@@ -399,6 +411,21 @@
memfillcolor(memred, 0xFF0000FF);
memred->flags |= Frepl;
memred->clipr = memblack->clipr;
+
+ memgreen = allocmemimage(Rect(0, 0, 1, 1), RGB24);
+ memfillcolor(memgreen, 0x00CC00FF);
+ memgreen->flags |= Frepl;
+ memgreen->clipr = memblack->clipr;
+
+ if (fontfile) {+ memfont = openmemsubfont(fontfile, 0);
+ if (!memfont)
+ fprint(2, "error: %r. Falling back to default font!\n");
+ }
+ if (!memfont)
+ memfont = getmemdefont();
+
+ fontheight = memsubfontwidth(memfont, "M").y;
if (gentemplates) {dogentemplates();
--
⑨