diff options
| author | Scott Shawcroft <scott@tannewt.org> | 2019-06-16 14:43:13 -0700 |
|---|---|---|
| committer | Scott Shawcroft <scott@tannewt.org> | 2019-06-17 16:23:37 -0700 |
| commit | da3d75f7b108279a05b99d18eca677f23fccac44 (patch) | |
| tree | f1d8f70f950ccad4611c244810ffc45bc37d0fab /shared-module | |
| parent | c4170d2f1854bb59c2e9f3c02c081cec691319ff (diff) | |
Fix TileGrid's dirty tracking when changing top left
Diffstat (limited to 'shared-module')
| -rw-r--r-- | shared-module/displayio/TileGrid.c | 13 |
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); } |
