summaryrefslogtreecommitdiff
path: root/firmware/drivers/lcd-2bit-horz.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/drivers/lcd-2bit-horz.c')
-rw-r--r--firmware/drivers/lcd-2bit-horz.c21
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) */
379void lcd_hline(int x1, int x2, int y) 379void 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) */
405void lcd_vline(int x, int y1, int y2) 406void 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 */
430void lcd_fillrect(int x, int y, int width, int height) 432void 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