diff options
Diffstat (limited to 'shared-module')
| -rw-r--r-- | shared-module/_pew/PewPew.c | 2 | ||||
| -rw-r--r-- | shared-module/displayio/Group.c | 10 | ||||
| -rw-r--r-- | shared-module/displayio/Group.h | 2 | ||||
| -rw-r--r-- | shared-module/displayio/TileGrid.c | 73 | ||||
| -rw-r--r-- | shared-module/terminalio/Terminal.c | 10 |
5 files changed, 61 insertions, 36 deletions
diff --git a/shared-module/_pew/PewPew.c b/shared-module/_pew/PewPew.c index 7ff4e8c7a..568dc6425 100644 --- a/shared-module/_pew/PewPew.c +++ b/shared-module/_pew/PewPew.c @@ -76,7 +76,7 @@ void pew_init() { // Find a spare timer. uint8_t index = find_free_timer(); if (index == 0xff) { - mp_raise_RuntimeError(translate("")); + mp_raise_RuntimeError(translate("All timers in use")); } Tc *tc = tc_insts[index]; diff --git a/shared-module/displayio/Group.c b/shared-module/displayio/Group.c index f6bc92dc7..20182863e 100644 --- a/shared-module/displayio/Group.c +++ b/shared-module/displayio/Group.c @@ -29,9 +29,9 @@ #include "py/runtime.h" #include "shared-bindings/displayio/TileGrid.h" -void common_hal_displayio_group_construct(displayio_group_t* self, uint32_t max_size, uint32_t scale) { +void common_hal_displayio_group_construct(displayio_group_t* self, uint32_t max_size, uint32_t scale, mp_int_t x, mp_int_t y) { displayio_group_child_t* children = m_new(displayio_group_child_t, max_size); - displayio_group_construct(self, children, max_size, scale); + displayio_group_construct(self, children, max_size, scale, x, y); } uint32_t common_hal_displayio_group_get_scale(displayio_group_t* self) { @@ -116,9 +116,9 @@ void common_hal_displayio_group_set(displayio_group_t* self, size_t index, mp_ob self->needs_refresh = true; } -void displayio_group_construct(displayio_group_t* self, displayio_group_child_t* child_array, uint32_t max_size, uint32_t scale) { - self->x = 0; - self->y = 0; +void displayio_group_construct(displayio_group_t* self, displayio_group_child_t* child_array, uint32_t max_size, uint32_t scale, mp_int_t x, mp_int_t y) { + self->x = x; + self->y = y; self->children = child_array; self->max_size = max_size; self->needs_refresh = false; diff --git a/shared-module/displayio/Group.h b/shared-module/displayio/Group.h index 61409959d..7826b9e66 100644 --- a/shared-module/displayio/Group.h +++ b/shared-module/displayio/Group.h @@ -48,7 +48,7 @@ typedef struct { bool needs_refresh; } displayio_group_t; -void displayio_group_construct(displayio_group_t* self, displayio_group_child_t* child_array, uint32_t max_size, uint32_t scale); +void displayio_group_construct(displayio_group_t* self, displayio_group_child_t* child_array, uint32_t max_size, uint32_t scale, mp_int_t x, mp_int_t y); bool displayio_group_get_pixel(displayio_group_t *group, int16_t x, int16_t y, uint16_t *pixel); bool displayio_group_needs_refresh(displayio_group_t *self); void displayio_group_finish_refresh(displayio_group_t *self); diff --git a/shared-module/displayio/TileGrid.c b/shared-module/displayio/TileGrid.c index c2aa9b144..bbbb11924 100644 --- a/shared-module/displayio/TileGrid.c +++ b/shared-module/displayio/TileGrid.c @@ -66,14 +66,20 @@ void common_hal_displayio_tilegrid_construct(displayio_tilegrid_t *self, mp_obj_ self->y = y; } -void common_hal_displayio_tilegrid_get_position(displayio_tilegrid_t *self, int16_t* x, int16_t* y) { - *x = self->x; - *y = self->y; -} -void common_hal_displayio_tilegrid_set_position(displayio_tilegrid_t *self, int16_t x, int16_t y) { - self->needs_refresh = self->x != x || self->y != y; +mp_int_t common_hal_displayio_tilegrid_get_x(displayio_tilegrid_t *self) { + return self->x; +} +void common_hal_displayio_tilegrid_set_x(displayio_tilegrid_t *self, mp_int_t x) { + self->needs_refresh = self->x != x; self->x = x; +} +mp_int_t common_hal_displayio_tilegrid_get_y(displayio_tilegrid_t *self) { + return self->y; +} + +void common_hal_displayio_tilegrid_set_y(displayio_tilegrid_t *self, mp_int_t y) { + self->needs_refresh = self->y != y; self->y = y; } @@ -86,6 +92,43 @@ void common_hal_displayio_tilegrid_set_pixel_shader(displayio_tilegrid_t *self, self->needs_refresh = true; } + +uint16_t common_hal_displayio_tilegrid_get_width(displayio_tilegrid_t *self) { + return self->width_in_tiles; +} + +uint16_t common_hal_displayio_tilegrid_get_height(displayio_tilegrid_t *self) { + return self->height_in_tiles; +} + +uint8_t common_hal_displayio_tilegrid_get_tile(displayio_tilegrid_t *self, uint16_t x, uint16_t y) { + uint8_t* tiles = self->tiles; + if (self->inline_tiles) { + tiles = (uint8_t*) &self->tiles; + } + if (tiles == NULL) { + return 0; + } + return tiles[y * self->width_in_tiles + x]; +} + +void common_hal_displayio_tilegrid_set_tile(displayio_tilegrid_t *self, uint16_t x, uint16_t y, uint8_t tile_index) { + uint8_t* tiles = self->tiles; + if (self->inline_tiles) { + tiles = (uint8_t*) &self->tiles; + } + if (tiles == NULL) { + return; + } + tiles[y * self->width_in_tiles + x] = tile_index; + self->needs_refresh = true; +} + + +void common_hal_displayio_tilegrid_set_top_left(displayio_tilegrid_t *self, uint16_t x, uint16_t y) { + self->top_left_x = x; + self->top_left_y = y; +} bool displayio_tilegrid_get_pixel(displayio_tilegrid_t *self, int16_t x, int16_t y, uint16_t* pixel) { x -= self->x; y -= self->y; @@ -126,24 +169,6 @@ bool displayio_tilegrid_get_pixel(displayio_tilegrid_t *self, int16_t x, int16_t return false; } -void common_hal_displayio_textgrid_set_tile(displayio_tilegrid_t *self, uint16_t x, uint16_t y, uint8_t tile_index) { - uint8_t* tiles = self->tiles; - if (self->inline_tiles) { - tiles = (uint8_t*) &self->tiles; - } - if (tiles == NULL) { - return; - } - tiles[y * self->width_in_tiles + x] = tile_index; - self->needs_refresh = true; -} - - -void common_hal_displayio_textgrid_set_top_left(displayio_tilegrid_t *self, uint16_t x, uint16_t y) { - self->top_left_x = x; - self->top_left_y = y; -} - bool displayio_tilegrid_needs_refresh(displayio_tilegrid_t *self) { return self->needs_refresh || displayio_palette_needs_refresh(self->pixel_shader); } diff --git a/shared-module/terminalio/Terminal.c b/shared-module/terminalio/Terminal.c index 85bbee293..07c13d639 100644 --- a/shared-module/terminalio/Terminal.c +++ b/shared-module/terminalio/Terminal.c @@ -48,7 +48,7 @@ size_t common_hal_terminalio_terminal_write(terminalio_terminal_obj_t *self, con if (c < 128) { if (c >= 0x20 && c <= 0x7e) { 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); + common_hal_displayio_tilegrid_set_tile(self->tilegrid, self->cursor_x, self->cursor_y, tile_index); self->cursor_x++; } else if (c == '\r') { self->cursor_x = 0; @@ -64,7 +64,7 @@ size_t common_hal_terminalio_terminal_write(terminalio_terminal_obj_t *self, con if (i[1] == 'K') { // Clear the rest of the line. for (uint16_t j = self->cursor_x; j < self->tilegrid->width_in_tiles; j++) { - common_hal_displayio_textgrid_set_tile(self->tilegrid, j, self->cursor_y, 0); + common_hal_displayio_tilegrid_set_tile(self->tilegrid, j, self->cursor_y, 0); } i += 2; } else { @@ -94,7 +94,7 @@ size_t common_hal_terminalio_terminal_write(terminalio_terminal_obj_t *self, con } else { 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); + common_hal_displayio_tilegrid_set_tile(self->tilegrid, self->cursor_x, self->cursor_y, tile_index); self->cursor_x++; } @@ -109,10 +109,10 @@ size_t common_hal_terminalio_terminal_write(terminalio_terminal_obj_t *self, con if (self->cursor_y != start_y) { // clear the new row for (uint16_t j = 0; j < self->tilegrid->width_in_tiles; j++) { - common_hal_displayio_textgrid_set_tile(self->tilegrid, j, self->cursor_y, 0); + common_hal_displayio_tilegrid_set_tile(self->tilegrid, j, self->cursor_y, 0); start_y = self->cursor_y; } - common_hal_displayio_textgrid_set_top_left(self->tilegrid, 0, (start_y + self->tilegrid->height_in_tiles + 1) % self->tilegrid->height_in_tiles); + common_hal_displayio_tilegrid_set_top_left(self->tilegrid, 0, (start_y + self->tilegrid->height_in_tiles + 1) % self->tilegrid->height_in_tiles); } } return i - data; |
