@@ -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};
459527STATIC MP_DEFINE_CONST_DICT (displayio_tilegrid_locals_dict , displayio_tilegrid_locals_dict_table );
460528
0 commit comments