diff --git a/shared-module/displayio/Group.c b/shared-module/displayio/Group.c index 7eec72404f..bd92d20c2d 100644 --- a/shared-module/displayio/Group.c +++ b/shared-module/displayio/Group.c @@ -456,7 +456,9 @@ displayio_area_t *displayio_group_get_refresh_areas(displayio_group_t *self, dis layer = mp_obj_cast_to_native_base( self->members->items[i], &displayio_tilegrid_type); if (layer != MP_OBJ_NULL) { - tail = displayio_tilegrid_get_refresh_areas(layer, tail); + if (!displayio_tilegrid_get_rendered_hidden(layer)) { + tail = displayio_tilegrid_get_refresh_areas(layer, tail); + } continue; } layer = mp_obj_cast_to_native_base( diff --git a/shared-module/displayio/TileGrid.c b/shared-module/displayio/TileGrid.c index 723aa41682..ea65920027 100644 --- a/shared-module/displayio/TileGrid.c +++ b/shared-module/displayio/TileGrid.c @@ -82,8 +82,13 @@ bool common_hal_displayio_tilegrid_get_hidden(displayio_tilegrid_t *self) { return self->hidden; } +bool displayio_tilegrid_get_rendered_hidden(displayio_tilegrid_t *self) { + return self->rendered_hidden; +} + void common_hal_displayio_tilegrid_set_hidden(displayio_tilegrid_t *self, bool hidden) { self->hidden = hidden; + self->rendered_hidden = false; if (!hidden) { self->full_change = true; } @@ -91,6 +96,7 @@ void common_hal_displayio_tilegrid_set_hidden(displayio_tilegrid_t *self, bool h void displayio_tilegrid_set_hidden_by_parent(displayio_tilegrid_t *self, bool hidden) { self->hidden_by_parent = hidden; + self->rendered_hidden = false; if (!hidden) { self->full_change = true; } @@ -582,6 +588,7 @@ displayio_area_t *displayio_tilegrid_get_refresh_areas(displayio_tilegrid_t *sel bool hidden = self->hidden || self->hidden_by_parent; // Check hidden first because it trumps all other changes. if (hidden) { + self->rendered_hidden = true; if (!first_draw) { self->previous_area.next = tail; return &self->previous_area; diff --git a/shared-module/displayio/TileGrid.h b/shared-module/displayio/TileGrid.h index b5aab51348..4f5cfbc62f 100644 --- a/shared-module/displayio/TileGrid.h +++ b/shared-module/displayio/TileGrid.h @@ -66,6 +66,7 @@ typedef struct { bool transpose_xy : 1; bool hidden : 1; bool hidden_by_parent : 1; + bool rendered_hidden : 1; uint8_t padding : 6; } displayio_tilegrid_t; @@ -86,4 +87,6 @@ void displayio_tilegrid_update_transform(displayio_tilegrid_t *group, const disp bool displayio_tilegrid_get_previous_area(displayio_tilegrid_t *self, displayio_area_t *area); void displayio_tilegrid_finish_refresh(displayio_tilegrid_t *self); +bool displayio_tilegrid_get_rendered_hidden(displayio_tilegrid_t *self); + #endif // MICROPY_INCLUDED_SHARED_MODULE_DISPLAYIO_TILEGRID_H