Skip to content

Commit 73f4a61

Browse files
committed
implement needs_refresh, run pre-commit, move get_color to shared-module
1 parent 8d43a2c commit 73f4a61

File tree

7 files changed

+144
-121
lines changed

7 files changed

+144
-121
lines changed

shared-bindings/displayio/TileGrid.c

Lines changed: 17 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,21 @@
2222
#endif
2323

2424

25+
void displayio_tilegrid_validate_pixel_shader(mp_obj_t pixel_shader) {
26+
bool valid_type = true;
27+
if (!mp_obj_is_type(pixel_shader, &displayio_palette_type) && !mp_obj_is_type(pixel_shader, &displayio_colorconverter_type)) {
28+
valid_type = false;
29+
}
30+
#ifdef CIRCUITPY_TILEPALETTEMAPPER
31+
if (mp_obj_is_type(pixel_shader, &tilepalettemapper_tilepalettemapper_type)) {
32+
valid_type = true;
33+
}
34+
#endif
35+
if (!valid_type) {
36+
mp_raise_TypeError_varg(MP_ERROR_TEXT("unsupported %q type"), MP_QSTR_pixel_shader);
37+
}
38+
}
39+
2540
//| class TileGrid:
2641
//| """A grid of tiles sourced out of one bitmap
2742
//|
@@ -93,10 +108,7 @@ static mp_obj_t displayio_tilegrid_make_new(const mp_obj_type_t *type, size_t n_
93108
mp_raise_TypeError_varg(MP_ERROR_TEXT("unsupported %q type"), MP_QSTR_bitmap);
94109
}
95110
mp_obj_t pixel_shader = args[ARG_pixel_shader].u_obj;
96-
if (!mp_obj_is_type(pixel_shader, &displayio_colorconverter_type) &&
97-
!mp_obj_is_type(pixel_shader, &displayio_palette_type)) {
98-
mp_raise_TypeError_varg(MP_ERROR_TEXT("unsupported %q type"), MP_QSTR_pixel_shader);
99-
}
111+
displayio_tilegrid_validate_pixel_shader(pixel_shader);
100112
uint16_t tile_width = args[ARG_tile_width].u_int;
101113
if (tile_width == 0) {
102114
tile_width = bitmap_width;
@@ -327,21 +339,7 @@ MP_DEFINE_CONST_FUN_OBJ_1(displayio_tilegrid_get_pixel_shader_obj, displayio_til
327339

328340
static mp_obj_t displayio_tilegrid_obj_set_pixel_shader(mp_obj_t self_in, mp_obj_t pixel_shader) {
329341
displayio_tilegrid_t *self = native_tilegrid(self_in);
330-
bool valid_type = true;
331-
if (!mp_obj_is_type(pixel_shader, &displayio_palette_type) && !mp_obj_is_type(pixel_shader, &displayio_colorconverter_type)) {
332-
valid_type = false;
333-
}
334-
mp_printf(&mp_plat_print, "checking tilepalettemapper\n");
335-
#ifdef CIRCUITPY_TILEPALETTEMAPPER
336-
mp_printf(&mp_plat_print, "tilepalettemapper enabled inside set pixel shader\n");
337-
if (mp_obj_is_type(pixel_shader, &tilepalettemapper_tilepalettemapper_type)) {
338-
valid_type = true;
339-
}
340-
#endif
341-
if (!valid_type) {
342-
mp_raise_TypeError_varg(MP_ERROR_TEXT("unsupported %q type"), MP_QSTR_pixel_shader);
343-
}
344-
342+
displayio_tilegrid_validate_pixel_shader(pixel_shader);
345343
common_hal_displayio_tilegrid_set_pixel_shader(self, pixel_shader);
346344

347345
return mp_const_none;

shared-bindings/tilepalettemapper/TilePaletteMapper.c

Lines changed: 59 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -14,29 +14,29 @@
1414
#include "shared-bindings/tilepalettemapper/TilePaletteMapper.h"
1515

1616
static mp_obj_t tilepalettemapper_tilepalettemapper_make_new(const mp_obj_type_t *type, size_t n_args, size_t n_kw, const mp_obj_t *all_args) {
17-
enum { ARG_palette, ARG_width, ARG_height };
18-
static const mp_arg_t allowed_args[] = {
19-
{ MP_QSTR_palette, MP_ARG_OBJ | MP_ARG_REQUIRED },
20-
{ MP_QSTR_width, MP_ARG_INT | MP_ARG_REQUIRED, {.u_int = 1} },
21-
{ MP_QSTR_height, MP_ARG_INT | MP_ARG_REQUIRED, {.u_int = 1} },
22-
};
23-
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
24-
mp_arg_parse_all_kw_array(n_args, n_kw, all_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
25-
mp_obj_t palette = args[ARG_palette].u_obj;
26-
if (!mp_obj_is_type(palette, &displayio_palette_type)) {
27-
mp_raise_TypeError_varg(MP_ERROR_TEXT("unsupported %q type"), MP_QSTR_pixel_shader);
28-
}
29-
tilepalettemapper_tilepalettemapper_t *self = mp_obj_malloc(tilepalettemapper_tilepalettemapper_t, &tilepalettemapper_tilepalettemapper_type);
30-
common_hal_tilepalettemapper_tilepalettemapper_construct(self, palette, args[ARG_width].u_int, args[ARG_height].u_int);
31-
32-
return MP_OBJ_FROM_PTR(self);
17+
enum { ARG_palette, ARG_width, ARG_height };
18+
static const mp_arg_t allowed_args[] = {
19+
{ MP_QSTR_palette, MP_ARG_OBJ | MP_ARG_REQUIRED },
20+
{ MP_QSTR_width, MP_ARG_INT | MP_ARG_REQUIRED, {.u_int = 1} },
21+
{ MP_QSTR_height, MP_ARG_INT | MP_ARG_REQUIRED, {.u_int = 1} },
22+
};
23+
mp_arg_val_t args[MP_ARRAY_SIZE(allowed_args)];
24+
mp_arg_parse_all_kw_array(n_args, n_kw, all_args, MP_ARRAY_SIZE(allowed_args), allowed_args, args);
25+
mp_obj_t palette = args[ARG_palette].u_obj;
26+
if (!mp_obj_is_type(palette, &displayio_palette_type)) {
27+
mp_raise_TypeError_varg(MP_ERROR_TEXT("unsupported %q type"), MP_QSTR_pixel_shader);
28+
}
29+
tilepalettemapper_tilepalettemapper_t *self = mp_obj_malloc(tilepalettemapper_tilepalettemapper_t, &tilepalettemapper_tilepalettemapper_type);
30+
common_hal_tilepalettemapper_tilepalettemapper_construct(self, palette, args[ARG_width].u_int, args[ARG_height].u_int);
31+
32+
return MP_OBJ_FROM_PTR(self);
3333
}
3434

3535
//| width: int
3636
//| """Width of the tile palette mapper in tiles."""
3737
static mp_obj_t tilepalettemapper_tilepalettemapper_obj_get_width(mp_obj_t self_in) {
38-
tilepalettemapper_tilepalettemapper_t *self = MP_OBJ_TO_PTR(self_in);
39-
return MP_OBJ_NEW_SMALL_INT(common_hal_tilepalettemapper_tilepalettemapper_get_width(self));
38+
tilepalettemapper_tilepalettemapper_t *self = MP_OBJ_TO_PTR(self_in);
39+
return MP_OBJ_NEW_SMALL_INT(common_hal_tilepalettemapper_tilepalettemapper_get_width(self));
4040
}
4141
MP_DEFINE_CONST_FUN_OBJ_1(tilepalettemapper_tilepalettemapper_get_width_obj, tilepalettemapper_tilepalettemapper_obj_get_width);
4242

@@ -46,8 +46,8 @@ MP_PROPERTY_GETTER(tilepalettemapper_tilepalettemapper_width_obj,
4646
//| height: int
4747
//| """Height of the tile palette mapper in tiles."""
4848
static mp_obj_t tilepalettemapper_tilepalettemapper_obj_get_height(mp_obj_t self_in) {
49-
tilepalettemapper_tilepalettemapper_t *self = MP_OBJ_TO_PTR(self_in);
50-
return MP_OBJ_NEW_SMALL_INT(common_hal_tilepalettemapper_tilepalettemapper_get_height(self));
49+
tilepalettemapper_tilepalettemapper_t *self = MP_OBJ_TO_PTR(self_in);
50+
return MP_OBJ_NEW_SMALL_INT(common_hal_tilepalettemapper_tilepalettemapper_get_height(self));
5151
}
5252
MP_DEFINE_CONST_FUN_OBJ_1(tilepalettemapper_tilepalettemapper_get_height_obj, tilepalettemapper_tilepalettemapper_obj_get_height);
5353

@@ -58,8 +58,8 @@ MP_PROPERTY_GETTER(tilepalettemapper_tilepalettemapper_height_obj,
5858
//| palette: displayio.Palette
5959
//| """The palette that the mapper uses."""
6060
static mp_obj_t tilepalettemapper_tilepalettemapper_obj_get_palette(mp_obj_t self_in) {
61-
tilepalettemapper_tilepalettemapper_t *self = MP_OBJ_TO_PTR(self_in);
62-
return common_hal_tilepalettemapper_tilepalettemapper_get_palette(self);
61+
tilepalettemapper_tilepalettemapper_t *self = MP_OBJ_TO_PTR(self_in);
62+
return common_hal_tilepalettemapper_tilepalettemapper_get_palette(self);
6363
}
6464
MP_DEFINE_CONST_FUN_OBJ_1(tilepalettemapper_tilepalettemapper_get_palette_obj, tilepalettemapper_tilepalettemapper_obj_get_palette);
6565

@@ -91,51 +91,51 @@ MP_PROPERTY_GETTER(tilepalettemapper_tilepalettemapper_palette_obj,
9191
//|
9292
//|
9393
static mp_obj_t tilepalettemapper_subscr(mp_obj_t self_in, mp_obj_t index_obj, mp_obj_t value_obj) {
94-
tilepalettemapper_tilepalettemapper_t *self = MP_OBJ_TO_PTR(self_in);
95-
if (mp_obj_is_type(index_obj, &mp_type_slice)) {
96-
mp_raise_NotImplementedError(MP_ERROR_TEXT("Slices not supported"));
97-
} else {
98-
uint16_t x = 0;
99-
uint16_t y = 0;
100-
if (mp_obj_is_small_int(index_obj)) {
101-
mp_int_t i = MP_OBJ_SMALL_INT_VALUE(index_obj);
102-
uint16_t width = common_hal_tilepalettemapper_tilepalettemapper_get_width(self);
103-
x = i % width;
104-
y = i / width;
94+
tilepalettemapper_tilepalettemapper_t *self = MP_OBJ_TO_PTR(self_in);
95+
if (mp_obj_is_type(index_obj, &mp_type_slice)) {
96+
mp_raise_NotImplementedError(MP_ERROR_TEXT("Slices not supported"));
10597
} else {
106-
mp_obj_t *items;
107-
mp_obj_get_array_fixed_n(index_obj, 2, &items);
108-
x = mp_obj_get_int(items[0]);
109-
y = mp_obj_get_int(items[1]);
110-
}
111-
if (x >= common_hal_tilepalettemapper_tilepalettemapper_get_width(self) ||
112-
y >= common_hal_tilepalettemapper_tilepalettemapper_get_height(self)) {
113-
mp_raise_IndexError(MP_ERROR_TEXT("Tile index out of bounds"));
98+
uint16_t x = 0;
99+
uint16_t y = 0;
100+
if (mp_obj_is_small_int(index_obj)) {
101+
mp_int_t i = MP_OBJ_SMALL_INT_VALUE(index_obj);
102+
uint16_t width = common_hal_tilepalettemapper_tilepalettemapper_get_width(self);
103+
x = i % width;
104+
y = i / width;
105+
} else {
106+
mp_obj_t *items;
107+
mp_obj_get_array_fixed_n(index_obj, 2, &items);
108+
x = mp_obj_get_int(items[0]);
109+
y = mp_obj_get_int(items[1]);
110+
}
111+
if (x >= common_hal_tilepalettemapper_tilepalettemapper_get_width(self) ||
112+
y >= common_hal_tilepalettemapper_tilepalettemapper_get_height(self)) {
113+
mp_raise_IndexError(MP_ERROR_TEXT("Tile index out of bounds"));
114114
}
115115

116-
if (value_obj == MP_OBJ_SENTINEL) {
117-
// load
118-
return common_hal_tilepalettemapper_tilepalettemapper_get_mapping(self, x, y);
119-
} else if (value_obj == mp_const_none) {
120-
return MP_OBJ_NULL; // op not supported
121-
} else {
122-
size_t len = 0;
123-
mp_obj_t *items;
124-
mp_obj_list_get(value_obj, &len, &items);
125-
uint32_t palette_len = common_hal_displayio_palette_get_len(self->palette);
126-
127-
mp_arg_validate_int_range(len, 0, palette_len, MP_QSTR_mapping_length);
128-
common_hal_tilepalettemapper_tilepalettemapper_set_mapping(self, x, y, len, items);
116+
if (value_obj == MP_OBJ_SENTINEL) {
117+
// load
118+
return common_hal_tilepalettemapper_tilepalettemapper_get_mapping(self, x, y);
119+
} else if (value_obj == mp_const_none) {
120+
return MP_OBJ_NULL; // op not supported
121+
} else {
122+
size_t len = 0;
123+
mp_obj_t *items;
124+
mp_obj_list_get(value_obj, &len, &items);
125+
uint32_t palette_len = common_hal_displayio_palette_get_len(self->palette);
126+
127+
mp_arg_validate_int_range(len, 0, palette_len, MP_QSTR_mapping_length);
128+
common_hal_tilepalettemapper_tilepalettemapper_set_mapping(self, x, y, len, items);
129+
}
129130
}
130-
}
131-
return mp_const_none;
131+
return mp_const_none;
132132
}
133133

134134

135135
static const mp_rom_map_elem_t tilepalettemapper_tilepalettemapper_locals_dict_table[] = {
136-
{ MP_ROM_QSTR(MP_QSTR_width), MP_ROM_PTR(&tilepalettemapper_tilepalettemapper_width_obj) },
137-
{ MP_ROM_QSTR(MP_QSTR_height), MP_ROM_PTR(&tilepalettemapper_tilepalettemapper_height_obj) },
138-
{ MP_ROM_QSTR(MP_QSTR_palette), MP_ROM_PTR(&tilepalettemapper_tilepalettemapper_palette_obj) },
136+
{ MP_ROM_QSTR(MP_QSTR_width), MP_ROM_PTR(&tilepalettemapper_tilepalettemapper_width_obj) },
137+
{ MP_ROM_QSTR(MP_QSTR_height), MP_ROM_PTR(&tilepalettemapper_tilepalettemapper_height_obj) },
138+
{ MP_ROM_QSTR(MP_QSTR_palette), MP_ROM_PTR(&tilepalettemapper_tilepalettemapper_palette_obj) },
139139
};
140140
static MP_DEFINE_CONST_DICT(tilepalettemapper_tilepalettemapper_locals_dict, tilepalettemapper_tilepalettemapper_locals_dict_table);
141141

shared-bindings/tilepalettemapper/TilePaletteMapper.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,5 +14,3 @@ uint16_t common_hal_tilepalettemapper_tilepalettemapper_get_height(tilepalettema
1414
mp_obj_t common_hal_tilepalettemapper_tilepalettemapper_get_palette(tilepalettemapper_tilepalettemapper_t *self);
1515
mp_obj_t common_hal_tilepalettemapper_tilepalettemapper_get_mapping(tilepalettemapper_tilepalettemapper_t *self, uint16_t x, uint16_t y);
1616
void common_hal_tilepalettemapper_tilepalettemapper_set_mapping(tilepalettemapper_tilepalettemapper_t *self, uint16_t x, uint16_t y, size_t len, mp_obj_t *items);
17-
18-
uint32_t common_hal_tilepalettemapper_tilepalettemapper_get_color(tilepalettemapper_tilepalettemapper_t *self, uint16_t tile_index, uint32_t palette_index);

shared-module/displayio/TileGrid.c

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -489,8 +489,8 @@ bool displayio_tilegrid_fill_area(displayio_tilegrid_t *self,
489489

490490
output_pixel.opaque = true;
491491
#ifdef CIRCUITPY_TILEPALETTEMAPPER
492-
if (mp_obj_is_type(self->pixel_shader, &tilepalettemapper_tilepalettemapper_type)){
493-
output_pixel.pixel = common_hal_tilepalettemapper_tilepalettemapper_get_color(self->pixel_shader, tile_location, input_pixel.pixel);
492+
if (mp_obj_is_type(self->pixel_shader, &tilepalettemapper_tilepalettemapper_type)) {
493+
output_pixel.pixel = tilepalettemapper_tilepalettemapper_get_color(self->pixel_shader, tile_location, input_pixel.pixel);
494494
}
495495
#endif
496496
if (self->pixel_shader == mp_const_none) {
@@ -558,6 +558,11 @@ void displayio_tilegrid_finish_refresh(displayio_tilegrid_t *self) {
558558
} else if (mp_obj_is_type(self->pixel_shader, &displayio_colorconverter_type)) {
559559
displayio_colorconverter_finish_refresh(self->pixel_shader);
560560
}
561+
#ifdef CIRCUITPY_TILEPALETTEMAPPER
562+
if (mp_obj_is_type(self->pixel_shader, &tilepalettemapper_tilepalettemapper_type)) {
563+
tilepalettemapper_tilepalettemapper_finish_refresh(self->pixel_shader);
564+
}
565+
#endif
561566
if (mp_obj_is_type(self->bitmap, &displayio_bitmap_type)) {
562567
displayio_bitmap_finish_refresh(self->bitmap);
563568
} else if (mp_obj_is_type(self->bitmap, &displayio_ondiskbitmap_type)) {
@@ -611,6 +616,12 @@ displayio_area_t *displayio_tilegrid_get_refresh_areas(displayio_tilegrid_t *sel
611616
displayio_palette_needs_refresh(self->pixel_shader)) ||
612617
(mp_obj_is_type(self->pixel_shader, &displayio_colorconverter_type) &&
613618
displayio_colorconverter_needs_refresh(self->pixel_shader));
619+
#ifdef CIRCUITPY_TILEPALETTEMAPPER
620+
self->full_change = self->full_change ||
621+
(mp_obj_is_type(self->pixel_shader, &tilepalettemapper_tilepalettemapper_type) &&
622+
tilepalettemapper_tilepalettemapper_needs_refresh(self->pixel_shader));
623+
#endif
624+
614625
if (self->full_change || first_draw) {
615626
self->current_area.next = tail;
616627
return &self->current_area;

shared-module/displayio/TileGrid.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,3 +67,4 @@ bool displayio_tilegrid_get_previous_area(displayio_tilegrid_t *self, displayio_
6767
void displayio_tilegrid_finish_refresh(displayio_tilegrid_t *self);
6868

6969
bool displayio_tilegrid_get_rendered_hidden(displayio_tilegrid_t *self);
70+
void displayio_tilegrid_validate_pixel_shader(mp_obj_t pixel_shader);

shared-module/tilepalettemapper/TilePaletteMapper.c

Lines changed: 42 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -11,56 +11,65 @@
1111
void common_hal_tilepalettemapper_tilepalettemapper_construct(tilepalettemapper_tilepalettemapper_t *self,
1212
mp_obj_t palette, uint16_t width, uint16_t height) {
1313

14-
self->palette = palette;
15-
self->width_in_tiles = width;
16-
self->height_in_tiles = height;
17-
int mappings_len = width * height;
18-
mp_printf(&mp_plat_print, "%d", mappings_len);
19-
self->tile_mappings = (uint16_t**)m_malloc(mappings_len * sizeof(uint16_t*));
20-
uint32_t palette_len = common_hal_displayio_palette_get_len(self->palette);
21-
for (int i = 0; i < mappings_len; i++) {
22-
self->tile_mappings[i] = (uint16_t*)m_malloc(palette_len * sizeof(uint16_t));
23-
for (uint16_t j = 0; j < palette_len; j++) {
24-
self->tile_mappings[i][j] = j;
14+
self->palette = palette;
15+
self->width_in_tiles = width;
16+
self->height_in_tiles = height;
17+
self->needs_refresh = false;
18+
int mappings_len = width * height;
19+
self->tile_mappings = (uint16_t **)m_malloc(mappings_len * sizeof(uint16_t *));
20+
uint32_t palette_len = common_hal_displayio_palette_get_len(self->palette);
21+
for (int i = 0; i < mappings_len; i++) {
22+
self->tile_mappings[i] = (uint16_t *)m_malloc(palette_len * sizeof(uint16_t));
23+
for (uint16_t j = 0; j < palette_len; j++) {
24+
self->tile_mappings[i][j] = j;
25+
}
2526
}
26-
}
2727
}
2828

2929
uint16_t common_hal_tilepalettemapper_tilepalettemapper_get_width(tilepalettemapper_tilepalettemapper_t *self) {
30-
return self->width_in_tiles;
30+
return self->width_in_tiles;
3131
}
3232

3333
uint16_t common_hal_tilepalettemapper_tilepalettemapper_get_height(tilepalettemapper_tilepalettemapper_t *self) {
34-
return self->height_in_tiles;
34+
return self->height_in_tiles;
3535
}
3636

3737
mp_obj_t common_hal_tilepalettemapper_tilepalettemapper_get_palette(tilepalettemapper_tilepalettemapper_t *self) {
38-
return self->palette;
38+
return self->palette;
3939
}
4040

41-
mp_obj_t common_hal_tilepalettemapper_tilepalettemapper_get_mapping(tilepalettemapper_tilepalettemapper_t *self, uint16_t x, uint16_t y){
42-
mp_obj_list_t *list = MP_OBJ_TO_PTR(mp_obj_new_list(0, NULL));
43-
uint32_t palette_len = common_hal_displayio_palette_get_len(self->palette);
44-
int index = x + y * self->width_in_tiles;
45-
for (uint32_t i = 0; i < palette_len; i++) {
46-
mp_obj_list_append(list, mp_obj_new_int(self->tile_mappings[index][i]));
47-
}
48-
return MP_OBJ_FROM_PTR(list);
41+
mp_obj_t common_hal_tilepalettemapper_tilepalettemapper_get_mapping(tilepalettemapper_tilepalettemapper_t *self, uint16_t x, uint16_t y) {
42+
mp_obj_list_t *list = MP_OBJ_TO_PTR(mp_obj_new_list(0, NULL));
43+
uint32_t palette_len = common_hal_displayio_palette_get_len(self->palette);
44+
int index = x + y * self->width_in_tiles;
45+
for (uint32_t i = 0; i < palette_len; i++) {
46+
mp_obj_list_append(list, mp_obj_new_int(self->tile_mappings[index][i]));
47+
}
48+
return MP_OBJ_FROM_PTR(list);
4949
}
5050

5151
void common_hal_tilepalettemapper_tilepalettemapper_set_mapping(tilepalettemapper_tilepalettemapper_t *self, uint16_t x, uint16_t y, size_t len, mp_obj_t *items) {
5252
// size_t len = 0;
5353
// mp_obj_t *items;
5454
// mp_obj_list_get(mapping, &len, &items);
55-
uint32_t palette_len = common_hal_displayio_palette_get_len(self->palette);
56-
for (uint16_t i = 0; i < len; i++) {
57-
int mapping_val = mp_arg_validate_type_int(items[i], MP_QSTR_mapping_value);
58-
mp_arg_validate_int_range(mapping_val, 0, palette_len-1, MP_QSTR_mapping_value);
59-
self->tile_mappings[y * self->width_in_tiles + x][i] = mapping_val;
60-
}
55+
uint32_t palette_len = common_hal_displayio_palette_get_len(self->palette);
56+
for (uint16_t i = 0; i < len; i++) {
57+
int mapping_val = mp_arg_validate_type_int(items[i], MP_QSTR_mapping_value);
58+
mp_arg_validate_int_range(mapping_val, 0, palette_len - 1, MP_QSTR_mapping_value);
59+
self->tile_mappings[y * self->width_in_tiles + x][i] = mapping_val;
60+
}
61+
self->needs_refresh = true;
62+
}
63+
64+
uint32_t tilepalettemapper_tilepalettemapper_get_color(tilepalettemapper_tilepalettemapper_t *self, uint16_t tile_index, uint32_t palette_index) {
65+
uint32_t mapped_index = self->tile_mappings[tile_index][palette_index];
66+
return common_hal_displayio_palette_get_color(self->palette, mapped_index);
6167
}
6268

63-
uint32_t common_hal_tilepalettemapper_tilepalettemapper_get_color(tilepalettemapper_tilepalettemapper_t *self, uint16_t tile_index, uint32_t palette_index){
64-
uint32_t mapped_index = self->tile_mappings[tile_index][palette_index];
65-
return common_hal_displayio_palette_get_color(self->palette, mapped_index);
66-
}
69+
bool tilepalettemapper_tilepalettemapper_needs_refresh(tilepalettemapper_tilepalettemapper_t *self) {
70+
return self->needs_refresh;
71+
}
72+
73+
void tilepalettemapper_tilepalettemapper_finish_refresh(tilepalettemapper_tilepalettemapper_t *self) {
74+
self->needs_refresh = false;
75+
}

shared-module/tilepalettemapper/TilePaletteMapper.h

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,15 @@
1313
#include "py/obj.h"
1414

1515
typedef struct {
16-
mp_obj_base_t base;
17-
mp_obj_t palette;
18-
uint16_t width_in_tiles;
19-
uint16_t height_in_tiles;
20-
uint16_t **tile_mappings;
21-
} tilepalettemapper_tilepalettemapper_t;
16+
mp_obj_base_t base;
17+
mp_obj_t palette;
18+
uint16_t width_in_tiles;
19+
uint16_t height_in_tiles;
20+
uint16_t **tile_mappings;
21+
bool needs_refresh;
22+
} tilepalettemapper_tilepalettemapper_t;
23+
24+
bool tilepalettemapper_tilepalettemapper_needs_refresh(tilepalettemapper_tilepalettemapper_t *self);
25+
void tilepalettemapper_tilepalettemapper_finish_refresh(tilepalettemapper_tilepalettemapper_t *self);
26+
27+
uint32_t tilepalettemapper_tilepalettemapper_get_color(tilepalettemapper_tilepalettemapper_t *self, uint16_t tile_index, uint32_t palette_index);

0 commit comments

Comments
 (0)