Skip to content

Commit 0642917

Browse files
authored
Merge pull request #6270 from FoamyGuy/tilegrid_bitmap_property
adding bitmap property to TileGrid
2 parents fdf8207 + 6e3fe07 commit 0642917

File tree

7 files changed

+91
-1
lines changed

7 files changed

+91
-1
lines changed

locale/circuitpython.pot

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1604,6 +1604,10 @@ msgstr ""
16041604
msgid "Name too long"
16051605
msgstr ""
16061606

1607+
#: shared-bindings/displayio/TileGrid.c
1608+
msgid "New bitmap must be same size as old bitmap"
1609+
msgstr ""
1610+
16071611
#: ports/espressif/common-hal/_bleio/__init__.c
16081612
msgid "Nimble out of memory"
16091613
msgstr ""

ports/atmel-samd/boards/bdmicro_vina_d21/mpconfigboard.mk

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,5 @@ CHIP_FAMILY = samd21
99
SPI_FLASH_FILESYSTEM = 1
1010
EXTERNAL_FLASH_DEVICES = "MX25L51245G","GD25S512MD"
1111
LONGINT_IMPL = MPZ
12+
13+
CIRCUITPY_ONEWIREIO = 0

ports/atmel-samd/boards/metro_m0_express/mpconfigboard.mk

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,5 @@ CHIP_FAMILY = samd21
99
SPI_FLASH_FILESYSTEM = 1
1010
EXTERNAL_FLASH_DEVICES = "S25FL216K, GD25Q16C"
1111
LONGINT_IMPL = MPZ
12+
13+
CIRCUITPY_ONEWIREIO = 0

ports/atmel-samd/boards/stackrduino_m0_pro/mpconfigboard.mk

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,5 @@ CHIP_FAMILY = samd21
99
SPI_FLASH_FILESYSTEM = 1
1010
EXTERNAL_FLASH_DEVICES = "W25Q64JVxQ"
1111
LONGINT_IMPL = MPZ
12+
13+
CIRCUITPY_ONEWIREIO = 0

shared-bindings/displayio/TileGrid.c

Lines changed: 69 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,7 @@ static displayio_tilegrid_t *native_tilegrid(mp_obj_t tilegrid_obj) {
143143
mp_obj_assert_native_inited(native_tilegrid);
144144
return MP_OBJ_TO_PTR(native_tilegrid);
145145
}
146+
146147
//| hidden: bool
147148
//| """True when the TileGrid is hidden. This may be False even when a part of a hidden Group."""
148149
//|
@@ -379,6 +380,72 @@ const mp_obj_property_t displayio_tilegrid_pixel_shader_obj = {
379380
MP_ROM_NONE},
380381
};
381382

