From 38af9c0cfdc2dfaae73a75ab63bcb3e33c905703 Mon Sep 17 00:00:00 2001 From: Nina Zakharenko Date: Thu, 13 Feb 2020 15:13:05 -0800 Subject: [PATCH 1/4] Introduce a _create_label_group method to reduce code duplication. This method can be used to reduce code duplication in several areas of the library, and introduces common shared defaults such as black for the font color. --- adafruit_pybadger.py | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/adafruit_pybadger.py b/adafruit_pybadger.py index 20f8073..0e8f9dd 100755 --- a/adafruit_pybadger.py +++ b/adafruit_pybadger.py @@ -141,6 +141,21 @@ def __init__(self, i2c=None, *, pixels_brightness=1.0): self._sine_wave = None self._sine_wave_sample = None + def _create_label_group(self, text, font, scale, height_adjustment, color=0xFFFFFF, width_adjustment=2, line_spacing=0.75): + """Create a label group with the given text, font, scale, and spacing.""" + # If the given font is a string, treat it as a file path and try to load it + if isinstance(font, str): + font = load_font(font) + + group = displayio.Group(scale=scale) + label = Label(font, text=text, line_spacing=line_spacing) + _, _, width, _ = label.bounding_box + label.x = ((self.display.width // (width_adjustment * scale)) - width // 2) + label.y = int(self.display.height * (height_adjustment / scale)) + label.color = color + group.append(label) + return group + def _check_for_movement(self, movement_threshold=10): """Checks to see if board is moving. Used to auto-dim display when not moving.""" current_accelerometer = self.acceleration From 5e80b17b58947d72f6dbd5bef02d17e9516495e6 Mon Sep 17 00:00:00 2001 From: Nina Zakharenko Date: Thu, 13 Feb 2020 15:15:17 -0800 Subject: [PATCH 2/4] Use the new _create_label_group method in show_business_card --- adafruit_pybadger.py | 46 +++++++++++++++----------------------------- 1 file changed, 15 insertions(+), 31 deletions(-) diff --git a/adafruit_pybadger.py b/adafruit_pybadger.py index 0e8f9dd..74900f5 100755 --- a/adafruit_pybadger.py +++ b/adafruit_pybadger.py @@ -296,41 +296,25 @@ def show_business_card(self, *, image_name=None, name_string=None, name_scale=1, self.display.refresh(target_frames_per_second=60) 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, 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)) - name_label.color = 0xFFFFFF - name_group.append(name_label) + name_group = self._create_label_group(text=name_string, + font=name_font, + scale=name_scale, + height_adjustment=0.73) 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, 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) - email_label_one.y = int(self.display.height * (0.84 / email_scale_one)) - email_label_one.color = 0xFFFFFF - email_group_one.append(email_label_one) - business_card_splash.append(email_group_one) + email_one_group = self._create_label_group(text=email_string_one, + font=email_font_one, + scale=email_scale_one, + height_adjustment=0.84) + business_card_splash.append(email_one_group) 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, 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) - email_label_two.y = int(self.display.height * (0.91 / email_scale_two)) - email_label_two.color = 0xFFFFFF - email_group_two.append(email_label_two) - business_card_splash.append(email_group_two) + email_two_group = self._create_label_group(text=email_string_two, + font=email_font_two, + scale=email_scale_two, + height_adjustment=0.91) + business_card_splash.append(email_two_group) # pylint: disable=too-many-locals def show_badge(self, *, background_color=0xFF0000, foreground_color=0xFFFFFF, From 7e936dd91f9568824686a179e94ea0f88ec9da12 Mon Sep 17 00:00:00 2001 From: Nina Zakharenko Date: Thu, 13 Feb 2020 15:24:20 -0800 Subject: [PATCH 3/4] Use the new _create_label_group method in show_badge --- adafruit_pybadger.py | 46 ++++++++++++++++---------------------------- 1 file changed, 17 insertions(+), 29 deletions(-) diff --git a/adafruit_pybadger.py b/adafruit_pybadger.py index 74900f5..7e9837f 100755 --- a/adafruit_pybadger.py +++ b/adafruit_pybadger.py @@ -358,35 +358,23 @@ 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, 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, 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 - name_label.x = ((self.display.width // (2 * name_scale)) - width // 2) - name_label.y = int(self.display.height * (0.65 / name_scale)) - name_label.color = foreground_text_color - name_group.append(name_label) + hello_group = self._create_label_group(text=hello_string, + font=hello_font, + scale=hello_scale, + height_adjustment=0.117, + color=background_text_color) + + my_name_is_group = self._create_label_group(text=my_name_is_string, + font=my_name_is_font, + scale=my_name_is_scale, + height_adjustment=0.28, + color=background_text_color) + + name_group = self._create_label_group(text=name_string, + font=name_font, + scale=name_scale, + height_adjustment=0.65, + color=foreground_text_color) group = displayio.Group() group.append(splash) From de254d06b8608fc683e9230091e53c927cc2dd5e Mon Sep 17 00:00:00 2001 From: Nina Zakharenko Date: Thu, 13 Feb 2020 15:33:10 -0800 Subject: [PATCH 4/4] Resolve linting errors --- adafruit_pybadger.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/adafruit_pybadger.py b/adafruit_pybadger.py index 7e9837f..8e677d9 100755 --- a/adafruit_pybadger.py +++ b/adafruit_pybadger.py @@ -141,11 +141,14 @@ def __init__(self, i2c=None, *, pixels_brightness=1.0): self._sine_wave = None self._sine_wave_sample = None - def _create_label_group(self, text, font, scale, height_adjustment, color=0xFFFFFF, width_adjustment=2, line_spacing=0.75): - """Create a label group with the given text, font, scale, and spacing.""" + # pylint: disable=too-many-arguments + def _create_label_group(self, text, font, + scale, height_adjustment, + color=0xFFFFFF, width_adjustment=2, line_spacing=0.75): + """Create a label group with the given text, font, and spacing""" # If the given font is a string, treat it as a file path and try to load it if isinstance(font, str): - font = load_font(font) + font = load_font(font, text) group = displayio.Group(scale=scale) label = Label(font, text=text, line_spacing=line_spacing)