diff --git a/adafruit_pybadger.py b/adafruit_pybadger.py index a23afe7..5087813 100755 --- a/adafruit_pybadger.py +++ b/adafruit_pybadger.py @@ -58,6 +58,7 @@ import analogio from adafruit_display_shapes.rect import Rect from adafruit_display_text.label import Label +from adafruit_bitmap_font import bitmap_font import terminalio import adafruit_miniqr import adafruit_lis3dh @@ -67,6 +68,16 @@ Buttons = namedtuple("Buttons", "b a start select right down up left") +def load_font(fontname, text): + """Load a font and glyphs in the text string + + :param str fontname: The full path to the font file. + :param str text: The text containing the glyphs we want to load. + + """ + font = bitmap_font.load_font(fontname) + font.load_glyphs(text.encode('utf-8')) + return font # pylint: disable=too-many-instance-attributes class PyBadger: @@ -258,8 +269,10 @@ def show_business_card(self, *, image_name=None, name_string=None, name_scale=1, except AttributeError: self.display.wait_for_frame() if name_string: + if isinstance(name_font, str): + name_font = load_font(name_font, name_string) name_group = displayio.Group(scale=name_scale) - name_label = Label(name_font, text=name_string) + name_label = Label(name_font, text=name_string, line_spacing=0.75) (_, _, width, _) = name_label.bounding_box name_label.x = ((self.display.width // (2 * name_scale)) - width // 2) name_label.y = int(self.display.height * (0.73 / name_scale)) @@ -267,8 +280,10 @@ def show_business_card(self, *, image_name=None, name_string=None, name_scale=1, name_group.append(name_label) business_card_splash.append(name_group) if email_string_one: + if isinstance(email_font_one, str): + email_font_one = load_font(email_font_one, email_string_one) email_group_one = displayio.Group(scale=email_scale_one) - email_label_one = Label(email_font_one, text=email_string_one) + email_label_one = Label(email_font_one, text=email_string_one, line_spacing=0.75) (_, _, width, _) = email_label_one.bounding_box email_label_one.width = self.display.width email_label_one.x = ((self.display.width // (2 * email_scale_one)) - width // 2) @@ -277,8 +292,10 @@ def show_business_card(self, *, image_name=None, name_string=None, name_scale=1, email_group_one.append(email_label_one) business_card_splash.append(email_group_one) if email_string_two: + if isinstance(email_font_two, str): + email_font_two = load_font(email_font_two, email_string_two) email_group_two = displayio.Group(scale=email_scale_two) - email_label_two = Label(email_font_two, text=email_string_two) + email_label_two = Label(email_font_two, text=email_string_two, line_spacing=0.75) (_, _, width, _) = email_label_two.bounding_box email_label_two.width = self.display.width email_label_two.x = ((self.display.width // (2 * email_scale_two)) - width // 2) @@ -329,22 +346,28 @@ def show_badge(self, *, background_color=0xFF0000, foreground_color=0xFFFFFF, (int(self.display.height * 0.5)), fill=foreground_color) splash.append(rect) + if isinstance(hello_font, str): + hello_font = load_font(hello_font, hello_string) hello_group = displayio.Group(scale=hello_scale) - hello_label = Label(font=hello_font, text=hello_string) + hello_label = Label(font=hello_font, text=hello_string, line_spacing=0.75) (_, _, width, _) = hello_label.bounding_box hello_label.x = ((self.display.width // (2 * hello_scale)) - width // 2) hello_label.y = int(self.display.height * (0.117 / hello_scale)) hello_label.color = background_text_color hello_group.append(hello_label) + if isinstance(my_name_is_font, str): + my_name_is_font = load_font(my_name_is_font, my_name_is_string) my_name_is_group = displayio.Group(scale=my_name_is_scale) - my_name_is_label = Label(font=my_name_is_font, text=my_name_is_string) + my_name_is_label = Label(font=my_name_is_font, text=my_name_is_string, line_spacing=0.75) (_, _, width, _) = my_name_is_label.bounding_box my_name_is_label.x = ((self.display.width // (2 * my_name_is_scale)) - width // 2) my_name_is_label.y = int(self.display.height * (0.28 / my_name_is_scale)) my_name_is_label.color = background_text_color my_name_is_group.append(my_name_is_label) + if isinstance(name_font, str): + name_font = load_font(name_font, name_string) name_group = displayio.Group(scale=name_scale) name_label = Label(font=name_font, text=name_string, line_spacing=0.75) (_, _, width, _) = name_label.bounding_box diff --git a/docs/conf.py b/docs/conf.py index 58a8916..18cabce 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -22,7 +22,8 @@ # autodoc module docs will fail to generate with a warning. autodoc_mock_imports = ["audioio", "displayio", "gamepadshift", "neopixel", "analogio", "adafruit_display_shapes", "adafruit_display_text", "terminalio", - "adafruit_miniqr", "adafruit_lis3dh", "adafruit_miniqr"] + "adafruit_miniqr", "adafruit_lis3dh", "adafruit_miniqr", + "adafruit_bitmap_font"] intersphinx_mapping = {'python': ('https://docs.python.org/3.4', None),'CircuitPython': ('https://circuitpython.readthedocs.io/en/latest/', None)}