Skip to content

Commit f952446

Browse files
committed
Merge remote-tracking branch 'origin/main' into main
2 parents c282e69 + 0f54124 commit f952446

File tree

1 file changed

+28
-11
lines changed

1 file changed

+28
-11
lines changed

shared-module/displayio/TileGrid.c

Lines changed: 28 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -583,19 +583,36 @@ displayio_area_t *displayio_tilegrid_get_refresh_areas(displayio_tilegrid_t *sel
583583
}
584584

585585
if (self->partial_change) {
586+
int16_t x = self->x;
587+
int16_t y = self->y;
588+
if (self->absolute_transform->transpose_xy) {
589+
int16_t temp = y;
590+
y = x;
591+
x = temp;
592+
}
593+
int16_t x1 = self->dirty_area.x1;
594+
int16_t x2 = self->dirty_area.x2;
595+
if (self->flip_x) {
596+
x1 = self->pixel_width - x1;
597+
x2 = self->pixel_width - x2;
598+
}
599+
int16_t y1 = self->dirty_area.y1;
600+
int16_t y2 = self->dirty_area.y2;
601+
if (self->flip_y) {
602+
y1 = self->pixel_height - y1;
603+
y2 = self->pixel_height - y2;
604+
}
586605
if (self->transpose_xy != self->absolute_transform->transpose_xy) {
587-
int16_t x1 = self->dirty_area.x1;
588-
self->dirty_area.x1 = self->absolute_transform->x + self->absolute_transform->dx * (self->y + self->dirty_area.y1);
589-
self->dirty_area.y1 = self->absolute_transform->y + self->absolute_transform->dy * (self->x + x1);
590-
int16_t x2 = self->dirty_area.x2;
591-
self->dirty_area.x2 = self->absolute_transform->x + self->absolute_transform->dx * (self->y + self->dirty_area.y2);
592-
self->dirty_area.y2 = self->absolute_transform->y + self->absolute_transform->dy * (self->x + x2);
593-
} else {
594-
self->dirty_area.x1 = self->absolute_transform->x + self->absolute_transform->dx * (self->x + self->dirty_area.x1);
595-
self->dirty_area.y1 = self->absolute_transform->y + self->absolute_transform->dy * (self->y + self->dirty_area.y1);
596-
self->dirty_area.x2 = self->absolute_transform->x + self->absolute_transform->dx * (self->x + self->dirty_area.x2);
597-
self->dirty_area.y2 = self->absolute_transform->y + self->absolute_transform->dy * (self->y + self->dirty_area.y2);
606+
int16_t temp1 = y1, temp2 = y2;
607+
y1 = x1;
608+
x1 = temp1;
609+
y2 = x2;
610+
x2 = temp2;
598611
}
612+
self->dirty_area.x1 = self->absolute_transform->x + self->absolute_transform->dx * (x + x1);
613+
self->dirty_area.y1 = self->absolute_transform->y + self->absolute_transform->dy * (y + y1);
614+
self->dirty_area.x2 = self->absolute_transform->x + self->absolute_transform->dx * (x + x2);
615+
self->dirty_area.y2 = self->absolute_transform->y + self->absolute_transform->dy * (y + y2);
599616
if (self->dirty_area.y2 < self->dirty_area.y1) {
600617
int16_t temp = self->dirty_area.y2;
601618
self->dirty_area.y2 = self->dirty_area.y1;

0 commit comments

Comments
 (0)