summaryrefslogtreecommitdiff
path: root/src/sliceitoff/text/fonts.py
diff options
context:
space:
mode:
Diffstat (limited to 'src/sliceitoff/text/fonts.py')
-rw-r--r--src/sliceitoff/text/fonts.py39
1 files changed, 39 insertions, 0 deletions
diff --git a/src/sliceitoff/text/fonts.py b/src/sliceitoff/text/fonts.py
new file mode 100644
index 0000000..a1687b6
--- /dev/null
+++ b/src/sliceitoff/text/fonts.py
@@ -0,0 +1,39 @@
+import os
+import pygame
+
+DEBUG = os.getenv("DEBUG")
+
+class Fonts:
+ fonts = {}
+
+ @staticmethod
+ def load_fonts(base_path):
+ filename_fontlist = os.path.join(base_path, "assets", "fonts.lst")
+ with open( filename_fontlist ) as fontlist_file:
+ for line in fontlist_file:
+ name, *path = line.strip().split()
+ filename = os.path.join(base_path, *path)
+ __class__.fonts[name] = Font(filename)
+ return True
+
+
+class Font:
+ def __init__(self, filename, height = 16):
+ if DEBUG:
+ print(f"Loading font {filename = }")
+ self.surfaces = []
+ with open(filename, mode="rb") as fnt_file:
+ for _ in range(256):
+ surface = pygame.Surface((8,height), pygame.SRCALPHA)
+ for line in range(16):
+ byte = fnt_file.read(1)[0]
+ if line >= height:
+ continue
+ for bit in range(8):
+ if byte & 0x80:
+ surface.set_at((bit,line),"white")
+ byte <<= 1
+ self.surfaces.append(surface)
+
+ def get(self, ch):
+ return self.surfaces[ch%256]