shithub: cardgen

Download patch

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();
--