summaryrefslogtreecommitdiff
path: root/shared-module/terminalio
diff options
context:
space:
mode:
Diffstat (limited to 'shared-module/terminalio')
-rw-r--r--shared-module/terminalio/Terminal.c32
-rw-r--r--shared-module/terminalio/Terminal.h4
2 files changed, 16 insertions, 20 deletions
diff --git a/shared-module/terminalio/Terminal.c b/shared-module/terminalio/Terminal.c
index 6734fa30e..85bbee293 100644
--- a/shared-module/terminalio/Terminal.c
+++ b/shared-module/terminalio/Terminal.c
@@ -27,14 +27,14 @@
#include "shared-module/terminalio/Terminal.h"
#include "shared-module/displayio/__init__.h"
+#include "shared-module/displayio/BuiltinFont.h"
#include "shared-bindings/displayio/TileGrid.h"
-void common_hal_terminalio_terminal_construct(terminalio_terminal_obj_t *self, displayio_tilegrid_t* tilegrid, const uint8_t* unicode_characters, size_t unicode_characters_len) {
+void common_hal_terminalio_terminal_construct(terminalio_terminal_obj_t *self, displayio_tilegrid_t* tilegrid, const displayio_builtinfont_t* font) {
self->cursor_x = 0;
self->cursor_y = 0;
+ self->font = font;
self->tilegrid = tilegrid;
- self->unicode_characters = unicode_characters;
- self->unicode_characters_len = unicode_characters_len;
self->first_row = 0;
}
@@ -47,10 +47,10 @@ size_t common_hal_terminalio_terminal_write(terminalio_terminal_obj_t *self, con
// Always handle ASCII.
if (c < 128) {
if (c >= 0x20 && c <= 0x7e) {
- common_hal_displayio_textgrid_set_tile(self->tilegrid, self->cursor_x, self->cursor_y, c - 0x20);
+ uint8_t tile_index = displayio_builtinfont_get_glyph_index(self->font, c);
+ common_hal_displayio_textgrid_set_tile(self->tilegrid, self->cursor_x, self->cursor_y, tile_index);
self->cursor_x++;
- }
- if (c == '\r') {
+ } else if (c == '\r') {
self->cursor_x = 0;
} else if (c == '\n') {
self->cursor_y++;
@@ -76,6 +76,7 @@ size_t common_hal_terminalio_terminal_write(terminalio_terminal_obj_t *self, con
n = n * 10 + (i[j] - '0');
} else {
c = i[j];
+ break;
}
}
if (c == 'D') {
@@ -84,23 +85,18 @@ size_t common_hal_terminalio_terminal_write(terminalio_terminal_obj_t *self, con
} else {
self->cursor_x -= n;
}
- i += j;
}
+ i += j + 1;
+ continue;
}
}
}
} else {
- // Do a linear search of the mapping for unicode.
- const byte* j = self->unicode_characters;
- uint8_t k = 0;
- while (j < self->unicode_characters + self->unicode_characters_len) {
- unichar potential_c = utf8_get_char(j);
- j = utf8_next_char(j);
- if (c == potential_c) {
- common_hal_displayio_textgrid_set_tile(self->tilegrid, self->cursor_x, self->cursor_y, 0x7f - 0x20 + k);
- self->cursor_x++;
- break;
- }
+ uint8_t tile_index = displayio_builtinfont_get_glyph_index(self->font, c);
+ if (tile_index != 0xff) {
+ common_hal_displayio_textgrid_set_tile(self->tilegrid, self->cursor_x, self->cursor_y, tile_index);
+ self->cursor_x++;
+
}
}
if (self->cursor_x >= self->tilegrid->width_in_tiles) {
diff --git a/shared-module/terminalio/Terminal.h b/shared-module/terminalio/Terminal.h
index fe9dcf0c4..145b42f3f 100644
--- a/shared-module/terminalio/Terminal.h
+++ b/shared-module/terminalio/Terminal.h
@@ -31,15 +31,15 @@
#include <stdbool.h>
#include "py/obj.h"
+#include "shared-module/displayio/BuiltinFont.h"
#include "shared-module/displayio/TileGrid.h"
typedef struct {
mp_obj_base_t base;
+ const displayio_builtinfont_t* font;
uint16_t cursor_x;
uint16_t cursor_y;
displayio_tilegrid_t* tilegrid;
- const byte* unicode_characters;
- uint16_t unicode_characters_len;
uint16_t first_row;
} terminalio_terminal_obj_t;