10000 Merge pull request #6363 from FoamyGuy/hidden_vectorio · kevincon/circuitpython@f975c97 · GitHub
[go: up one dir, main page]

Skip to content

Commit f975c97

Browse files
authored
Merge pull request adafruit#6363 from FoamyGuy/hidden_vectorio
Hidden vectorio
2 parents 1dce806 + 1c56476 commit f975c97

File tree

3 files changed

+45
-24
lines changed

3 files changed

+45
-24
lines changed

shared-bindings/vectorio/VectorShape.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -78,6 +78,7 @@ vectorio_draw_protocol_impl_t vectorio_vector_shape_draw_protocol_impl = {
7878
.draw_update_transform = (draw_update_transform_fun)vectorio_vector_shape_update_transform,
7979
.draw_finish_refresh = (draw_finish_refresh_fun)vectorio_vector_shape_finish_refresh,
8080
.draw_get_refresh_areas = (draw_get_refresh_areas_fun)vectorio_vector_shape_get_refresh_areas,
81+
.draw_set_dirty = (draw_set_dirty_fun)common_hal_vectorio_vector_shape_set_dirty,
8182
};
8283

8384
// Stub checker does not approve of these shared properties.

shared-bindings/vectorio/__init__.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ typedef bool (*draw_fill_area_fun)(mp_obj_t draw_protocol_self, const _displayio
1717
typedef bool (*draw_get_dirty_area_fun)(mp_obj_t draw_protocol_self, displayio_area_t *current_dirty_area);
1818
typedef void (*draw_update_transform_fun)(mp_obj_t draw_protocol_self, displayio_buffer_transform_t *group_transform);
1919
typedef void (*draw_finish_refresh_fun)(mp_obj_t draw_protocol_self);
20+
typedef void (*draw_set_dirty_fun)(mp_obj_t draw_protocol_self);
2021
typedef displayio_area_t *(*draw_get_refresh_areas_fun)(mp_obj_t draw_protocol_self, displayio_area_t *tail);
2122

2223
typedef struct _vectorio_draw_protocol_impl_t {
@@ -25,6 +26,7 @@ typedef struct _vectorio_draw_protocol_impl_t {
2526
draw_update_transform_fun draw_update_transform;
2627
draw_finish_refresh_fun draw_finish_refresh;
2728
draw_get_refresh_areas_fun draw_get_refresh_areas;
29+
draw_set_dirty_fun draw_set_dirty;
2830
} vectorio_draw_protocol_impl_t;
2931

3032
// Draw protocol

shared-module/displayio/Group.c

Lines changed: 42 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,14 @@ void common_hal_displayio_group_set_hidden(displayio_group_t *self, bool hidden)
6666
displayio_group_set_hidden_by_parent(layer, hidden);
6767
continue;
6868
}
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
6977
}
7078
}
7179

@@ -92,6 +100,14 @@ void displayio_group_set_hidden_by_parent(displayio_group_t *self, bool hidden)
92100
displayio_group_set_hidden_by_parent(layer, hidden);
93101
continue;
94102
}
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
95111
}
96112
}
97113

@@ -358,33 +374,35 @@ void displayio_group_construct(displayio_group_t *self, mp_obj_list_t *members,
358374
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) {
359375
// Track if any of the layers finishes filling in the given area. We can ignore any remaining
360376
// 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;
369388
}
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;
378397
}
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;
386405
}
387-
continue;
388406
}
389407
}
390408
return false;

0 commit comments

Comments
 (0)
0