fix pixel_shader property name, add tilegrid property and set tilegrid to None before it is bound, disallow TPM from being bound multiple times.

This commit is contained in:
foamyguy 2025-05-09 09:56:34 -05:00
parent 4fb7d44714
commit 04b98ed71f
3 changed files with 9 additions and 4 deletions

View file

@ -2070,8 +2070,8 @@ msgstr ""
msgid "Tile width must exactly divide bitmap width" msgid "Tile width must exactly divide bitmap width"
msgstr "" msgstr ""
#: shared-module/displayio/Group.c #: shared-module/tilepalettemapper/TilePaletteMapper.c
msgid "TileGrid must have a pixel_shader" msgid "TilePaletteMapper may only be bound to a TileGrid once"
msgstr "" msgstr ""
#: shared-bindings/alarm/time/TimeAlarm.c #: shared-bindings/alarm/time/TimeAlarm.c

View file

@ -84,7 +84,7 @@ static mp_obj_t tilepalettemapper_tilepalettemapper_obj_get_pixel_shader(mp_obj_
} }
MP_DEFINE_CONST_FUN_OBJ_1(tilepalettemapper_tilepalettemapper_get_pixel_shader_obj, tilepalettemapper_tilepalettemapper_obj_get_pixel_shader); MP_DEFINE_CONST_FUN_OBJ_1(tilepalettemapper_tilepalettemapper_get_pixel_shader_obj, tilepalettemapper_tilepalettemapper_obj_get_pixel_shader);
MP_PROPERTY_GETTER(tilepalettemapper_tilepalettemapper_palette_obj, MP_PROPERTY_GETTER(tilepalettemapper_tilepalettemapper_pixel_shader_obj,
(mp_obj_t)&tilepalettemapper_tilepalettemapper_get_pixel_shader_obj); (mp_obj_t)&tilepalettemapper_tilepalettemapper_get_pixel_shader_obj);
//| tilegrid: displayio.TileGrid //| tilegrid: displayio.TileGrid
@ -165,7 +165,8 @@ static mp_obj_t tilepalettemapper_subscr(mp_obj_t self_in, mp_obj_t index_obj, m
static const mp_rom_map_elem_t tilepalettemapper_tilepalettemapper_locals_dict_table[] = { static const mp_rom_map_elem_t tilepalettemapper_tilepalettemapper_locals_dict_table[] = {
{ MP_ROM_QSTR(MP_QSTR_width), MP_ROM_PTR(&tilepalettemapper_tilepalettemapper_width_obj) }, { MP_ROM_QSTR(MP_QSTR_width), MP_ROM_PTR(&tilepalettemapper_tilepalettemapper_width_obj) },
{ MP_ROM_QSTR(MP_QSTR_height), MP_ROM_PTR(&tilepalettemapper_tilepalettemapper_height_obj) }, { MP_ROM_QSTR(MP_QSTR_height), MP_ROM_PTR(&tilepalettemapper_tilepalettemapper_height_obj) },
{ MP_ROM_QSTR(MP_QSTR_palette), MP_ROM_PTR(&tilepalettemapper_tilepalettemapper_palette_obj) }, { MP_ROM_QSTR(MP_QSTR_pixel_shader), MP_ROM_PTR(&tilepalettemapper_tilepalettemapper_pixel_shader_obj) },
{ MP_ROM_QSTR(MP_QSTR_tilegrid), MP_ROM_PTR(&tilepalettemapper_tilepalettemapper_tilegrid_obj) },
}; };
static MP_DEFINE_CONST_DICT(tilepalettemapper_tilepalettemapper_locals_dict, tilepalettemapper_tilepalettemapper_locals_dict_table); static MP_DEFINE_CONST_DICT(tilepalettemapper_tilepalettemapper_locals_dict, tilepalettemapper_tilepalettemapper_locals_dict_table);

View file

@ -14,6 +14,7 @@ void common_hal_tilepalettemapper_tilepalettemapper_construct(tilepalettemapper_
mp_obj_t pixel_shader, uint16_t input_color_count) { mp_obj_t pixel_shader, uint16_t input_color_count) {
self->pixel_shader = pixel_shader; self->pixel_shader = pixel_shader;
self->input_color_count = input_color_count; self->input_color_count = input_color_count;
self->tilegrid = mp_const_none;
} }
uint16_t common_hal_tilepalettemapper_tilepalettemapper_get_width(tilepalettemapper_tilepalettemapper_t *self) { uint16_t common_hal_tilepalettemapper_tilepalettemapper_get_width(tilepalettemapper_tilepalettemapper_t *self) {
@ -79,6 +80,9 @@ void tilepalettemapper_tilepalettemapper_get_color(tilepalettemapper_tilepalette
} }
void tilepalettemapper_tilepalettemapper_bind(tilepalettemapper_tilepalettemapper_t *self, displayio_tilegrid_t *tilegrid) { void tilepalettemapper_tilepalettemapper_bind(tilepalettemapper_tilepalettemapper_t *self, displayio_tilegrid_t *tilegrid) {
if (self->tilegrid != mp_const_none) {
mp_raise_RuntimeError(MP_ERROR_TEXT("TilePaletteMapper may only be bound to a TileGrid once"));
}
self->tilegrid = tilegrid; self->tilegrid = tilegrid;
self->width_in_tiles = common_hal_displayio_tilegrid_get_width(tilegrid); self->width_in_tiles = common_hal_displayio_tilegrid_get_width(tilegrid);
self->height_in_tiles = common_hal_displayio_tilegrid_get_height(tilegrid); self->height_in_tiles = common_hal_displayio_tilegrid_get_height(tilegrid);