34
34
#include "shared-bindings/vectorio/VectorShape.h"
35
35
#endif
36
36
37
+ static void check_readonly (displayio_group_t * self ) {
38
+ if (self -> readonly ) {
39
+ mp_raise_RuntimeError (MP_ERROR_TEXT ("Read-only" ));
40
+ }
41
+ }
37
42
38
43
void common_hal_displayio_group_construct (displayio_group_t * self , uint32_t scale , mp_int_t x , mp_int_t y ) {
39
44
mp_obj_list_t * members = mp_obj_new_list (0 , NULL );
@@ -48,6 +53,7 @@ void common_hal_displayio_group_set_hidden(displayio_group_t *self, bool hidden)
48
53
if (self -> hidden == hidden ) {
49
54
return ;
50
55
}
56
+ check_readonly (self );
51
57
self -> hidden = hidden ;
52
58
if (self -> hidden_by_parent ) {
53
59
return ;
@@ -81,6 +87,7 @@ void displayio_group_set_hidden_by_parent(displayio_group_t *self, bool hidden)
81
87
if (self -> hidden_by_parent == hidden ) {
82
88
return ;
83
89
}
90
+ check_readonly (self );
84
91
self -> hidden_by_parent = hidden ;
85
92
// If we're already hidden, then we're done.
86
93
if (self -> hidden ) {
@@ -209,6 +216,7 @@ void common_hal_displayio_group_set_scale(displayio_group_t *self, uint32_t scal
209
216
if (self -> scale == scale ) {
210
217
return ;
211
218
}
219
+ check_readonly (self );
212
220
uint8_t parent_scale = self -> absolute_transform .scale / self -> scale ;
213
221
self -> absolute_transform .dx = self -> absolute_transform .dx / self -> scale * scale ;
214
222
self -> absolute_transform .dy = self -> absolute_transform .dy / self -> scale * scale ;
@@ -225,6 +233,7 @@ void common_hal_displayio_group_set_x(displayio_group_t *self, mp_int_t x) {
225
233
if (self -> x == x ) {
226
234
return ;
227
235
}
236
+ check_readonly (self );
228
237
if (self -> absolute_transform .transpose_xy ) {
229
238
int16_t dy = self -> absolute_transform .dy / self -> scale ;
230
239
self -> absolute_transform .y += dy * (x - self -> x );
@@ -245,6 +254,7 @@ void common_hal_displayio_group_set_y(displayio_group_t *self, mp_int_t y) {
245
254
if (self -> y == y ) {
246
255
return ;
247
256
}
257
+ check_readonly (self );
248
258
if (self -> absolute_transform .transpose_xy ) {
249
259
int8_t dx = self -> absolute_transform .dx / self -> scale ;
250
260
self -> absolute_transform .x += dx * (y - self -> y );
@@ -257,6 +267,7 @@ void common_hal_displayio_group_set_y(displayio_group_t *self, mp_int_t y) {
257
267
}
258
268
259
269
static void _add_layer (displayio_group_t * self , mp_obj_t layer ) {
270
+ check_readonly (self );
260
271
#if CIRCUITPY_VECTORIO
261
272
const vectorio_draw_protocol_t * draw_protocol = mp_proto_get (MP_QSTR_protocol_draw , layer );
262
273
if (draw_protocol != NULL ) {
@@ -294,6 +305,7 @@ static void _add_layer(displayio_group_t *self, mp_obj_t layer) {
294
305
}
295
306
296
307
static void _remove_layer (displayio_group_t * self , size_t index ) {
308
+ check_readonly (self );
297
309
mp_obj_t layer ;
298
310
displayio_area_t layer_area ;
299
311
bool rendered_last_frame = false;
@@ -371,6 +383,7 @@ void displayio_group_construct(displayio_group_t *self, mp_obj_list_t *members,
371
383
self -> item_removed = false;
372
384
self -> scale = scale ;
373
385
self -> in_group = false;
386
+ self -> readonly = false;
374
387
}
375
388
376
389
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 ) {
0 commit comments