@@ -66,6 +66,14 @@ void common_hal_displayio_group_set_hidden(displayio_group_t *self, bool hidden)
66
66
displayio_group_set_hidden_by_parent (layer , hidden );
67
67
continue ;
68
68
}
69
+ #if CIRCUITPY_VECTORIO
70
+ const vectorio_draw_protocol_t * draw_protocol = mp_proto_get (MP_QSTR_protocol_draw , self -> members -> items [i ]);
71
+ if (draw_protocol != NULL ) {
72
+ layer = draw_protocol -> draw_get_protocol_self (self -> members -> items [i ]);
73
+ draw_protocol -> draw_protocol_impl -> draw_set_dirty (layer );
74
+ continue ;
75
+ }
76
+ #endif
69
77
}
70
78
}
71
79
@@ -92,6 +100,14 @@ void displayio_group_set_hidden_by_parent(displayio_group_t *self, bool hidden)
92
100
displayio_group_set_hidden_by_parent (layer , hidden );
93
101
continue ;
94
102
}
103
+ #if CIRCUITPY_VECTORIO
104
+ const vectorio_draw_protocol_t * draw_protocol = mp_proto_get (MP_QSTR_protocol_draw , self -> members -> items [i ]);
105
+ if (draw_protocol != NULL ) {
106
+ layer = draw_protocol -> draw_get_protocol_self (self -> members -> items [i ]);
107
+ draw_protocol -> draw_protocol_impl -> draw_set_dirty (layer );
108
+ continue ;
109
+ }
110
+ #endif
95
111
}
96
112
}
97
113
@@ -358,33 +374,35 @@ void displayio_group_construct(displayio_group_t *self, mp_obj_list_t *members,
358
374
bool displayio_group_fill_area (displayio_group_t * self , const _displayio_colorspace_t * colorspace , const displayio_area_t * area , uint32_t * mask , uint32_t * buffer ) {
359
375
// Track if any of the layers finishes filling in the given area. We can ignore any remaining
360
376
// layers at that point.
361
- for (int32_t i = self -> members -> len - 1 ; i >= 0 ; i -- ) {
362
- mp_obj_t layer ;
363
- #if CIRCUITPY_VECTORIO
364
- const vectorio_draw_protocol_t * draw_protocol = mp_proto_get (MP_QSTR_protocol_draw , self -> members -> items [i ]);
365
- if (draw_protocol != NULL ) {
366
- layer = draw_protocol -> draw_get_protocol_self (self -> members -> items [i ]);
367
- if (draw_protocol -> draw_protocol_impl -> draw_fill_area (layer , colorspace , area , mask , buffer )) {
368
- return true;
377
+ if (self -> hidden == false) {
378
+ for (int32_t i = self -> members -> len - 1 ; i >= 0 ; i -- ) {
379
+ mp_obj_t layer ;
380
+ #if CIRCUITPY_VECTORIO
381
+ const vectorio_draw_protocol_t * draw_protocol = mp_proto_get (MP_QSTR_protocol_draw , self -> members -> items [i ]);
382
+ if (draw_protocol != NULL ) {
383
+ layer = draw_protocol -> draw_get_protocol_self (self -> members -> items [i ]);
384
+ if (draw_protocol -> draw_protocol_impl -> draw_fill_area (layer , colorspace , area , mask , buffer )) {
385
+ return true;
386
+ }
387
+ continue ;
369
388
}
370
- continue ;
371
- }
372
- #endif
373
- layer = mp_obj_cast_to_native_base (
374
- self -> members -> items [ i ], & displayio_tilegrid_type );
375
- if ( layer != MP_OBJ_NULL ) {
376
- if ( displayio_tilegrid_fill_area ( layer , colorspace , area , mask , buffer )) {
377
- return true ;
389
+ #endif
390
+ layer = mp_obj_cast_to_native_base (
391
+ self -> members -> items [ i ], & displayio_tilegrid_type );
392
+ if ( layer != MP_OBJ_NULL ) {
393
+ if ( displayio_tilegrid_fill_area ( layer , colorspace , area , mask , buffer )) {
394
+ return true;
395
+ }
396
+ continue ;
378
397
}
379
- continue ;
380
- }
381
- layer = mp_obj_cast_to_native_base (
382
- self -> members -> items [ i ], & displayio_group_type );
383
- if ( layer != MP_OBJ_NULL ) {
384
- if ( displayio_group_fill_area ( layer , colorspace , area , mask , buffer )) {
385
- return true ;
398
+ layer = mp_obj_cast_to_native_base (
399
+ self -> members -> items [ i ], & displayio_group_type );
400
+ if ( layer != MP_OBJ_NULL ) {
401
+ if ( displayio_group_fill_area ( layer , colorspace , area , mask , buffer )) {
402
+ return true;
403
+ }
404
+ continue ;
386
405
}
387
- continue ;
388
406
}
389
407
}
390
408
return false;
0 commit comments