From 9389e4e744e6317fb0799dcfe871c84b37d0a6a8 Mon Sep 17 00:00:00 2001 From: Ian Clarkson Date: Sun, 16 Aug 2026 12:49:35 -0700 Subject: [PATCH] Fix default bitmap font measurements Initialize BGI text at the RIPscrip normal default size so bitmap text is measured at the same scale it is drawn. Add a visual button fixture and expected rendering covering implicit versus explicit size-one text. --- rips/test/DEFAULT_FONT.RIP | 3 +++ rips/test/DEFAULT_FONT.png | Bin 0 -> 7393 bytes ripterm.html | 1 + src/BGI.js | 4 ++-- 4 files changed, 6 insertions(+), 2 deletions(-) create mode 100644 rips/test/DEFAULT_FONT.RIP create mode 100644 rips/test/DEFAULT_FONT.png diff --git a/rips/test/DEFAULT_FONT.RIP b/rips/test/DEFAULT_FONT.RIP new file mode 100644 index 0000000..d3b3aa9 --- /dev/null +++ b/rips/test/DEFAULT_FONT.RIP @@ -0,0 +1,3 @@ +!|1K|1B3M0C020QPE02080F0F080700000F0700003M +!|1U1C3M00000000<>Default size<>d +!|Y00000100|1U5K3M00000000<>Explicit size 1<>e|#|#|# diff --git a/rips/test/DEFAULT_FONT.png b/rips/test/DEFAULT_FONT.png new file mode 100644 index 0000000000000000000000000000000000000000..57c1c23f5c5969352ed751298d974dd5358be4be GIT binary patch literal 7393 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 D2011 (v0.1), 2018 (v0.2), 2021 (v0.3), 2026 (v0.4) + diff --git a/src/BGI.js b/src/BGI.js index 0032bd1..869cf2f 100644 --- a/src/BGI.js +++ b/src/BGI.js @@ -177,7 +177,7 @@ class BGI { writeMode: 0, // 0=COPY, 1=XOR, 2=OR, 3=AND, 4=NOT font: { width: 0, height: 0 }, // ?? fontMag: { x: 1.0, y: 1.0 }, // font magnification - text: { font: 0, direction: 0, charsize: 0, horiz: 0, vert: 0 }, + text: { font: 0, direction: 0, charsize: 1, horiz: 0, vert: 0 }, }; } @@ -2010,7 +2010,7 @@ class BGI { return 0; // ??? } - // returns object: { font: 0, direction: 0, charsize: 0, horiz: 0, vert: 0 } + // returns object: { font: 0, direction: 0, charsize: 1, horiz: 0, vert: 0 } gettextsettings () { // OLD struct textsettingstype *texttypeinfo return JSON.parse(JSON.stringify(this.info.text)); // copy obj