@@ -583,19 +583,36 @@ displayio_area_t *displayio_tilegrid_get_refresh_areas(displayio_tilegrid_t *sel
583
583
}
584
584
585
585
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
+ }
586
605
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 ;
598
611
}
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 );
599
616
if (self -> dirty_area .y2 < self -> dirty_area .y1 ) {
600
617
int16_t temp = self -> dirty_area .y2 ;
601
618
self -> dirty_area .y2 = self -> dirty_area .y1 ;
0 commit comments