summaryrefslogtreecommitdiff
path: root/firmware/drivers/lcd-2bit-vert.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/drivers/lcd-2bit-vert.c')
-rw-r--r--firmware/drivers/lcd-2bit-vert.c27
1 files changed, 16 insertions, 11 deletions
diff --git a/firmware/drivers/lcd-2bit-vert.c b/firmware/drivers/lcd-2bit-vert.c
index c4bdba67cb..354c8802fc 100644
--- a/firmware/drivers/lcd-2bit-vert.c
+++ b/firmware/drivers/lcd-2bit-vert.c
@@ -380,6 +380,7 @@ void lcd_clear_viewport(void)
380/* Draw a horizontal line (optimised) */ 380/* Draw a horizontal line (optimised) */
381void lcd_hline(int x1, int x2, int y) 381void lcd_hline(int x1, int x2, int y)
382{ 382{
383 struct viewport *vp = lcd_current_viewport;
383 int width; 384 int width;
384 fb_data *dst, *dst_end; 385 fb_data *dst, *dst_end;
385 unsigned mask; 386 unsigned mask;
@@ -390,7 +391,7 @@ void lcd_hline(int x1, int x2, int y)
390 391
391 width = x2 - x1 + 1; 392 width = x2 - x1 + 1;
392 393
393 bfunc = lcd_blockfuncs[lcd_current_viewport->drawmode]; 394 bfunc = lcd_blockfuncs[vp->drawmode];
394 dst = FBADDR(x1,y>>2); 395 dst = FBADDR(x1,y>>2);
395 mask = pixmask[y & 3]; 396 mask = pixmask[y & 3];
396 397
@@ -403,6 +404,7 @@ void lcd_hline(int x1, int x2, int y)
403/* Draw a vertical line (optimised) */ 404/* Draw a vertical line (optimised) */
404void lcd_vline(int x, int y1, int y2) 405void lcd_vline(int x, int y1, int y2)
405{ 406{
407 struct viewport *vp = lcd_current_viewport;
406 int ny; 408 int ny;
407 fb_data *dst; 409 fb_data *dst;
408 int stride_dst; 410 int stride_dst;
@@ -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,y1>>2); 418 dst = FBADDR(x,y1>>2);
417 stride_dst = lcd_current_viewport->buffer->stride; 419 stride_dst = vp->buffer->stride;
418 ny = y2 - (y1 & ~3); 420 ny = y2 - (y1 & ~3);
419 mask = 0xFFu << (2 * (y1 & 3)); 421 mask = 0xFFu << (2 * (y1 & 3));
420 mask_bottom = 0xFFu >> (2 * (~ny & 3)); 422 mask_bottom = 0xFFu >> (2 * (~ny & 3));
@@ -432,6 +434,7 @@ void lcd_vline(int x, int y1, int y2)
432/* Fill a rectangular area */ 434/* Fill a rectangular area */
433void lcd_fillrect(int x, int y, int width, int height) 435void lcd_fillrect(int x, int y, int width, int height)
434{ 436{
437 struct viewport *vp = lcd_current_viewport;
435 int ny; 438 int ny;
436 fb_data *dst, *dst_end; 439 fb_data *dst, *dst_end;
437 int stride_dst; 440 int stride_dst;
@@ -443,9 +446,9 @@ void lcd_fillrect(int x, int y, int width, int height)
443 if (!lcd_clip_viewport_rect(&x, &y, &width, &height, NULL, NULL)) 446 if (!lcd_clip_viewport_rect(&x, &y, &width, &height, NULL, NULL))
444 return; 447 return;
445 448
446 if (lcd_current_viewport->drawmode & DRMODE_INVERSEVID) 449 if (vp->drawmode & DRMODE_INVERSEVID)
447 { 450 {
448 if ((lcd_current_viewport->drawmode & DRMODE_BG) && !lcd_backdrop) 451 if ((vp->drawmode & DRMODE_BG) && !lcd_backdrop)
449 { 452 {
450 fillopt = true; 453 fillopt = true;
451 bits = bg_pattern; 454 bits = bg_pattern;
@@ -453,15 +456,15 @@ void lcd_fillrect(int x, int y, int width, int height)
453 } 456 }
454 else 457 else
455 { 458 {
456 if (lcd_current_viewport->drawmode & DRMODE_FG) 459 if (vp->drawmode & DRMODE_FG)
457 { 460 {
458 fillopt = true; 461 fillopt = true;
459 bits = fg_pattern; 462 bits = fg_pattern;
460 } 463 }
461 } 464 }
462 bfunc = lcd_blockfuncs[lcd_current_viewport->drawmode]; 465 bfunc = lcd_blockfuncs[vp->drawmode];
463 dst = FBADDR(x,y>>2); 466 dst = FBADDR(x,y>>2);
464 stride_dst = lcd_current_viewport->buffer->stride; 467 stride_dst = vp->buffer->stride;
465 ny = height - 1 + (y & 3); 468 ny = height - 1 + (y & 3);
466 mask = 0xFFu << (2 * (y & 3)); 469 mask = 0xFFu << (2 * (y & 3));
467 mask_bottom = 0xFFu >> (2 * (~ny & 3)); 470 mask_bottom = 0xFFu >> (2 * (~ny & 3));
@@ -512,6 +515,7 @@ void ICODE_ATTR lcd_mono_bitmap_part(const unsigned char *src, int src_x,
512 int src_y, int stride, int x, int y, 515 int src_y, int stride, int x, int y,
513 int width, int height) 516 int width, int height)
514{ 517{
518 struct viewport *vp = lcd_current_viewport;
515 int shift, ny; 519 int shift, ny;
516 fb_data *dst, *dst_end; 520 fb_data *dst, *dst_end;
517 int stride_dst; 521 int stride_dst;
@@ -525,14 +529,14 @@ void ICODE_ATTR lcd_mono_bitmap_part(const unsigned char *src, int src_x,
525 src_y &= 7; 529 src_y &= 7;
526 y -= src_y; 530 y -= src_y;
527 dst = FBADDR(x,y>>2); 531 dst = FBADDR(x,y>>2);
528 stride_dst = lcd_current_viewport->buffer->stride; 532 stride_dst = vp->buffer->stride;
529 shift = y & 3; 533 shift = y & 3;
530 ny = height - 1 + shift + src_y; 534 ny = height - 1 + shift + src_y;
531 mask = 0xFFFFu << (2 * (shift + src_y)); 535 mask = 0xFFFFu << (2 * (shift + src_y));
532 /* Overflowing bits aren't important. */ 536 /* Overflowing bits aren't important. */
533 mask_bottom = 0xFFFFu >> (2 * (~ny & 7)); 537 mask_bottom = 0xFFFFu >> (2 * (~ny & 7));
534 538
535 bfunc = lcd_blockfuncs[lcd_current_viewport->drawmode]; 539 bfunc = lcd_blockfuncs[vp->drawmode];
536 540
537 if (shift == 0) 541 if (shift == 0)
538 { 542 {
@@ -662,6 +666,7 @@ void ICODE_ATTR lcd_bitmap_part(const fb_data *src, int src_x, int src_y,
662 int stride, int x, int y, int width, 666 int stride, int x, int y, int width,
663 int height) 667 int height)
664{ 668{
669 struct viewport *vp = lcd_current_viewport;
665 int shift, ny; 670 int shift, ny;
666 fb_data *dst, *dst_end; 671 fb_data *dst, *dst_end;
667 int stride_dst; 672 int stride_dst;
@@ -674,7 +679,7 @@ void ICODE_ATTR lcd_bitmap_part(const fb_data *src, int src_x, int src_y,
674 src_y &= 3; 679 src_y &= 3;
675 y -= src_y; 680 y -= src_y;
676 dst = FBADDR(x,y>>2); 681 dst = FBADDR(x,y>>2);
677 stride_dst = lcd_current_viewport->buffer->stride; 682 stride_dst = vp->buffer->stride;
678 shift = y & 3; 683 shift = y & 3;
679 ny = height - 1 + shift + src_y; 684 ny = height - 1 + shift + src_y;
680 685