From dcbed64aa9b08e2e9362f7e40949f81be8ca94d8 Mon Sep 17 00:00:00 2001 From: "regicidal.plutophage" <36969337+regicidalplutophage@users.noreply.github.com> Date: Mon, 27 Feb 2023 15:29:08 +0300 Subject: [PATCH 1/5] Improved text handling This change allows for more precise control over the position of text labels --- kmk/extensions/oled.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/kmk/extensions/oled.py b/kmk/extensions/oled.py index cf8eccf..4107fc7 100644 --- a/kmk/extensions/oled.py +++ b/kmk/extensions/oled.py @@ -10,8 +10,6 @@ from kmk.extensions import Extension from kmk.handlers.stock import passthrough as handler_passthrough from kmk.keys import make_key -DISPLAY_OFFSET = 4 # Used to calculate a new zero level since SSD1306 is clipped. - class OledEntryType: TXT = 0 @@ -27,13 +25,15 @@ class OledData: self.data = entries @staticmethod - def oled_text_entry(x=0, y=0, text='', layer=None): + def oled_text_entry(x=0, y=0, x_anchor=0.0, y_anchor=0.0, text='', layer=None): return { 0: text, 1: x, 2: y, 3: layer, 4: OledEntryType.TXT, + 5: x_anchor, + 6: y_anchor, } @staticmethod @@ -88,8 +88,8 @@ class Oled(Extension): terminalio.FONT, text=view[0], color=0xFFFFFF, - x=view[1], - y=view[2] + DISPLAY_OFFSET, + anchor_point=(view[5],view[6]), + anchored_position = (view[1],view[2]), ) ) elif view[4] == OledEntryType.IMG: @@ -98,7 +98,7 @@ class Oled(Extension): view[0], pixel_shader=view[0].pixel_shader, x=view[1], - y=view[2] + DISPLAY_OFFSET, + y=view[2], ) ) gc.collect() From a73014aeb6290a0050cfc74991ebc352f2ce1b11 Mon Sep 17 00:00:00 2001 From: "regicidal.plutophage" <36969337+regicidalplutophage@users.noreply.github.com> Date: Mon, 27 Feb 2023 18:27:43 +0300 Subject: [PATCH 2/5] Exposed more parameters More parameters for text entries --- kmk/extensions/oled.py | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/kmk/extensions/oled.py b/kmk/extensions/oled.py index 4107fc7..d831e1e 100644 --- a/kmk/extensions/oled.py +++ b/kmk/extensions/oled.py @@ -25,7 +25,7 @@ class OledData: self.data = entries @staticmethod - def oled_text_entry(x=0, y=0, x_anchor=0.0, y_anchor=0.0, text='', layer=None): + def oled_text_entry(text='', x=0, y=0, x_anchor=0.0, y_anchor=0.0, direction='LTR', line_spacing=0.75, inverted=False, layer=None): return { 0: text, 1: x, @@ -34,6 +34,9 @@ class OledData: 4: OledEntryType.TXT, 5: x_anchor, 6: y_anchor, + 7: direction, + 8: line_spacing, + 9: inverted, } @staticmethod @@ -87,9 +90,13 @@ class Oled(Extension): label.Label( terminalio.FONT, text=view[0], - color=0xFFFFFF, + color=0xFFFFFF if view[9] == False else 0x000000, + background_color=0x000000 if view[9] == False else 0xFFFFFF, anchor_point=(view[5],view[6]), - anchored_position = (view[1],view[2]), + anchored_position=(view[1],view[2]), + label_direction=view[7], + line_spacing=view[8], + padding_left=1, ) ) elif view[4] == OledEntryType.IMG: From 0b87043de4ff7628c8b20624376f0de7cf853115 Mon Sep 17 00:00:00 2001 From: "regicidal.plutophage" <36969337+regicidalplutophage@users.noreply.github.com> Date: Mon, 27 Feb 2023 18:42:46 +0300 Subject: [PATCH 3/5] Illustration of oled.py usage Updated kyria config to better illustrate the usage of oled extension --- boards/kyria/main.py | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/boards/kyria/main.py b/boards/kyria/main.py index 4d72938..67d77af 100644 --- a/boards/kyria/main.py +++ b/boards/kyria/main.py @@ -36,13 +36,14 @@ keyboard.extensions.append(rgb_ext) oled_ext = Oled( OledData( entries=[ - OledData.oled_text_entry(text='Kyria v1.4', x=0, y=0), - OledData.oled_text_entry(text='KB2040', x=0, y=10), - OledData.oled_text_entry(text='Layer: ', x=0, y=20), - OledData.oled_text_entry(text='BASE', x=40, y=20, layer=0), - OledData.oled_text_entry(text='LOWER', x=40, y=20, layer=3), - OledData.oled_text_entry(text='RAISE', x=40, y=20, layer=4), - OledData.oled_text_entry(text='ADJUST', x=40, y=20, layer=6), + OledData.oled_text_entry(text='Kyria v1.4\nKB2040', line_spacing=0.75, inverted=True, x=1, y=0), + OledData.oled_text_entry(text='americ', x=128, y=0, x_anchor=1.0), + OledData.oled_text_entry(text='anfootball', x=128, y=10, x_anchor=1.0), + OledData.oled_text_entry(text='Layer: ', x=0, y=32, y_anchor=1.0), + OledData.oled_text_entry(text='BASE', x=40, y=32, y_anchor=1.0, layer=0), + OledData.oled_text_entry(text='LOWER', x=40, y=32, y_anchor=1.0, layer=3), + OledData.oled_text_entry(text='RAISE', x=40, y=32, y_anchor=1.0, layer=4), + OledData.oled_text_entry(text='ADJUST', x=40, y=32, y_anchor=1.0, layer=6), ] ), height=64, From 6f39c67e0f145f021feb6b8b368f527cbf2765fc Mon Sep 17 00:00:00 2001 From: "regicidal.plutophage" <36969337+regicidalplutophage@users.noreply.github.com> Date: Mon, 27 Feb 2023 19:16:30 +0300 Subject: [PATCH 4/5] Improve inverted text legibility near the edge Added logic to prevent inverted text blending with the screen bezel if placed at the very edge. --- kmk/extensions/oled.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/kmk/extensions/oled.py b/kmk/extensions/oled.py index d831e1e..80e1404 100644 --- a/kmk/extensions/oled.py +++ b/kmk/extensions/oled.py @@ -93,10 +93,10 @@ class Oled(Extension): color=0xFFFFFF if view[9] == False else 0x000000, background_color=0x000000 if view[9] == False else 0xFFFFFF, anchor_point=(view[5],view[6]), - anchored_position=(view[1],view[2]), + anchored_position=(view[1] if view[9] == False else view[1]+1,view[2]), label_direction=view[7], line_spacing=view[8], - padding_left=1, + padding_left=0 if view[9] == False else 1, ) ) elif view[4] == OledEntryType.IMG: From 2f3337a3fdfe423e914c9c90fafa9567bfb5181c Mon Sep 17 00:00:00 2001 From: "regicidal.plutophage" <36969337+regicidalplutophage@users.noreply.github.com> Date: Mon, 27 Feb 2023 19:18:06 +0300 Subject: [PATCH 5/5] Update main.py --- boards/kyria/main.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/boards/kyria/main.py b/boards/kyria/main.py index 67d77af..f36806e 100644 --- a/boards/kyria/main.py +++ b/boards/kyria/main.py @@ -36,7 +36,7 @@ keyboard.extensions.append(rgb_ext) oled_ext = Oled( OledData( entries=[ - OledData.oled_text_entry(text='Kyria v1.4\nKB2040', line_spacing=0.75, inverted=True, x=1, y=0), + OledData.oled_text_entry(text='Kyria v1.4\nKB2040', line_spacing=0.75, inverted=True, x=0, y=0), OledData.oled_text_entry(text='americ', x=128, y=0, x_anchor=1.0), OledData.oled_text_entry(text='anfootball', x=128, y=10, x_anchor=1.0), OledData.oled_text_entry(text='Layer: ', x=0, y=32, y_anchor=1.0),