diff options
Diffstat (limited to 'firmware/drivers/lcd-2bit-horz.c')
-rw-r--r-- | firmware/drivers/lcd-2bit-horz.c | 21 |
1 files changed, 13 insertions, 8 deletions
diff --git a/firmware/drivers/lcd-2bit-horz.c b/firmware/drivers/lcd-2bit-horz.c index cf7e20d4a8..e5d683be9e 100644 --- a/firmware/drivers/lcd-2bit-horz.c +++ b/firmware/drivers/lcd-2bit-horz.c | |||
@@ -378,6 +378,7 @@ void lcd_clear_viewport(void) | |||
378 | /* Draw a horizontal line (optimised) */ | 378 | /* Draw a horizontal line (optimised) */ |
379 | void lcd_hline(int x1, int x2, int y) | 379 | void lcd_hline(int x1, int x2, int y) |
380 | { | 380 | { |
381 | struct viewport *vp = lcd_current_viewport; | ||
381 | int nx; | 382 | int nx; |
382 | unsigned char *dst; | 383 | unsigned char *dst; |
383 | unsigned mask, mask_right; | 384 | unsigned mask, mask_right; |
@@ -386,7 +387,7 @@ void lcd_hline(int x1, int x2, int y) | |||
386 | if (!lcd_clip_viewport_hline(&x1, &x2, &y)) | 387 | if (!lcd_clip_viewport_hline(&x1, &x2, &y)) |
387 | return; | 388 | return; |
388 | 389 | ||
389 | bfunc = lcd_blockfuncs[lcd_current_viewport->drawmode]; | 390 | bfunc = lcd_blockfuncs[vp->drawmode]; |
390 | dst = FBADDR(x1>>2,y); | 391 | dst = FBADDR(x1>>2,y); |
391 | nx = x2 - (x1 & ~3); | 392 | nx = x2 - (x1 & ~3); |
392 | mask = 0xFFu >> (2 * (x1 & 3)); | 393 | mask = 0xFFu >> (2 * (x1 & 3)); |
@@ -404,6 +405,7 @@ void lcd_hline(int x1, int x2, int y) | |||
404 | /* Draw a vertical line (optimised) */ | 405 | /* Draw a vertical line (optimised) */ |
405 | void lcd_vline(int x, int y1, int y2) | 406 | void lcd_vline(int x, int y1, int y2) |
406 | { | 407 | { |
408 | struct viewport *vp = lcd_current_viewport; | ||
407 | unsigned char *dst, *dst_end; | 409 | unsigned char *dst, *dst_end; |
408 | int stride_dst; | 410 | int stride_dst; |
409 | unsigned mask; | 411 | unsigned mask; |
@@ -412,9 +414,9 @@ void lcd_vline(int x, int y1, int y2) | |||
412 | if (!lcd_clip_viewport_vline(&x, &y1, &y2)) | 414 | if (!lcd_clip_viewport_vline(&x, &y1, &y2)) |
413 | return; | 415 | return; |
414 | 416 | ||
415 | bfunc = lcd_blockfuncs[lcd_current_viewport->drawmode]; | 417 | bfunc = lcd_blockfuncs[vp->drawmode]; |
416 | dst = FBADDR(x>>2,y1); | 418 | dst = FBADDR(x>>2,y1); |
417 | stride_dst = LCD_FBSTRIDE(lcd_current_viewport->buffer->stride, 0); | 419 | stride_dst = LCD_FBSTRIDE(vp->buffer->stride, 0); |
418 | mask = pixmask[x & 3]; | 420 | mask = pixmask[x & 3]; |
419 | 421 | ||
420 | dst_end = dst + (y2 - y1) * stride_dst; | 422 | dst_end = dst + (y2 - y1) * stride_dst; |
@@ -429,6 +431,7 @@ void lcd_vline(int x, int y1, int y2) | |||
429 | /* Fill a rectangular area */ | 431 | /* Fill a rectangular area */ |
430 | void lcd_fillrect(int x, int y, int width, int height) | 432 | void lcd_fillrect(int x, int y, int width, int height) |
431 | { | 433 | { |
434 | struct viewport *vp = lcd_current_viewport; | ||
432 | int nx; | 435 | int nx; |
433 | unsigned char *dst, *dst_end; | 436 | unsigned char *dst, *dst_end; |
434 | int stride_dst; | 437 | int stride_dst; |
@@ -438,9 +441,9 @@ void lcd_fillrect(int x, int y, int width, int height) | |||
438 | if (!lcd_clip_viewport_rect(&x, &y, &width, &height, NULL, NULL)) | 441 | if (!lcd_clip_viewport_rect(&x, &y, &width, &height, NULL, NULL)) |
439 | return; | 442 | return; |
440 | 443 | ||
441 | bfunc = lcd_blockfuncs[lcd_current_viewport->drawmode]; | 444 | bfunc = lcd_blockfuncs[vp->drawmode]; |
442 | dst = FBADDR(x>>2,y); | 445 | dst = FBADDR(x>>2,y); |
443 | stride_dst = LCD_FBSTRIDE(lcd_current_viewport->buffer->stride, 0); | 446 | stride_dst = LCD_FBSTRIDE(vp->buffer->stride, 0); |
444 | nx = width - 1 + (x & 3); | 447 | nx = width - 1 + (x & 3); |
445 | mask = 0xFFu >> (2 * (x & 3)); | 448 | mask = 0xFFu >> (2 * (x & 3)); |
446 | mask_right = 0xFFu << (2 * (~nx & 3)); | 449 | mask_right = 0xFFu << (2 * (~nx & 3)); |
@@ -485,12 +488,13 @@ void ICODE_ATTR lcd_mono_bitmap_part(const unsigned char *src, int src_x, | |||
485 | int src_y, int stride, int x, int y, | 488 | int src_y, int stride, int x, int y, |
486 | int width, int height) | 489 | int width, int height) |
487 | { | 490 | { |
491 | struct viewport *vp = lcd_current_viewport; | ||
488 | const unsigned char *src_end; | 492 | const unsigned char *src_end; |
489 | fb_data *dst, *dst_end; | 493 | fb_data *dst, *dst_end; |
490 | int stride_dst; | 494 | int stride_dst; |
491 | unsigned dmask = 0x100; /* bit 8 == sentinel */ | 495 | unsigned dmask = 0x100; /* bit 8 == sentinel */ |
492 | unsigned dst_mask; | 496 | unsigned dst_mask; |
493 | int drmode = lcd_current_viewport->drawmode; | 497 | int drmode = vp->drawmode; |
494 | 498 | ||
495 | if (!lcd_clip_viewport_rect(&x, &y, &width, &height, &src_x, &src_y)) | 499 | if (!lcd_clip_viewport_rect(&x, &y, &width, &height, &src_x, &src_y)) |
496 | return; | 500 | return; |
@@ -500,7 +504,7 @@ void ICODE_ATTR lcd_mono_bitmap_part(const unsigned char *src, int src_x, | |||
500 | src_end = src + width; | 504 | src_end = src + width; |
501 | 505 | ||
502 | dst = FBADDR(x >> 2,y); | 506 | dst = FBADDR(x >> 2,y); |
503 | stride_dst = LCD_FBSTRIDE(lcd_current_viewport->buffer->stride, 0); | 507 | stride_dst = LCD_FBSTRIDE(vp->buffer->stride, 0); |
504 | dst_end = dst + height * stride_dst; | 508 | dst_end = dst + height * stride_dst; |
505 | dst_mask = pixmask[x & 3]; | 509 | dst_mask = pixmask[x & 3]; |
506 | 510 | ||
@@ -652,6 +656,7 @@ void ICODE_ATTR lcd_bitmap_part(const unsigned char *src, int src_x, | |||
652 | int src_y, int stride, int x, int y, | 656 | int src_y, int stride, int x, int y, |
653 | int width, int height) | 657 | int width, int height) |
654 | { | 658 | { |
659 | struct viewport *vp = lcd_current_viewport; | ||
655 | int shift, nx; | 660 | int shift, nx; |
656 | unsigned char *dst, *dst_end; | 661 | unsigned char *dst, *dst_end; |
657 | int stride_dst; | 662 | int stride_dst; |
@@ -666,7 +671,7 @@ void ICODE_ATTR lcd_bitmap_part(const unsigned char *src, int src_x, | |||
666 | src_x &= 3; | 671 | src_x &= 3; |
667 | x -= src_x; | 672 | x -= src_x; |
668 | dst = FBADDR(x>>2,y); | 673 | dst = FBADDR(x>>2,y); |
669 | stride_dst = LCD_FBSTRIDE(lcd_current_viewport->buffer->stride, 0); | 674 | stride_dst = LCD_FBSTRIDE(vp->buffer->stride, 0); |
670 | shift = x & 3; | 675 | shift = x & 3; |
671 | nx = width - 1 + shift + src_x; | 676 | nx = width - 1 + shift + src_x; |
672 | 677 | ||