diff options
| author | Scott Shawcroft <scott@tannewt.org> | 2019-02-06 12:13:17 -0800 |
|---|---|---|
| committer | Scott Shawcroft <scott@tannewt.org> | 2019-02-11 20:55:05 -0800 |
| commit | c17f147be95e7490e5207c747add2da1cc8b167f (patch) | |
| tree | 90abe0fad90920415ae4f1e118854cf56e8dfe04 /shared-module/displayio/Group.c | |
| parent | 1a6ad209439e0c8b0d01701b76195f9761949e31 (diff) | |
A variety of displayio improvements
This changes a number of things in displayio:
* Introduces BuiltinFont and Glyph so the built in font can be used by libraries. For boards with
a font it is available as board.TERMINAL_FONT. Fixes #1172
* Remove _load_row from Bitmap in favor of bitmap[] access. Index can be x/y tuple or overall index. Fixes #1191
* Add width and height properties to Bitmap.
* Add insert and [] access to Group. Fixes #1518
* Add index param to pop on Group.
* Terminal no longer takes unicode character info. It takes a BuiltinFont instead.
* Fix Terminal's handling of [###D vt100 commands used when up arrowing into repl history.
* Add x and y positions to Group plus scale as well.
* Add bitmap accessor for BuiltinFont
Diffstat (limited to 'shared-module/displayio/Group.c')
| -rw-r--r-- | shared-module/displayio/Group.c | 68 |
1 files changed, 56 insertions, 12 deletions
diff --git a/shared-module/displayio/Group.c b/shared-module/displayio/Group.c index 95043e4f3..e40b5a7ea 100644 --- a/shared-module/displayio/Group.c +++ b/shared-module/displayio/Group.c @@ -29,12 +29,39 @@ #include "py/runtime.h" #include "shared-bindings/displayio/TileGrid.h" -void common_hal_displayio_group_construct(displayio_group_t* self, uint32_t max_size) { +void common_hal_displayio_group_construct(displayio_group_t* self, uint32_t max_size, uint32_t scale) { mp_obj_t* children = m_new(mp_obj_t, max_size); - displayio_group_construct(self, children, max_size); + displayio_group_construct(self, children, max_size, scale); } -void common_hal_displayio_group_append(displayio_group_t* self, mp_obj_t layer) { +uint32_t common_hal_displayio_group_get_scale(displayio_group_t* self) { + return self->scale; +} + +void common_hal_displayio_group_set_scale(displayio_group_t* self, uint32_t scale) { + self->scale = scale; + self->needs_refresh = true; +} + +mp_int_t common_hal_displayio_group_get_x(displayio_group_t* self) { + return self->x; +} + +void common_hal_displayio_group_set_x(displayio_group_t* self, mp_int_t x) { + self->x = x; + self->needs_refresh = true; +} + +mp_int_t common_hal_displayio_group_get_y(displayio_group_t* self) { + return self->y; +} + +void common_hal_displayio_group_set_y(displayio_group_t* self, mp_int_t y) { + self->y = y; + self->needs_refresh = true; +} + +void common_hal_displayio_group_insert(displayio_group_t* self, size_t index, mp_obj_t layer) { if (self->size == self->max_size) { mp_raise_RuntimeError(translate("Group full")); } @@ -45,29 +72,47 @@ void common_hal_displayio_group_append(displayio_group_t* self, mp_obj_t layer) if (native_layer == MP_OBJ_NULL) { mp_raise_ValueError(translate("Layer must be a Group or TileGrid subclass.")); } - self->children[self->size] = layer; + // Shift everything right. + for (size_t i = index; i < self->size; i++) { + self->children[i + 1] = self->children[i]; + } + self->children[index] = native_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")); - } +mp_obj_t common_hal_displayio_group_pop(displayio_group_t* self, size_t index) { self->size--; - mp_obj_t item = self->children[self->size]; + mp_obj_t item = self->children[index]; + // Shift everything left. + for (size_t i = index; i < self->size; i++) { + self->children[i] = self->children[i + 1]; + } 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) { +size_t common_hal_displayio_group_get_len(displayio_group_t* self) { + return self->size; +} + +mp_obj_t common_hal_displayio_group_get(displayio_group_t* self, size_t index) { + return self->children[index]; +} + +void common_hal_displayio_group_set(displayio_group_t* self, size_t index, mp_obj_t layer) { + self->children[index] = layer; + self->needs_refresh = true; +} + +void displayio_group_construct(displayio_group_t* self, mp_obj_t* child_array, uint32_t max_size, uint32_t scale) { self->x = 0; self->y = 0; self->children = child_array; self->max_size = max_size; self->needs_refresh = false; - self->scale = 1; + self->scale = scale; } bool displayio_group_get_pixel(displayio_group_t *self, int16_t x, int16_t y, uint16_t* pixel) { @@ -86,7 +131,6 @@ bool displayio_group_get_pixel(displayio_group_t *self, int16_t x, int16_t y, ui return true; } } - // TODO: Tiled layer } return false; } |
