summaryrefslogtreecommitdiff
path: root/shared-module
diff options
context:
space:
mode:
authorScott Shawcroft <scott@tannewt.org>2019-06-16 14:43:13 -0700
committerScott Shawcroft <scott@tannewt.org>2019-06-17 16:23:37 -0700
commitda3d75f7b108279a05b99d18eca677f23fccac44 (patch)
treef1d8f70f950ccad4611c244810ffc45bc37d0fab /shared-module
parentc4170d2f1854bb59c2e9f3c02c081cec691319ff (diff)
Fix TileGrid's dirty tracking when changing top left
Diffstat (limited to 'shared-module')
-rw-r--r--shared-module/displayio/TileGrid.c13
1 files changed, 11 insertions, 2 deletions
diff --git a/shared-module/displayio/TileGrid.c b/shared-module/displayio/TileGrid.c
index 97b704c40..c671f13d1 100644
--- a/shared-module/displayio/TileGrid.c
+++ b/shared-module/displayio/TileGrid.c
@@ -219,10 +219,19 @@ void common_hal_displayio_tilegrid_set_tile(displayio_tilegrid_t *self, uint16_t
} else {
tile_area = &temp_area;
}
- tile_area->x1 = x * self->tile_width;
+ int16_t tx = (x - self->top_left_x) % self->width_in_tiles;
+ if (tx < 0) {
+ tx += self->height_in_tiles;
+ }
+ tile_area->x1 = tx * self->tile_width;
tile_area->x2 = tile_area->x1 + self->tile_width;
- tile_area->y1 = y * self->tile_height;
+ int16_t ty = (y - self->top_left_y) % self->height_in_tiles;
+ if (ty < 0) {
+ ty += self->height_in_tiles;
+ }
+ tile_area->y1 = ty * self->tile_height;
tile_area->y2 = tile_area->y1 + self->tile_height;
+
if (self->partial_change) {
displayio_area_expand(&self->dirty_area, &temp_area);
}