summaryrefslogtreecommitdiff
path: root/shared-module/displayio/Group.c
diff options
context:
space:
mode:
Diffstat (limited to 'shared-module/displayio/Group.c')
-rw-r--r--shared-module/displayio/Group.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/shared-module/displayio/Group.c b/shared-module/displayio/Group.c
index 885131d47..52b89b5ae 100644
--- a/shared-module/displayio/Group.c
+++ b/shared-module/displayio/Group.c
@@ -40,6 +40,18 @@ void common_hal_displayio_group_append(displayio_group_t* self, mp_obj_t layer)
}
self->children[self->size] = layer;
self->size++;
+ self->needs_refresh = true;
+}
+
+mp_obj_t common_hal_displayio_group_pop(displayio_group_t* self) {
+ if (self->size == 0) {
+ mp_raise_IndexError(translate("Group empty"));
+ }
+ self->size--;
+ mp_obj_t item = self->children[self->size];
+ self->children[self->size] = NULL;
+ self->needs_refresh = true;
+ return item;
}
void displayio_group_construct(displayio_group_t* self, mp_obj_t* child_array, uint32_t max_size) {
@@ -65,6 +77,9 @@ bool displayio_group_get_pixel(displayio_group_t *self, int16_t x, int16_t y, ui
}
bool displayio_group_needs_refresh(displayio_group_t *self) {
+ if (self->needs_refresh) {
+ return true;
+ }
for (int32_t i = self->size - 1; i >= 0 ; i--) {
mp_obj_t layer = self->children[i];
if (MP_OBJ_IS_TYPE(layer, &displayio_sprite_type)) {
@@ -78,6 +93,7 @@ bool displayio_group_needs_refresh(displayio_group_t *self) {
}
void displayio_group_finish_refresh(displayio_group_t *self) {
+ self->needs_refresh = false;
for (int32_t i = self->size - 1; i >= 0 ; i--) {
mp_obj_t layer = self->children[i];
if (MP_OBJ_IS_TYPE(layer, &displayio_sprite_type)) {