From 9485805b6aa6178f2b4abe0eaefc76c4ebfc4b6d Mon Sep 17 00:00:00 2001 From: Kevin Matocha Date: Thu, 25 Mar 2021 11:21:39 -0500 Subject: [PATCH 1/2] move to displayio_area_union and away from _expand --- shared-module/displayio/Group.c | 6 +++--- shared-module/displayio/TileGrid.c | 2 +- shared-module/displayio/__init__.c | 15 --------------- shared-module/displayio/area.h | 1 - shared-module/vectorio/VectorShape.c | 2 +- 5 files changed, 5 insertions(+), 21 deletions(-) diff --git a/shared-module/displayio/Group.c b/shared-module/displayio/Group.c index c50f034bf0..d1bdae2c33 100644 --- a/shared-module/displayio/Group.c +++ b/shared-module/displayio/Group.c @@ -123,7 +123,7 @@ bool displayio_group_get_previous_area(displayio_group_t *self, displayio_area_t displayio_area_copy(&layer_area, area); first = false; } else { - displayio_area_expand(area, &layer_area); + displayio_area_union(area, &layer_area, area); } } if (self->item_removed) { @@ -131,7 +131,7 @@ bool displayio_group_get_previous_area(displayio_group_t *self, displayio_area_t displayio_area_copy(&self->dirty_area, area); first = false; } else { - displayio_area_expand(area, &self->dirty_area); + displayio_area_union(area, &self->dirty_area, area); } } return !first; @@ -307,7 +307,7 @@ static void _remove_layer(displayio_group_t *self, size_t index) { if (!self->item_removed) { displayio_area_copy(&layer_area, &self->dirty_area); } else { - displayio_area_expand(&self->dirty_area, &layer_area); + displayio_area_union(&self->dirty_area, &layer_area, &self->dirty_area); } self->item_removed = true; } diff --git a/shared-module/displayio/TileGrid.c b/shared-module/displayio/TileGrid.c index 0b0e0479cf..a623a10de5 100644 --- a/shared-module/displayio/TileGrid.c +++ b/shared-module/displayio/TileGrid.c @@ -273,7 +273,7 @@ void common_hal_displayio_tilegrid_set_tile(displayio_tilegrid_t *self, uint16_t tile_area->y2 = tile_area->y1 + self->tile_height; if (self->partial_change) { - displayio_area_expand(&self->dirty_area, &temp_area); + displayio_area_union(&self->dirty_area, &temp_area, &self->dirty_area); } self->partial_change = true; diff --git a/shared-module/displayio/__init__.c b/shared-module/displayio/__init__.c index d238c28167..7d9dc26dd3 100644 --- a/shared-module/displayio/__init__.c +++ b/shared-module/displayio/__init__.c @@ -245,21 +245,6 @@ void displayio_gc_collect(void) { } } -void displayio_area_expand(displayio_area_t *original, const displayio_area_t *addition) { - if (addition->x1 < original->x1) { - original->x1 = addition->x1; - } - if (addition->y1 < original->y1) { - original->y1 = addition->y1; - } - if (addition->x2 > original->x2) { - original->x2 = addition->x2; - } - if (addition->y2 > original->y2) { - original->y2 = addition->y2; - } -} - void displayio_area_copy(const displayio_area_t *src, displayio_area_t *dst) { dst->x1 = src->x1; dst->y1 = src->y1; diff --git a/shared-module/displayio/area.h b/shared-module/displayio/area.h index b6ff1dcd29..6a8ad6ceb0 100644 --- a/shared-module/displayio/area.h +++ b/shared-module/displayio/area.h @@ -59,7 +59,6 @@ void displayio_area_canon(displayio_area_t *a); void displayio_area_union(const displayio_area_t *a, const displayio_area_t *b, displayio_area_t *u); -void displayio_area_expand(displayio_area_t *original, const displayio_area_t *addition); void displayio_area_copy(const displayio_area_t *src, displayio_area_t *dst); void displayio_area_scale(displayio_area_t *area, uint16_t scale); void displayio_area_shift(displayio_area_t *area, int16_t dx, int16_t dy); diff --git a/shared-module/vectorio/VectorShape.c b/shared-module/vectorio/VectorShape.c index c6524af9d3..62f53668c2 100644 --- a/shared-module/vectorio/VectorShape.c +++ b/shared-module/vectorio/VectorShape.c @@ -88,7 +88,7 @@ void common_hal_vectorio_vector_shape_set_dirty(void *vector_shape) { self->ephemeral_dirty_area.x1, self->ephemeral_dirty_area.y1, self->ephemeral_dirty_area.x2, self->ephemeral_dirty_area.y2); self->dirty = true; // Dirty area tracks the shape's footprint between draws. It's reset on refresh finish, - displayio_area_expand(&self->ephemeral_dirty_area, ¤t_area); + displayio_area_union(&self->ephemeral_dirty_area, ¤t_area, &self->ephemeral_dirty_area); VECTORIO_SHAPE_DEBUG(" -> expanded:{(%3d,%3d), (%3d,%3d)}\n", self->ephemeral_dirty_area.x1, self->ephemeral_dirty_area.y1, self->ephemeral_dirty_area.x2, self->ephemeral_dirty_area.y2); } From 56362a9806ab91b8cc9fb2d1d3e829b2ffc3f7c7 Mon Sep 17 00:00:00 2001 From: Kevin Matocha Date: Thu, 25 Mar 2021 11:31:07 -0500 Subject: [PATCH 2/2] remove duplicated code, replace with displayio_area_canon --- shared-module/vectorio/VectorShape.c | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/shared-module/vectorio/VectorShape.c b/shared-module/vectorio/VectorShape.c index 62f53668c2..efc40d0356 100644 --- a/shared-module/vectorio/VectorShape.c +++ b/shared-module/vectorio/VectorShape.c @@ -55,16 +55,7 @@ static void _get_screen_area(vectorio_vector_shape_t *self, displayio_area_t *ou out_area->y2 = (out_area->y2 + self->y) * self->absolute_transform->dy + self->absolute_transform->y; } // We might have mirrored due to dx - if (out_area->x2 < out_area->x1) { - int16_t swap = out_area->x1; - out_area->x1 = out_area->x2; - out_area->x2 = swap; - } - if (out_area->y2 < out_area->y1) { - int16_t swap = out_area->y1; - out_area->y1 = out_area->y2; - out_area->y2 = swap; - } + displayio_area_canon(out_area); VECTORIO_SHAPE_DEBUG(" out:{(%5d,%5d), (%5d,%5d)}\n", out_area->x1, out_area->y1, out_area->x2, out_area->y2); }