diff options
Diffstat (limited to 'src/sliceitoff/text/fonts.py')
-rw-r--r-- | src/sliceitoff/text/fonts.py | 39 |
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] |