Skip to content

Commit fca440f

Browse files
authored
Merge pull request #2113 from tannewt/displayio_hidden
Add .hidden to TileGrid and Group
2 parents 321b57a + 7951646 commit fca440f

File tree

14 files changed

+179
-36
lines changed

14 files changed

+179
-36
lines changed

ports/atmel-samd/boards/ugame10/mpconfigboard.mk

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,16 @@ CIRCUITPY_ANALOGIO = 1
1919
CIRCUITPY_GAMEPAD = 1
2020
CIRCUITPY_DISPLAYIO = 1
2121

22-
CIRCUITPY_TOUCHIO = 0
22+
CIRCUITPY_AUDIOBUSIO = 0
23+
CIRCUITPY_BITBANGIO = 0
24+
CIRCUITPY_FREQUENCYIO = 0
25+
CIRCUITPY_I2CSLAVE = 0
2326
CIRCUITPY_NEOPIXEL_WRITE = 0
27+
CIRCUITPY_PIXELBUF = 0
2428
CIRCUITPY_RTC = 0
25-
CIRCUITPY_USB_MIDI = 0
29+
CIRCUITPY_TOUCHIO = 0
2630
CIRCUITPY_USB_HID = 0
27-
CIRCUITPY_I2CSLAVE = 0
28-
CIRCUITPY_FREQUENCYIO = 0
29-
CIRCUITPY_AUDIOBUSIO = 0
30-
CIRCUITPY_PIXELBUF = 0
31+
CIRCUITPY_USB_MIDI = 0
3132

3233
FROZEN_MPY_DIRS += $(TOP)/frozen/circuitpython-stage/ugame10
3334

shared-bindings/displayio/Group.c

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,32 @@ displayio_group_t* native_group(mp_obj_t group_obj) {
9090
return MP_OBJ_TO_PTR(native_group);
9191
}
9292

93+
//| .. attribute:: hidden
94+
//|
95+
//| True when the Group and all of it's layers are not visible. When False, the Group's layers
96+
//| are visible if they haven't been hidden.
97+
//|
98+
STATIC mp_obj_t displayio_group_obj_get_hidden(mp_obj_t self_in) {
99+
displayio_group_t *self = native_group(self_in);
100+
return mp_obj_new_bool(common_hal_displayio_group_get_hidden(self));
101+
}
102+
MP_DEFINE_CONST_FUN_OBJ_1(displayio_group_get_hidden_obj, displayio_group_obj_get_hidden);
103+
104+
STATIC mp_obj_t displayio_group_obj_set_hidden(mp_obj_t self_in, mp_obj_t hidden_obj) {
105+
displayio_group_t *self = native_group(self_in);
106+
107+
common_hal_displayio_group_set_hidden(self, mp_obj_is_true(hidden_obj));
108+
return mp_const_none;
109+
}
110+
MP_DEFINE_CONST_FUN_OBJ_2(displayio_group_set_hidden_obj, displayio_group_obj_set_hidden);
111+
112+
const mp_obj_property_t displayio_group_hidden_obj = {
113+
.base.type = &mp_type_property,
114+
.proxy = {(mp_obj_t)&displayio_group_get_hidden_obj,
115+
(mp_obj_t)&displayio_group_set_hidden_obj,
116+
(mp_obj_t)&mp_const_none_obj},
117+
};
118+
93119
//| .. attribute:: scale
94120
//|
95121
//| Scales each pixel within the Group in both directions. For example, when scale=2 each pixel
@@ -305,6 +331,7 @@ STATIC mp_obj_t group_subscr(mp_obj_t self_in, mp_obj_t index_obj, mp_obj_t valu
305331
}
306332

