Skip to content

Commit aeeb58f

Browse files
authored
Merge pull request #6077 from kmatch98/trial_repl
fix REPL terminal garbled characters upon code.py finished
2 parents 478fb69 + 790af2d commit aeeb58f

File tree

4 files changed

+31
-25
lines changed

4 files changed

+31
-25
lines changed

shared-bindings/terminalio/Terminal.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ STATIC mp_obj_t terminalio_terminal_make_new(const mp_obj_type_t *type, size_t n
6262
terminalio_terminal_obj_t *self = m_new_obj(terminalio_terminal_obj_t);
6363
self->base.type = &terminalio_terminal_type;
6464

65-
common_hal_terminalio_terminal_construct(self, tilegrid, font, true);
65+
common_hal_terminalio_terminal_construct(self, tilegrid, font);
6666
return MP_OBJ_FROM_PTR(self);
6767
}
6868

shared-bindings/terminalio/Terminal.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
extern const mp_obj_type_t terminalio_terminal_type;
3535

3636
extern void common_hal_terminalio_terminal_construct(terminalio_terminal_obj_t *self,
37-
displayio_tilegrid_t *tilegrid, const fontio_builtinfont_t *font, const bool reset_tiles);
37+
displayio_tilegrid_t *tilegrid, const fontio_builtinfont_t *font);
3838

3939
// Write characters. len is in characters NOT bytes!
4040
extern size_t common_hal_terminalio_terminal_write(terminalio_terminal_obj_t *self,

shared-module/terminalio/Terminal.c

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -30,18 +30,15 @@
3030
#include "shared-bindings/displayio/TileGrid.h"
3131
#include "shared-bindings/terminalio/Terminal.h"
3232

33-
void common_hal_terminalio_terminal_construct(terminalio_terminal_obj_t *self, displayio_tilegrid_t *tilegrid, const fontio_builtinfont_t *font, const bool reset_tiles) {
33+
void common_hal_terminalio_terminal_construct(terminalio_terminal_obj_t *self, displayio_tilegrid_t *tilegrid, const fontio_builtinfont_t *font) {
3434
self->cursor_x = 0;
3535
self->cursor_y = 0;
3636
self->font = font;
3737
self->tilegrid = tilegrid;
3838
self->first_row = 0;
39-
40-
if (reset_tiles) {
41-
for (uint16_t x = 0; x < self->tilegrid->width_in_tiles; x++) {
42-
for (uint16_t y = 0; y < self->tilegrid->height_in_tiles; y++) {
43-
common_hal_displayio_tilegrid_set_tile(self->tilegrid, x, y, 0);
44-
}
39+
for (uint16_t x = 0; x < self->tilegrid->width_in_tiles; x++) {
40+
for (uint16_t y = 0; y < self->tilegrid->height_in_tiles; y++) {
41+
common_hal_displayio_tilegrid_set_tile(self->tilegrid, x, y, 0);
4542
}
4643
}
4744

supervisor/shared/display.c

Lines changed: 25 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,11 @@ void supervisor_start_terminal(uint16_t width_px, uint16_t height_px) {
8282

8383
uint16_t total_tiles = width_in_tiles * height_in_tiles;
8484

85+
// check if the terminal tile dimensions are the same
86+
if ((grid->width_in_tiles != width_in_tiles) ||
87+
(grid->height_in_tiles != height_in_tiles)) {
88+
reset_tiles = true;
89+
}
8590
// Reuse the previous allocation if possible
8691
if (tilegrid_tiles) {
8792
if (get_allocation_length(tilegrid_tiles) != align32_size(total_tiles)) {
@@ -97,24 +102,28 @@ void supervisor_start_terminal(uint16_t width_px, uint16_t height_px) {
97102
return;
98103
}
99104
}
100-
uint8_t *tiles = (uint8_t *)tilegrid_tiles->ptr;
101105

102-
grid->y = tall ? blinka_bitmap.height : 0;
103-
grid->x = tall ? 0 : blinka_bitmap.width;
104-
grid->top_left_y = 0;
105-
if (remaining_pixels > 0) {
106-
grid->y -= (grid->tile_height - remaining_pixels);
107-
}
108-
grid->width_in_tiles = width_in_tiles;
109-
grid->height_in_tiles = height_in_tiles;
110-
assert(width_in_tiles > 0);
111-
assert(height_in_tiles > 0);
112-
grid->pixel_width = width_in_tiles * grid->tile_width;
113-
grid->pixel_height = height_in_tiles * grid->tile_height;
114-
grid->tiles = tiles;
115-
grid->full_change = true;
106+
if (reset_tiles) {
107+
uint8_t *tiles = (uint8_t *)tilegrid_tiles->ptr;
116108

117-
common_hal_terminalio_terminal_construct(&supervisor_terminal, grid, &supervisor_terminal_font, reset_tiles);
109+
grid->y = tall ? blinka_bitmap.height : 0;
110+
grid->x = tall ? 0 : blinka_bitmap.width;
111+
grid->top_left_y = 0;
112+
if (remaining_pixels > 0) {
113+
grid->y -= (grid->tile_height - remaining_pixels);
114+
}
115+
grid->width_in_tiles = width_in_tiles;
116+
grid->height_in_tiles = height_in_tiles;
117+
assert(width_in_tiles > 0);
118+
assert(height_in_tiles > 0);
119+
grid->pixel_width = width_in_tiles * grid->tile_width;
120+
grid->pixel_height = height_in_tiles * grid->tile_height;
121+
grid->tiles = tiles;
122+
123+
grid->full_change = true;
124+
125+
common_hal_terminalio_terminal_construct(&supervisor_terminal, grid, &supervisor_terminal_font);
126+
}
118127
#endif
119128

120129
circuitpython_splash.scale = scale;

0 commit comments

Comments
 (0)