383+
//| bitmap: Union[Bitmap,OnDiskBitmap,Shape]
384+
//| """The bitmap of the tilegrid."""
385+
//|
386+
STATIC mp_obj_t displayio_tilegrid_obj_get_bitmap(mp_obj_t self_in) {
387+
displayio_tilegrid_t *self = native_tilegrid(self_in);
388+
return common_hal_displayio_tilegrid_get_bitmap(self);
389+
}
390+
MP_DEFINE_CONST_FUN_OBJ_1(displayio_tilegrid_get_bitmap_obj, displayio_tilegrid_obj_get_bitmap);
391+
392+
STATIC mp_obj_t displayio_tilegrid_obj_set_bitmap(mp_obj_t self_in, mp_obj_t bitmap) {
393+
displayio_tilegrid_t *self = native_tilegrid(self_in);
394+
395+
uint16_t new_bitmap_width;
396+
uint16_t new_bitmap_height;
397+
mp_obj_t native = mp_obj_cast_to_native_base(bitmap, &displayio_shape_type);
398+
if (native != MP_OBJ_NULL) {
399+
displayio_shape_t *bmp = MP_OBJ_TO_PTR(native);
400+
new_bitmap_width = bmp->width;
401+
new_bitmap_height = bmp->height;
402+
} else if (mp_obj_is_type(bitmap, &displayio_bitmap_type)) {
403+
displayio_bitmap_t *bmp = MP_OBJ_TO_PTR(bitmap);
404+
native = bitmap;
405+
new_bitmap_width = bmp->width;
406+
new_bitmap_height = bmp->height;
407+
} else if (mp_obj_is_type(bitmap, &displayio_ondiskbitmap_type)) {
408+
displayio_ondiskbitmap_t *bmp = MP_OBJ_TO_PTR(bitmap);
409+
native = bitmap;
410+
new_bitmap_width = bmp->width;
411+
new_bitmap_height = bmp->height;
412+
} else {
413+
mp_raise_TypeError_varg(translate("unsupported %q type"), MP_QSTR_bitmap);
414+
}
415+
416+
mp_obj_t old_native = mp_obj_cast_to_native_base(self->bitmap, &displayio_shape_type);
417+
if (old_native != MP_OBJ_NULL) {
418+
displayio_shape_t *old_bmp = MP_OBJ_TO_PTR(old_native);
419+
if (old_bmp->width != new_bitmap_width || old_bmp->height != new_bitmap_height) {
420+
mp_raise_ValueError(translate("New bitmap must be same size as old bitmap"));
421+
}
422+
} else if (mp_obj_is_type(self->bitmap, &displayio_bitmap_type)) {
423+
displayio_bitmap_t *old_bmp = MP_OBJ_TO_PTR(self->bitmap);
424+
old_native = self->bitmap;
425+
if (old_bmp->width != new_bitmap_width || old_bmp->height != new_bitmap_height) {
426+
mp_raise_ValueError(translate("New bitmap must be same size as old bitmap"));
427+
}
428+
} else if (mp_obj_is_type(self->bitmap, &displayio_ondiskbitmap_type)) {
429+
displayio_ondiskbitmap_t *old_bmp = MP_OBJ_TO_PTR(self->bitmap);
430+
old_native = self->bitmap;
431+
if (old_bmp->width != new_bitmap_width || old_bmp->height != new_bitmap_height) {
432+
mp_raise_ValueError(translate("New bitmap must be same size as old bitmap"));
433+
}
434+
}
435+
436+
common_hal_displayio_tilegrid_set_bitmap(self, bitmap);
437+
438+
return mp_const_none;
439+
}
440+
MP_DEFINE_CONST_FUN_OBJ_2(displayio_tilegrid_set_bitmap_obj, displayio_tilegrid_obj_set_bitmap);
441+
442+
const mp_obj_property_t displayio_tilegrid_bitmap_obj = {
443+
.base.type = &mp_type_property,
444+
.proxy = {(mp_obj_t)&displayio_tilegrid_get_bitmap_obj,
445+
(mp_obj_t)&displayio_tilegrid_set_bitmap_obj,
446+
MP_ROM_NONE},
447+
};
448+
382449
//| def __getitem__(self, index: Union[Tuple[int, int], int]) -> int:
383450
//| """Returns the tile index at the given index. The index can either be an x,y tuple or an int equal
384451
//| to ``y * width + x``.
@@ -454,7 +521,8 @@ STATIC const mp_rom_map_elem_t displayio_tilegrid_locals_dict_table[] = {
454521
{ MP_ROM_QSTR(MP_QSTR_flip_x), MP_ROM_PTR(&displayio_tilegrid_flip_x_obj) },
455522
{ MP_ROM_QSTR(MP_QSTR_flip_y), MP_ROM_PTR(&displayio_tilegrid_flip_y_obj) },
456523
{ MP_ROM_QSTR(MP_QSTR_transpose_xy), MP_ROM_PTR(&displayio_tilegrid_transpose_xy_obj) },
457-
{ MP_ROM_QSTR(MP_QSTR_pixel_shader), MP_ROM_PTR(&displayio_tilegrid_pixel_shader_obj) },
524+
{ MP_ROM_QSTR(MP_QSTR_pixel_shader), MP_ROM_PTR(&displayio_tilegrid_pixel_shader_obj) },
525+
{ MP_ROM_QSTR(MP_QSTR_bitmap), MP_ROM_PTR(&displayio_tilegrid_bitmap_obj) },
458526
};
459527
STATIC MP_DEFINE_CONST_DICT(displayio_tilegrid_locals_dict, displayio_tilegrid_locals_dict_table);
460528

shared-bindings/displayio/TileGrid.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,9 @@ void common_hal_displayio_tilegrid_set_y(displayio_tilegrid_t *self, mp_int_t y)
4545
mp_obj_t common_hal_displayio_tilegrid_get_pixel_shader(displayio_tilegrid_t *self);
4646
void common_hal_displayio_tilegrid_set_pixel_shader(displayio_tilegrid_t *self, mp_obj_t pixel_shader);
4747

48+
mp_obj_t common_hal_displayio_tilegrid_get_bitmap(displayio_tilegrid_t *self);
49+
void common_hal_displayio_tilegrid_set_bitmap(displayio_tilegrid_t *self, mp_obj_t bitmap);
50+
4851

4952
bool common_hal_displayio_tilegrid_get_flip_x(displayio_tilegrid_t *self);
5053
void common_hal_displayio_tilegrid_set_flip_x(displayio_tilegrid_t *self, bool flip_x);

shared-module/displayio/TileGrid.c

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -221,6 +221,15 @@ void common_hal_displayio_tilegrid_set_pixel_shader(displayio_tilegrid_t *self,
221221
self->full_change = true;
222222
}
223223

224+
mp_obj_t common_hal_displayio_tilegrid_get_bitmap(displayio_tilegrid_t *self) {
225+
return self->bitmap;
226+
}
227+
228+
void common_hal_displayio_tilegrid_set_bitmap(displayio_tilegrid_t *self, mp_obj_t bitmap) {
229+
self->bitmap = bitmap;
230+
self->full_change = true;
231+
}
232+
224233
uint16_t common_hal_displayio_tilegrid_get_width(displayio_tilegrid_t *self) {
225234
return self->width_in_tiles;
226235
}

0 commit comments

Comments
 (0)