307333
STATIC const mp_rom_map_elem_t displayio_group_locals_dict_table[] = {
334+
{ MP_ROM_QSTR(MP_QSTR_hidden), MP_ROM_PTR(&displayio_group_hidden_obj) },
308335
{ MP_ROM_QSTR(MP_QSTR_scale), MP_ROM_PTR(&displayio_group_scale_obj) },
309336
{ MP_ROM_QSTR(MP_QSTR_x), MP_ROM_PTR(&displayio_group_x_obj) },
310337
{ MP_ROM_QSTR(MP_QSTR_y), MP_ROM_PTR(&displayio_group_y_obj) },

shared-bindings/displayio/Group.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ displayio_group_t* native_group(mp_obj_t group_obj);
3636
void common_hal_displayio_group_construct(displayio_group_t* self, uint32_t max_size, uint32_t scale, mp_int_t x, mp_int_t y);
3737
uint32_t common_hal_displayio_group_get_scale(displayio_group_t* self);
3838
void common_hal_displayio_group_set_scale(displayio_group_t* self, uint32_t scale);
39+
bool common_hal_displayio_group_get_hidden(displayio_group_t* self);
40+
void common_hal_displayio_group_set_hidden(displayio_group_t* self, bool hidden);
3941
mp_int_t common_hal_displayio_group_get_x(displayio_group_t* self);
4042
void common_hal_displayio_group_set_x(displayio_group_t* self, mp_int_t x);
4143
mp_int_t common_hal_displayio_group_get_y(displayio_group_t* self);

shared-bindings/displayio/TileGrid.c

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,30 @@ static displayio_tilegrid_t* native_tilegrid(mp_obj_t tilegrid_obj) {
144144
mp_obj_assert_native_inited(native_tilegrid);
145145
return MP_OBJ_TO_PTR(native_tilegrid);
146146
}
147+
//| .. attribute:: hidden
148+
//|
149+
//| True when the TileGrid is hidden. This may be False even when a part of a hidden Group.
150+
//|
151+
STATIC mp_obj_t displayio_tilegrid_obj_get_hidden(mp_obj_t self_in) {
152+
displayio_tilegrid_t *self = native_tilegrid(self_in);
153+
return mp_obj_new_bool(common_hal_displayio_tilegrid_get_hidden(self));
154+
}
155+
MP_DEFINE_CONST_FUN_OBJ_1(displayio_tilegrid_get_hidden_obj, displayio_tilegrid_obj_get_hidden);
156+
157+
STATIC mp_obj_t displayio_tilegrid_obj_set_hidden(mp_obj_t self_in, mp_obj_t hidden_obj) {
158+
displayio_tilegrid_t *self = native_tilegrid(self_in);
159+
160+
common_hal_displayio_tilegrid_set_hidden(self, mp_obj_is_true(hidden_obj));
161+
return mp_const_none;
162+
}
163+
MP_DEFINE_CONST_FUN_OBJ_2(displayio_tilegrid_set_hidden_obj, displayio_tilegrid_obj_set_hidden);
164+
165+
const mp_obj_property_t displayio_tilegrid_hidden_obj = {
166+
.base.type = &mp_type_property,
167+
.proxy = {(mp_obj_t)&displayio_tilegrid_get_hidden_obj,
168+
(mp_obj_t)&displayio_tilegrid_set_hidden_obj,
169+
(mp_obj_t)&mp_const_none_obj},
170+
};
147171

148172
//| .. attribute:: x
149173
//|
@@ -368,6 +392,7 @@ STATIC mp_obj_t tilegrid_subscr(mp_obj_t self_in, mp_obj_t index_obj, mp_obj_t v
368392

369393
STATIC const mp_rom_map_elem_t displayio_tilegrid_locals_dict_table[] = {
370394
// Properties
395+
{ MP_ROM_QSTR(MP_QSTR_hidden), MP_ROM_PTR(&displayio_tilegrid_hidden_obj) },
371396
{ MP_ROM_QSTR(MP_QSTR_x), MP_ROM_PTR(&displayio_tilegrid_x_obj) },
372397
{ MP_ROM_QSTR(MP_QSTR_y), MP_ROM_PTR(&displayio_tilegrid_y_obj) },
373398
{ MP_ROM_QSTR(MP_QSTR_flip_x), MP_ROM_PTR(&displayio_tilegrid_flip_x_obj) },

shared-bindings/displayio/TileGrid.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ void common_hal_displayio_tilegrid_construct(displayio_tilegrid_t *self, mp_obj_
3636
mp_obj_t pixel_shader, uint16_t width, uint16_t height,
3737
uint16_t tile_width, uint16_t tile_height, uint16_t x, uint16_t y, uint8_t default_tile);
3838

39+
bool common_hal_displayio_tilegrid_get_hidden(displayio_tilegrid_t* self);
40+
void common_hal_displayio_tilegrid_set_hidden(displayio_tilegrid_t* self, bool hidden);
3941
mp_int_t common_hal_displayio_tilegrid_get_x(displayio_tilegrid_t *self);
4042
void common_hal_displayio_tilegrid_set_x(displayio_tilegrid_t *self, mp_int_t x);
4143
mp_int_t common_hal_displayio_tilegrid_get_y(displayio_tilegrid_t *self);

shared-bindings/displayio/__init__.h

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@ typedef enum {
3434
DISPLAY_DATA
3535
} display_byte_type_t;
3636

37-
3837
typedef enum {
3938
CHIP_SELECT_UNTOUCHED,
4039
CHIP_SELECT_TOGGLE_EVERY_BYTE

shared-module/displayio/Display.c

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,8 @@ void common_hal_displayio_display_construct(displayio_display_obj_t* self,
5050
uint8_t* init_sequence, uint16_t init_sequence_len, const mcu_pin_obj_t* backlight_pin,
5151
uint16_t brightness_command, mp_float_t brightness, bool auto_brightness,
5252
bool single_byte_bounds, bool data_as_commands, bool auto_refresh, uint16_t native_frames_per_second) {
53+
// Turn off auto-refresh as we init.
54+
self->auto_refresh = false;
5355
uint16_t ram_width = 0x100;
5456
uint16_t ram_height = 0x100;
5557
if (single_byte_bounds) {
@@ -64,7 +66,6 @@ void common_hal_displayio_display_construct(displayio_display_obj_t* self,
6466
self->write_ram_command = write_ram_command;
6567
self->brightness_command = brightness_command;
6668
self->auto_brightness = auto_brightness;
67-
self->auto_refresh = auto_refresh;
6869
self->first_manual_refresh = !auto_refresh;
6970
self->data_as_commands = data_as_commands;
7071

@@ -128,6 +129,7 @@ void common_hal_displayio_display_construct(displayio_display_obj_t* self,
128129
// Set the group after initialization otherwise we may send pixels while we delay in
129130
// initialization.
130131
common_hal_displayio_display_show(self, &circuitpython_splash);
132+
self->auto_refresh = auto_refresh;
131133
}
132134

133135
bool common_hal_displayio_display_show(displayio_display_obj_t* self, displayio_group_t* root_group) {

shared-module/displayio/Group.c

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,47 @@ void common_hal_displayio_group_construct(displayio_group_t* self, uint32_t max_
3434
displayio_group_construct(self, children, max_size, scale, x, y);
3535
}
3636

37+
bool common_hal_displayio_group_get_hidden(displayio_group_t* self) {
38+
return self->hidden;
39+
}
40+
41+
void common_hal_displayio_group_set_hidden(displayio_group_t* self, bool hidden) {
42+
if (self->hidden == hidden) {
43+
return;
44+
}
45+
self->hidden = hidden;
46+
if (self->hidden_by_parent) {
47+
return;
48+
}
49+
for (size_t i = 0; i < self->size; i++) {
50+
mp_obj_t layer = self->children[i].native;
51+
if (MP_OBJ_IS_TYPE(layer, &displayio_tilegrid_type)) {
52+
displayio_tilegrid_set_hidden_by_parent(layer, hidden);
53+
} else if (MP_OBJ_IS_TYPE(layer, &displayio_group_type)) {
54+
displayio_group_set_hidden_by_parent(layer, hidden);
55+
}
56+
}
57+
}
58+
59+
void displayio_group_set_hidden_by_parent(displayio_group_t *self, bool hidden) {
60+
if (self->hidden_by_parent == hidden) {
61+
return;
62+
}
63+
self->hidden_by_parent = hidden;
64+
// If we're already hidden, then we're done.
65+
if (self->hidden) {
66+
return;
67+
}
68+
for (size_t i = 0; i < self->size; i++) {
69+
mp_obj_t layer = self->children[i].native;
70+
if (MP_OBJ_IS_TYPE(layer, &displayio_tilegrid_type)) {
71+
displayio_tilegrid_set_hidden_by_parent(layer, hidden);
72+
} else if (MP_OBJ_IS_TYPE(layer, &displayio_group_type)) {
73+
displayio_group_set_hidden_by_parent(layer, hidden);
74+
}
75+
}
76+
}
77+
3778
uint32_t common_hal_displayio_group_get_scale(displayio_group_t* self) {
3879
return self->scale;
3980
}

shared-module/displayio/Group.h

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -42,18 +42,22 @@ typedef struct {
4242
typedef struct {
4343
mp_obj_base_t base;
4444
displayio_group_child_t* children;
45+
displayio_buffer_transform_t absolute_transform;
46+
displayio_area_t dirty_area; // Catch all for changed area
4547
int16_t x;
4648
int16_t y;
4749
uint16_t scale;
4850
uint16_t size;
4951
uint16_t max_size;
50-
bool item_removed;
51-
bool in_group;
52-
displayio_buffer_transform_t absolute_transform;
53-
displayio_area_t dirty_area; // Catch all for changed area
52+
bool item_removed :1;
53+
bool in_group :1;
54+
bool hidden :1;
55+
bool hidden_by_parent :1;
56+
uint8_t padding :4;
5457
} displayio_group_t;
5558

5659
void displayio_group_construct(displayio_group_t* self, displayio_group_child_t* child_array, uint32_t max_size, uint32_t scale, mp_int_t x, mp_int_t y);
60+
void displayio_group_set_hidden_by_parent(displayio_group_t *self, bool hidden);
5761
bool displayio_group_get_previous_area(displayio_group_t *group, displayio_area_t* area);
5862
bool displayio_group_fill_area(displayio_group_t *group, const _displayio_colorspace_t* colorspace, const displayio_area_t* area, uint32_t* mask, uint32_t *buffer);
5963
void displayio_group_update_transform(displayio_group_t *group, const displayio_buffer_transform_t* parent_transform);

shared-module/displayio/I2CDisplay.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@ bool common_hal_displayio_i2cdisplay_bus_free(mp_obj_t obj) {
9797

9898
bool common_hal_displayio_i2cdisplay_begin_transaction(mp_obj_t obj) {
9999
displayio_i2cdisplay_obj_t* self = MP_OBJ_TO_PTR(obj);
100-
return !common_hal_busio_i2c_try_lock(self->bus);
100+
return common_hal_busio_i2c_try_lock(self->bus);
101101
}
102102

103103
void common_hal_displayio_i2cdisplay_send(mp_obj_t obj, display_byte_type_t data_type, display_chip_select_behavior_t chip_select, uint8_t *data, uint32_t data_length) {

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy