lcd: Cosmetic variable renaming
Assign lcd_current_viewport to a local variable for easier typing. Change-Id: Ib5d4283fd1c5a21c94d3bd3c2c28ce206383fb96
This commit is contained in:
parent
726673c638
commit
6acc8a81a7
8 changed files with 163 additions and 125 deletions
|
@ -31,14 +31,15 @@
|
||||||
/* Clear the current viewport */
|
/* Clear the current viewport */
|
||||||
void lcd_clear_viewport(void)
|
void lcd_clear_viewport(void)
|
||||||
{
|
{
|
||||||
|
struct viewport *vp = lcd_current_viewport;
|
||||||
fb_data *dst, *dst_end;
|
fb_data *dst, *dst_end;
|
||||||
int x, y, width, height;
|
int x, y, width, height;
|
||||||
int len, step;
|
int len, step;
|
||||||
|
|
||||||
x = lcd_current_viewport->x;
|
x = vp->x;
|
||||||
y = lcd_current_viewport->y;
|
y = vp->y;
|
||||||
width = lcd_current_viewport->width;
|
width = vp->width;
|
||||||
height = lcd_current_viewport->height;
|
height = vp->height;
|
||||||
|
|
||||||
len = STRIDE_MAIN(width, height);
|
len = STRIDE_MAIN(width, height);
|
||||||
step = STRIDE_MAIN(ROW_INC, COL_INC);
|
step = STRIDE_MAIN(ROW_INC, COL_INC);
|
||||||
|
@ -46,18 +47,18 @@ void lcd_clear_viewport(void)
|
||||||
dst = FBADDR(x, y);
|
dst = FBADDR(x, y);
|
||||||
dst_end = FBADDR(x + width - 1 , y + height - 1);
|
dst_end = FBADDR(x + width - 1 , y + height - 1);
|
||||||
|
|
||||||
if (lcd_current_viewport->drawmode & DRMODE_INVERSEVID)
|
if (vp->drawmode & DRMODE_INVERSEVID)
|
||||||
{
|
{
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
memset16(dst, lcd_current_viewport->fg_pattern, len);
|
memset16(dst, vp->fg_pattern, len);
|
||||||
dst += step;
|
dst += step;
|
||||||
}
|
}
|
||||||
while (dst <= dst_end);
|
while (dst <= dst_end);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (lcd_backdrop && lcd_current_viewport->buffer == &lcd_framebuffer_default)
|
if (lcd_backdrop && vp->buffer == &lcd_framebuffer_default)
|
||||||
{
|
{
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
|
@ -71,19 +72,19 @@ void lcd_clear_viewport(void)
|
||||||
{
|
{
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
memset16(dst, lcd_current_viewport->bg_pattern, len);
|
memset16(dst, vp->bg_pattern, len);
|
||||||
dst += step;
|
dst += step;
|
||||||
}
|
}
|
||||||
while (dst <= dst_end);
|
while (dst <= dst_end);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (lcd_current_viewport == &default_vp)
|
if (vp == &default_vp)
|
||||||
lcd_scroll_stop();
|
lcd_scroll_stop();
|
||||||
else
|
else
|
||||||
lcd_scroll_stop_viewport(lcd_current_viewport);
|
lcd_scroll_stop_viewport(vp);
|
||||||
|
|
||||||
lcd_current_viewport->flags &= ~(VP_FLAG_VP_SET_CLEAN);
|
vp->flags &= ~(VP_FLAG_VP_SET_CLEAN);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*** low-level drawing functions ***/
|
/*** low-level drawing functions ***/
|
||||||
|
@ -128,6 +129,7 @@ lcd_fastpixelfunc_type* const * lcd_fastpixelfuncs = lcd_fastpixelfuncs_bgcolor;
|
||||||
/* Fill a rectangular area */
|
/* Fill a rectangular area */
|
||||||
void lcd_fillrect(int x, int y, int width, int height)
|
void lcd_fillrect(int x, int y, int width, int height)
|
||||||
{
|
{
|
||||||
|
struct viewport *vp = lcd_current_viewport;
|
||||||
unsigned bits = 0;
|
unsigned bits = 0;
|
||||||
enum fill_opt fillopt = OPT_NONE;
|
enum fill_opt fillopt = OPT_NONE;
|
||||||
fb_data *dst, *dst_end;
|
fb_data *dst, *dst_end;
|
||||||
|
@ -137,14 +139,14 @@ void lcd_fillrect(int x, int y, int width, int height)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/* drawmode and optimisation */
|
/* drawmode and optimisation */
|
||||||
if (lcd_current_viewport->drawmode & DRMODE_INVERSEVID)
|
if (vp->drawmode & DRMODE_INVERSEVID)
|
||||||
{
|
{
|
||||||
if (lcd_current_viewport->drawmode & DRMODE_BG)
|
if (vp->drawmode & DRMODE_BG)
|
||||||
{
|
{
|
||||||
if (!lcd_backdrop)
|
if (!lcd_backdrop)
|
||||||
{
|
{
|
||||||
fillopt = OPT_SET;
|
fillopt = OPT_SET;
|
||||||
bits = lcd_current_viewport->bg_pattern;
|
bits = vp->bg_pattern;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
fillopt = OPT_COPY;
|
fillopt = OPT_COPY;
|
||||||
|
@ -152,13 +154,13 @@ void lcd_fillrect(int x, int y, int width, int height)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (lcd_current_viewport->drawmode & DRMODE_FG)
|
if (vp->drawmode & DRMODE_FG)
|
||||||
{
|
{
|
||||||
fillopt = OPT_SET;
|
fillopt = OPT_SET;
|
||||||
bits = lcd_current_viewport->fg_pattern;
|
bits = vp->fg_pattern;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (fillopt == OPT_NONE && lcd_current_viewport->drawmode != DRMODE_COMPLEMENT)
|
if (fillopt == OPT_NONE && vp->drawmode != DRMODE_COMPLEMENT)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
dst = FBADDR(x, y);
|
dst = FBADDR(x, y);
|
||||||
|
@ -213,6 +215,7 @@ void ICODE_ATTR lcd_mono_bitmap_part(const unsigned char *src, int src_x,
|
||||||
int src_y, int stride, int x, int y,
|
int src_y, int stride, int x, int y,
|
||||||
int width, int height)
|
int width, int height)
|
||||||
{
|
{
|
||||||
|
struct viewport *vp = lcd_current_viewport;
|
||||||
if (!lcd_clip_viewport_rect(&x, &y, &width, &height, &src_x, &src_y))
|
if (!lcd_clip_viewport_rect(&x, &y, &width, &height, &src_x, &src_y))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -221,7 +224,7 @@ void ICODE_ATTR lcd_mono_bitmap_part(const unsigned char *src, int src_x,
|
||||||
src_y &= 7;
|
src_y &= 7;
|
||||||
|
|
||||||
unsigned dmask = 0;
|
unsigned dmask = 0;
|
||||||
int drmode = lcd_current_viewport->drawmode;
|
int drmode = vp->drawmode;
|
||||||
|
|
||||||
if (drmode & DRMODE_INVERSEVID)
|
if (drmode & DRMODE_INVERSEVID)
|
||||||
{
|
{
|
||||||
|
@ -267,7 +270,7 @@ void ICODE_ATTR lcd_mono_bitmap_part(const unsigned char *src, int src_x,
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DRMODE_BG:
|
case DRMODE_BG:
|
||||||
bg = lcd_current_viewport->bg_pattern;
|
bg = vp->bg_pattern;
|
||||||
do {
|
do {
|
||||||
data = (*src_col++ ^ dmask) >> src_y;
|
data = (*src_col++ ^ dmask) >> src_y;
|
||||||
if(!(data & 0x01))
|
if(!(data & 0x01))
|
||||||
|
@ -278,7 +281,7 @@ void ICODE_ATTR lcd_mono_bitmap_part(const unsigned char *src, int src_x,
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DRMODE_FG:
|
case DRMODE_FG:
|
||||||
fg = lcd_current_viewport->fg_pattern;
|
fg = vp->fg_pattern;
|
||||||
do {
|
do {
|
||||||
data = (*src_col++ ^ dmask) >> src_y;
|
data = (*src_col++ ^ dmask) >> src_y;
|
||||||
if(data & 0x01)
|
if(data & 0x01)
|
||||||
|
@ -289,7 +292,7 @@ void ICODE_ATTR lcd_mono_bitmap_part(const unsigned char *src, int src_x,
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DRMODE_SOLID|DRMODE_INT_BD:
|
case DRMODE_SOLID|DRMODE_INT_BD:
|
||||||
fg = lcd_current_viewport->fg_pattern;
|
fg = vp->fg_pattern;
|
||||||
bo = lcd_backdrop_offset;
|
bo = lcd_backdrop_offset;
|
||||||
do {
|
do {
|
||||||
data = (*src_col++ ^ dmask) >> src_y;
|
data = (*src_col++ ^ dmask) >> src_y;
|
||||||
|
@ -303,8 +306,8 @@ void ICODE_ATTR lcd_mono_bitmap_part(const unsigned char *src, int src_x,
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DRMODE_SOLID:
|
case DRMODE_SOLID:
|
||||||
fg = lcd_current_viewport->fg_pattern;
|
fg = vp->fg_pattern;
|
||||||
bg = lcd_current_viewport->bg_pattern;
|
bg = vp->bg_pattern;
|
||||||
do {
|
do {
|
||||||
data = (*src_col++ ^ dmask) >> src_y;
|
data = (*src_col++ ^ dmask) >> src_y;
|
||||||
if(data & 0x01)
|
if(data & 0x01)
|
||||||
|
@ -416,9 +419,10 @@ static void ICODE_ATTR lcd_alpha_bitmap_part_mix(const fb_data* image,
|
||||||
int width, int height,
|
int width, int height,
|
||||||
int stride_image, int stride_src)
|
int stride_image, int stride_src)
|
||||||
{
|
{
|
||||||
|
struct viewport *vp = lcd_current_viewport;
|
||||||
fb_data *dst, *dst_row;
|
fb_data *dst, *dst_row;
|
||||||
unsigned dmask = 0x00000000;
|
unsigned dmask = 0x00000000;
|
||||||
int drmode = lcd_current_viewport->drawmode;
|
int drmode = vp->drawmode;
|
||||||
|
|
||||||
if (!lcd_clip_viewport_rect(&x, &y, &width, &height, &src_x, &src_y))
|
if (!lcd_clip_viewport_rect(&x, &y, &width, &height, &src_x, &src_y))
|
||||||
return;
|
return;
|
||||||
|
@ -545,7 +549,7 @@ static void ICODE_ATTR lcd_alpha_bitmap_part_mix(const fb_data* image,
|
||||||
while (--col);
|
while (--col);
|
||||||
break;
|
break;
|
||||||
case DRMODE_BG:
|
case DRMODE_BG:
|
||||||
bg = lcd_current_viewport->bg_pattern;
|
bg = vp->bg_pattern;
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
*dst = blend_two_colors(bg, *dst, data & ALPHA_COLOR_LOOKUP_SIZE );
|
*dst = blend_two_colors(bg, *dst, data & ALPHA_COLOR_LOOKUP_SIZE );
|
||||||
|
@ -565,7 +569,7 @@ static void ICODE_ATTR lcd_alpha_bitmap_part_mix(const fb_data* image,
|
||||||
while (--col);
|
while (--col);
|
||||||
break;
|
break;
|
||||||
case DRMODE_FG:
|
case DRMODE_FG:
|
||||||
fg = lcd_current_viewport->fg_pattern;
|
fg = vp->fg_pattern;
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
*dst = blend_two_colors(*dst, fg, data & ALPHA_COLOR_LOOKUP_SIZE );
|
*dst = blend_two_colors(*dst, fg, data & ALPHA_COLOR_LOOKUP_SIZE );
|
||||||
|
@ -576,7 +580,7 @@ static void ICODE_ATTR lcd_alpha_bitmap_part_mix(const fb_data* image,
|
||||||
break;
|
break;
|
||||||
case DRMODE_SOLID|DRMODE_INT_BD:
|
case DRMODE_SOLID|DRMODE_INT_BD:
|
||||||
bo = lcd_backdrop_offset;
|
bo = lcd_backdrop_offset;
|
||||||
fg = lcd_current_viewport->fg_pattern;
|
fg = vp->fg_pattern;
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
fb_data *c = (fb_data *)((uintptr_t)dst + bo);
|
fb_data *c = (fb_data *)((uintptr_t)dst + bo);
|
||||||
|
@ -587,7 +591,7 @@ static void ICODE_ATTR lcd_alpha_bitmap_part_mix(const fb_data* image,
|
||||||
while (--col);
|
while (--col);
|
||||||
break;
|
break;
|
||||||
case DRMODE_SOLID|DRMODE_INT_IMG:
|
case DRMODE_SOLID|DRMODE_INT_IMG:
|
||||||
bg = lcd_current_viewport->bg_pattern;
|
bg = vp->bg_pattern;
|
||||||
img_offset = image - dst;
|
img_offset = image - dst;
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
|
@ -610,8 +614,8 @@ static void ICODE_ATTR lcd_alpha_bitmap_part_mix(const fb_data* image,
|
||||||
while (--col);
|
while (--col);
|
||||||
break;
|
break;
|
||||||
case DRMODE_SOLID:
|
case DRMODE_SOLID:
|
||||||
bg = lcd_current_viewport->bg_pattern;
|
bg = vp->bg_pattern;
|
||||||
fg = lcd_current_viewport->fg_pattern;
|
fg = vp->fg_pattern;
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
*dst = blend_two_colors(bg, fg, data & ALPHA_COLOR_LOOKUP_SIZE );
|
*dst = blend_two_colors(bg, fg, data & ALPHA_COLOR_LOOKUP_SIZE );
|
||||||
|
|
|
@ -62,16 +62,17 @@ static void ICODE_ATTR lcd_alpha_bitmap_part_mix(const fb_data* image,
|
||||||
/* Draw a horizontal line (optimised) */
|
/* Draw a horizontal line (optimised) */
|
||||||
void lcd_hline(int x1, int x2, int y)
|
void lcd_hline(int x1, int x2, int y)
|
||||||
{
|
{
|
||||||
|
struct viewport *vp = lcd_current_viewport;
|
||||||
fb_data *dst, *dst_end;
|
fb_data *dst, *dst_end;
|
||||||
int stride_dst;
|
int stride_dst;
|
||||||
|
|
||||||
lcd_fastpixelfunc_type *pfunc = lcd_fastpixelfuncs[lcd_current_viewport->drawmode];
|
lcd_fastpixelfunc_type *pfunc = lcd_fastpixelfuncs[vp->drawmode];
|
||||||
|
|
||||||
if (!lcd_clip_viewport_hline(&x1, &x2, &y))
|
if (!lcd_clip_viewport_hline(&x1, &x2, &y))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
dst = FBADDR(x1, y);
|
dst = FBADDR(x1, y);
|
||||||
stride_dst = lcd_current_viewport->buffer->stride;
|
stride_dst = vp->buffer->stride;
|
||||||
dst_end = dst + (x2 - x1) * stride_dst;
|
dst_end = dst + (x2 - x1) * stride_dst;
|
||||||
|
|
||||||
do
|
do
|
||||||
|
@ -85,6 +86,7 @@ void lcd_hline(int x1, int x2, int y)
|
||||||
/* Draw a vertical line (optimised) */
|
/* Draw a vertical line (optimised) */
|
||||||
void lcd_vline(int x, int y1, int y2)
|
void lcd_vline(int x, int y1, int y2)
|
||||||
{
|
{
|
||||||
|
struct viewport *vp = lcd_current_viewport;
|
||||||
int height;
|
int height;
|
||||||
unsigned bits = 0;
|
unsigned bits = 0;
|
||||||
enum fill_opt fillopt = OPT_NONE;
|
enum fill_opt fillopt = OPT_NONE;
|
||||||
|
@ -96,14 +98,14 @@ void lcd_vline(int x, int y1, int y2)
|
||||||
height = y2 - y1 + 1;
|
height = y2 - y1 + 1;
|
||||||
|
|
||||||
/* drawmode and optimisation */
|
/* drawmode and optimisation */
|
||||||
if (lcd_current_viewport->drawmode & DRMODE_INVERSEVID)
|
if (vp->drawmode & DRMODE_INVERSEVID)
|
||||||
{
|
{
|
||||||
if (lcd_current_viewport->drawmode & DRMODE_BG)
|
if (vp->drawmode & DRMODE_BG)
|
||||||
{
|
{
|
||||||
if (!lcd_backdrop)
|
if (!lcd_backdrop)
|
||||||
{
|
{
|
||||||
fillopt = OPT_SET;
|
fillopt = OPT_SET;
|
||||||
bits = lcd_current_viewport->bg_pattern;
|
bits = vp->bg_pattern;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
fillopt = OPT_COPY;
|
fillopt = OPT_COPY;
|
||||||
|
@ -111,13 +113,13 @@ void lcd_vline(int x, int y1, int y2)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (lcd_current_viewport->drawmode & DRMODE_FG)
|
if (vp->drawmode & DRMODE_FG)
|
||||||
{
|
{
|
||||||
fillopt = OPT_SET;
|
fillopt = OPT_SET;
|
||||||
bits = lcd_current_viewport->fg_pattern;
|
bits = vp->fg_pattern;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (fillopt == OPT_NONE && lcd_current_viewport->drawmode != DRMODE_COMPLEMENT)
|
if (fillopt == OPT_NONE && vp->drawmode != DRMODE_COMPLEMENT)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
dst = FBADDR(x, y1);
|
dst = FBADDR(x, y1);
|
||||||
|
@ -147,6 +149,7 @@ void ICODE_ATTR lcd_bitmap_part(const fb_data *src, int src_x, int src_y,
|
||||||
int stride, int x, int y, int width,
|
int stride, int x, int y, int width,
|
||||||
int height)
|
int height)
|
||||||
{
|
{
|
||||||
|
struct viewport *vp = lcd_current_viewport;
|
||||||
fb_data *dst;
|
fb_data *dst;
|
||||||
int stride_dst;
|
int stride_dst;
|
||||||
|
|
||||||
|
@ -155,7 +158,7 @@ void ICODE_ATTR lcd_bitmap_part(const fb_data *src, int src_x, int src_y,
|
||||||
|
|
||||||
src += stride * src_x + src_y; /* move starting point */
|
src += stride * src_x + src_y; /* move starting point */
|
||||||
dst = FBADDR(x, y);
|
dst = FBADDR(x, y);
|
||||||
stride_dst = lcd_current_viewport->buffer->stride;
|
stride_dst = vp->buffer->stride;
|
||||||
fb_data *dst_end = dst + width * stride_dst;
|
fb_data *dst_end = dst + width * stride_dst;
|
||||||
|
|
||||||
do
|
do
|
||||||
|
@ -172,6 +175,7 @@ void ICODE_ATTR lcd_bitmap_transparent_part(const fb_data *src, int src_x,
|
||||||
int src_y, int stride, int x,
|
int src_y, int stride, int x,
|
||||||
int y, int width, int height)
|
int y, int width, int height)
|
||||||
{
|
{
|
||||||
|
struct viewport *vp = lcd_current_viewport;
|
||||||
fb_data *dst, *dst_end;
|
fb_data *dst, *dst_end;
|
||||||
int stride_dst;
|
int stride_dst;
|
||||||
|
|
||||||
|
@ -180,7 +184,7 @@ void ICODE_ATTR lcd_bitmap_transparent_part(const fb_data *src, int src_x,
|
||||||
|
|
||||||
src += stride * src_x + src_y; /* move starting point */
|
src += stride * src_x + src_y; /* move starting point */
|
||||||
dst = FBADDR(x, y);
|
dst = FBADDR(x, y);
|
||||||
stride_dst = lcd_current_viewport->buffer->stride;
|
stride_dst = vp->buffer->stride;
|
||||||
dst_end = dst + width * stride_dst;
|
dst_end = dst + width * stride_dst;
|
||||||
|
|
||||||
do
|
do
|
||||||
|
@ -189,7 +193,7 @@ void ICODE_ATTR lcd_bitmap_transparent_part(const fb_data *src, int src_x,
|
||||||
for(i = 0;i < height;i++)
|
for(i = 0;i < height;i++)
|
||||||
{
|
{
|
||||||
if (src[i] == REPLACEWITHFG_COLOR)
|
if (src[i] == REPLACEWITHFG_COLOR)
|
||||||
dst[i] = lcd_current_viewport->fg_pattern;
|
dst[i] = vp->fg_pattern;
|
||||||
else if(src[i] != TRANSPARENT_COLOR)
|
else if(src[i] != TRANSPARENT_COLOR)
|
||||||
dst[i] = src[i];
|
dst[i] = src[i];
|
||||||
}
|
}
|
||||||
|
|
|
@ -62,6 +62,7 @@ static void ICODE_ATTR lcd_alpha_bitmap_part_mix(const fb_data* image,
|
||||||
/* Draw a horizontal line (optimised) */
|
/* Draw a horizontal line (optimised) */
|
||||||
void lcd_hline(int x1, int x2, int y)
|
void lcd_hline(int x1, int x2, int y)
|
||||||
{
|
{
|
||||||
|
struct viewport *vp = lcd_current_viewport;
|
||||||
int width;
|
int width;
|
||||||
unsigned bits = 0;
|
unsigned bits = 0;
|
||||||
enum fill_opt fillopt = OPT_NONE;
|
enum fill_opt fillopt = OPT_NONE;
|
||||||
|
@ -73,14 +74,14 @@ void lcd_hline(int x1, int x2, int y)
|
||||||
width = x2 - x1 + 1;
|
width = x2 - x1 + 1;
|
||||||
|
|
||||||
/* drawmode and optimisation */
|
/* drawmode and optimisation */
|
||||||
if (lcd_current_viewport->drawmode & DRMODE_INVERSEVID)
|
if (vp->drawmode & DRMODE_INVERSEVID)
|
||||||
{
|
{
|
||||||
if (lcd_current_viewport->drawmode & DRMODE_BG)
|
if (vp->drawmode & DRMODE_BG)
|
||||||
{
|
{
|
||||||
if (!lcd_backdrop)
|
if (!lcd_backdrop)
|
||||||
{
|
{
|
||||||
fillopt = OPT_SET;
|
fillopt = OPT_SET;
|
||||||
bits = lcd_current_viewport->bg_pattern;
|
bits = vp->bg_pattern;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
fillopt = OPT_COPY;
|
fillopt = OPT_COPY;
|
||||||
|
@ -88,13 +89,13 @@ void lcd_hline(int x1, int x2, int y)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (lcd_current_viewport->drawmode & DRMODE_FG)
|
if (vp->drawmode & DRMODE_FG)
|
||||||
{
|
{
|
||||||
fillopt = OPT_SET;
|
fillopt = OPT_SET;
|
||||||
bits = lcd_current_viewport->fg_pattern;
|
bits = vp->fg_pattern;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (fillopt == OPT_NONE && lcd_current_viewport->drawmode != DRMODE_COMPLEMENT)
|
if (fillopt == OPT_NONE && vp->drawmode != DRMODE_COMPLEMENT)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
dst = FBADDR(x1, y);
|
dst = FBADDR(x1, y);
|
||||||
|
@ -122,15 +123,16 @@ void lcd_hline(int x1, int x2, int y)
|
||||||
/* Draw a vertical line (optimised) */
|
/* Draw a vertical line (optimised) */
|
||||||
void lcd_vline(int x, int y1, int y2)
|
void lcd_vline(int x, int y1, int y2)
|
||||||
{
|
{
|
||||||
|
struct viewport *vp = lcd_current_viewport;
|
||||||
fb_data *dst, *dst_end;
|
fb_data *dst, *dst_end;
|
||||||
int stride_dst;
|
int stride_dst;
|
||||||
lcd_fastpixelfunc_type *pfunc = lcd_fastpixelfuncs[lcd_current_viewport->drawmode];
|
lcd_fastpixelfunc_type *pfunc = lcd_fastpixelfuncs[vp->drawmode];
|
||||||
|
|
||||||
if (!lcd_clip_viewport_vline(&x, &y1, &y2))
|
if (!lcd_clip_viewport_vline(&x, &y1, &y2))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
dst = FBADDR(x, y1);
|
dst = FBADDR(x, y1);
|
||||||
stride_dst = lcd_current_viewport->buffer->stride;
|
stride_dst = vp->buffer->stride;
|
||||||
dst_end = dst + (y2 - y1) * stride_dst;
|
dst_end = dst + (y2 - y1) * stride_dst;
|
||||||
|
|
||||||
do
|
do
|
||||||
|
@ -146,6 +148,7 @@ void ICODE_ATTR lcd_bitmap_part(const fb_data *src, int src_x, int src_y,
|
||||||
int stride, int x, int y, int width,
|
int stride, int x, int y, int width,
|
||||||
int height)
|
int height)
|
||||||
{
|
{
|
||||||
|
struct viewport *vp = lcd_current_viewport;
|
||||||
fb_data *dst;
|
fb_data *dst;
|
||||||
int stride_dst;
|
int stride_dst;
|
||||||
|
|
||||||
|
@ -154,7 +157,7 @@ void ICODE_ATTR lcd_bitmap_part(const fb_data *src, int src_x, int src_y,
|
||||||
|
|
||||||
src += stride * src_y + src_x; /* move starting point */
|
src += stride * src_y + src_x; /* move starting point */
|
||||||
dst = FBADDR(x, y);
|
dst = FBADDR(x, y);
|
||||||
stride_dst = lcd_current_viewport->buffer->stride;
|
stride_dst = vp->buffer->stride;
|
||||||
|
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
|
@ -170,9 +173,10 @@ void ICODE_ATTR lcd_bitmap_transparent_part(const fb_data *src, int src_x,
|
||||||
int src_y, int stride, int x,
|
int src_y, int stride, int x,
|
||||||
int y, int width, int height)
|
int y, int width, int height)
|
||||||
{
|
{
|
||||||
|
struct viewport *vp = lcd_current_viewport;
|
||||||
fb_data *dst;
|
fb_data *dst;
|
||||||
unsigned fg = lcd_current_viewport->fg_pattern;
|
unsigned fg = vp->fg_pattern;
|
||||||
int stride_dst = lcd_current_viewport->buffer->stride;
|
int stride_dst = vp->buffer->stride;
|
||||||
|
|
||||||
if (!lcd_clip_viewport_rect(&x, &y, &width, &height, &src_x, &src_y))
|
if (!lcd_clip_viewport_rect(&x, &y, &width, &height, &src_x, &src_y))
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -237,6 +237,7 @@ void LCDFN(clear_viewport)(void)
|
||||||
/* Draw a horizontal line (optimised) */
|
/* Draw a horizontal line (optimised) */
|
||||||
void LCDFN(hline)(int x1, int x2, int y)
|
void LCDFN(hline)(int x1, int x2, int y)
|
||||||
{
|
{
|
||||||
|
struct viewport *vp = CURRENT_VP;
|
||||||
int width;
|
int width;
|
||||||
unsigned char *dst, *dst_end;
|
unsigned char *dst, *dst_end;
|
||||||
unsigned mask;
|
unsigned mask;
|
||||||
|
@ -247,7 +248,7 @@ void LCDFN(hline)(int x1, int x2, int y)
|
||||||
|
|
||||||
width = x2 - x1 + 1;
|
width = x2 - x1 + 1;
|
||||||
|
|
||||||
bfunc = LCDFN(blockfuncs)[CURRENT_VP->drawmode];
|
bfunc = LCDFN(blockfuncs)[vp->drawmode];
|
||||||
dst = LCDFB(x1,y>>3);
|
dst = LCDFB(x1,y>>3);
|
||||||
mask = BIT_N(y & 7);
|
mask = BIT_N(y & 7);
|
||||||
|
|
||||||
|
@ -260,6 +261,7 @@ void LCDFN(hline)(int x1, int x2, int y)
|
||||||
/* Draw a vertical line (optimised) */
|
/* Draw a vertical line (optimised) */
|
||||||
void LCDFN(vline)(int x, int y1, int y2)
|
void LCDFN(vline)(int x, int y1, int y2)
|
||||||
{
|
{
|
||||||
|
struct viewport *vp = CURRENT_VP;
|
||||||
int ny;
|
int ny;
|
||||||
FBFN(data) *dst;
|
FBFN(data) *dst;
|
||||||
int stride_dst;
|
int stride_dst;
|
||||||
|
@ -269,12 +271,12 @@ void LCDFN(vline)(int x, int y1, int y2)
|
||||||
if (!LCDFN(clip_viewport_vline)(&x, &y1, &y2))
|
if (!LCDFN(clip_viewport_vline)(&x, &y1, &y2))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
bfunc = LCDFN(blockfuncs)[CURRENT_VP->drawmode];
|
bfunc = LCDFN(blockfuncs)[vp->drawmode];
|
||||||
dst = LCDFB(x,y1>>3);
|
dst = LCDFB(x,y1>>3);
|
||||||
ny = y2 - (y1 & ~7);
|
ny = y2 - (y1 & ~7);
|
||||||
mask = 0xFFu << (y1 & 7);
|
mask = 0xFFu << (y1 & 7);
|
||||||
mask_bottom = 0xFFu >> (~ny & 7);
|
mask_bottom = 0xFFu >> (~ny & 7);
|
||||||
stride_dst = CURRENT_VP->buffer->stride;
|
stride_dst = vp->buffer->stride;
|
||||||
|
|
||||||
for (; ny >= 8; ny -= 8)
|
for (; ny >= 8; ny -= 8)
|
||||||
{
|
{
|
||||||
|
@ -289,6 +291,7 @@ void LCDFN(vline)(int x, int y1, int y2)
|
||||||
/* Fill a rectangular area */
|
/* Fill a rectangular area */
|
||||||
void LCDFN(fillrect)(int x, int y, int width, int height)
|
void LCDFN(fillrect)(int x, int y, int width, int height)
|
||||||
{
|
{
|
||||||
|
struct viewport *vp = CURRENT_VP;
|
||||||
int ny;
|
int ny;
|
||||||
FBFN(data) *dst, *dst_end;
|
FBFN(data) *dst, *dst_end;
|
||||||
int stride_dst;
|
int stride_dst;
|
||||||
|
@ -300,27 +303,27 @@ void LCDFN(fillrect)(int x, int y, int width, int height)
|
||||||
if (!LCDFN(clip_viewport_rect)(&x, &y, &width, &height, NULL, NULL))
|
if (!LCDFN(clip_viewport_rect)(&x, &y, &width, &height, NULL, NULL))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (CURRENT_VP->drawmode & DRMODE_INVERSEVID)
|
if (vp->drawmode & DRMODE_INVERSEVID)
|
||||||
{
|
{
|
||||||
if (CURRENT_VP->drawmode & DRMODE_BG)
|
if (vp->drawmode & DRMODE_BG)
|
||||||
{
|
{
|
||||||
fillopt = true;
|
fillopt = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (CURRENT_VP->drawmode & DRMODE_FG)
|
if (vp->drawmode & DRMODE_FG)
|
||||||
{
|
{
|
||||||
fillopt = true;
|
fillopt = true;
|
||||||
bits = 0xFFu;
|
bits = 0xFFu;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
bfunc = LCDFN(blockfuncs)[CURRENT_VP->drawmode];
|
bfunc = LCDFN(blockfuncs)[vp->drawmode];
|
||||||
dst = LCDFB(x,y>>3);
|
dst = LCDFB(x,y>>3);
|
||||||
ny = height - 1 + (y & 7);
|
ny = height - 1 + (y & 7);
|
||||||
mask = 0xFFu << (y & 7);
|
mask = 0xFFu << (y & 7);
|
||||||
mask_bottom = 0xFFu >> (~ny & 7);
|
mask_bottom = 0xFFu >> (~ny & 7);
|
||||||
stride_dst = CURRENT_VP->buffer->stride;
|
stride_dst = vp->buffer->stride;
|
||||||
|
|
||||||
for (; ny >= 8; ny -= 8)
|
for (; ny >= 8; ny -= 8)
|
||||||
{
|
{
|
||||||
|
@ -368,6 +371,7 @@ void ICODE_ATTR LCDFN(bitmap_part)(const unsigned char *src, int src_x,
|
||||||
int src_y, int stride, int x, int y,
|
int src_y, int stride, int x, int y,
|
||||||
int width, int height)
|
int width, int height)
|
||||||
{
|
{
|
||||||
|
struct viewport *vp = CURRENT_VP;
|
||||||
int shift, ny;
|
int shift, ny;
|
||||||
FBFN(data) *dst, *dst_end;
|
FBFN(data) *dst, *dst_end;
|
||||||
int stride_dst;
|
int stride_dst;
|
||||||
|
@ -381,17 +385,17 @@ void ICODE_ATTR LCDFN(bitmap_part)(const unsigned char *src, int src_x,
|
||||||
src_y &= 7;
|
src_y &= 7;
|
||||||
y -= src_y;
|
y -= src_y;
|
||||||
dst = LCDFB(x,y>>3);
|
dst = LCDFB(x,y>>3);
|
||||||
stride_dst = CURRENT_VP->buffer->stride;
|
stride_dst = vp->buffer->stride;
|
||||||
shift = y & 7;
|
shift = y & 7;
|
||||||
ny = height - 1 + shift + src_y;
|
ny = height - 1 + shift + src_y;
|
||||||
|
|
||||||
bfunc = LCDFN(blockfuncs)[CURRENT_VP->drawmode];
|
bfunc = LCDFN(blockfuncs)[vp->drawmode];
|
||||||
mask = 0xFFu << (shift + src_y);
|
mask = 0xFFu << (shift + src_y);
|
||||||
mask_bottom = 0xFFu >> (~ny & 7);
|
mask_bottom = 0xFFu >> (~ny & 7);
|
||||||
|
|
||||||
if (shift == 0)
|
if (shift == 0)
|
||||||
{
|
{
|
||||||
bool copyopt = (CURRENT_VP->drawmode == DRMODE_SOLID);
|
bool copyopt = (vp->drawmode == DRMODE_SOLID);
|
||||||
|
|
||||||
for (; ny >= 8; ny -= 8)
|
for (; ny >= 8; ny -= 8)
|
||||||
{
|
{
|
||||||
|
|
|
@ -61,14 +61,15 @@ static void ICODE_ATTR lcd_alpha_bitmap_part_mix(const fb_data* image,
|
||||||
/* Clear the current viewport */
|
/* Clear the current viewport */
|
||||||
void lcd_clear_viewport(void)
|
void lcd_clear_viewport(void)
|
||||||
{
|
{
|
||||||
|
struct viewport *vp = lcd_current_viewport;
|
||||||
fb_data *dst, *dst_end;
|
fb_data *dst, *dst_end;
|
||||||
int x, y, width, height;
|
int x, y, width, height;
|
||||||
int len, step;
|
int len, step;
|
||||||
|
|
||||||
x = lcd_current_viewport->x;
|
x = vp->x;
|
||||||
y = lcd_current_viewport->y;
|
y = vp->y;
|
||||||
width = lcd_current_viewport->width;
|
width = vp->width;
|
||||||
height = lcd_current_viewport->height;
|
height = vp->height;
|
||||||
|
|
||||||
len = STRIDE_MAIN(width, height);
|
len = STRIDE_MAIN(width, height);
|
||||||
step = STRIDE_MAIN(ROW_INC, COL_INC);
|
step = STRIDE_MAIN(ROW_INC, COL_INC);
|
||||||
|
@ -76,9 +77,9 @@ void lcd_clear_viewport(void)
|
||||||
dst = FBADDR(x, y);
|
dst = FBADDR(x, y);
|
||||||
dst_end = FBADDR(x + width - 1 , y + height - 1);
|
dst_end = FBADDR(x + width - 1 , y + height - 1);
|
||||||
|
|
||||||
if (lcd_current_viewport->drawmode & DRMODE_INVERSEVID)
|
if (vp->drawmode & DRMODE_INVERSEVID)
|
||||||
{
|
{
|
||||||
fb_data px = FB_SCALARPACK(lcd_current_viewport->fg_pattern);
|
fb_data px = FB_SCALARPACK(vp->fg_pattern);
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
fb_data *end = dst + len;
|
fb_data *end = dst + len;
|
||||||
|
@ -93,7 +94,7 @@ void lcd_clear_viewport(void)
|
||||||
{
|
{
|
||||||
if (!lcd_backdrop)
|
if (!lcd_backdrop)
|
||||||
{
|
{
|
||||||
fb_data px = FB_SCALARPACK(lcd_current_viewport->bg_pattern);
|
fb_data px = FB_SCALARPACK(vp->bg_pattern);
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
fb_data *end = dst + len;
|
fb_data *end = dst + len;
|
||||||
|
@ -116,12 +117,12 @@ void lcd_clear_viewport(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (lcd_current_viewport == &default_vp)
|
if (vp == &default_vp)
|
||||||
lcd_scroll_stop();
|
lcd_scroll_stop();
|
||||||
else
|
else
|
||||||
lcd_scroll_stop_viewport(lcd_current_viewport);
|
lcd_scroll_stop_viewport(vp);
|
||||||
|
|
||||||
lcd_current_viewport->flags &= ~(VP_FLAG_VP_SET_CLEAN);
|
vp->flags &= ~(VP_FLAG_VP_SET_CLEAN);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*** low-level drawing functions ***/
|
/*** low-level drawing functions ***/
|
||||||
|
@ -167,6 +168,7 @@ lcd_fastpixelfunc_type* const * lcd_fastpixelfuncs = lcd_fastpixelfuncs_bgcolor;
|
||||||
/* Fill a rectangular area */
|
/* Fill a rectangular area */
|
||||||
void lcd_fillrect(int x, int y, int width, int height)
|
void lcd_fillrect(int x, int y, int width, int height)
|
||||||
{
|
{
|
||||||
|
struct viewport *vp = lcd_current_viewport;
|
||||||
enum fill_opt fillopt = OPT_NONE;
|
enum fill_opt fillopt = OPT_NONE;
|
||||||
fb_data *dst, *dst_end;
|
fb_data *dst, *dst_end;
|
||||||
int len, step;
|
int len, step;
|
||||||
|
@ -177,14 +179,14 @@ void lcd_fillrect(int x, int y, int width, int height)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
/* drawmode and optimisation */
|
/* drawmode and optimisation */
|
||||||
if (lcd_current_viewport->drawmode & DRMODE_INVERSEVID)
|
if (vp->drawmode & DRMODE_INVERSEVID)
|
||||||
{
|
{
|
||||||
if (lcd_current_viewport->drawmode & DRMODE_BG)
|
if (vp->drawmode & DRMODE_BG)
|
||||||
{
|
{
|
||||||
if (!lcd_backdrop)
|
if (!lcd_backdrop)
|
||||||
{
|
{
|
||||||
fillopt = OPT_SET;
|
fillopt = OPT_SET;
|
||||||
bits = FB_SCALARPACK(lcd_current_viewport->bg_pattern);
|
bits = FB_SCALARPACK(vp->bg_pattern);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
fillopt = OPT_COPY;
|
fillopt = OPT_COPY;
|
||||||
|
@ -192,13 +194,13 @@ void lcd_fillrect(int x, int y, int width, int height)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (lcd_current_viewport->drawmode & DRMODE_FG)
|
if (vp->drawmode & DRMODE_FG)
|
||||||
{
|
{
|
||||||
fillopt = OPT_SET;
|
fillopt = OPT_SET;
|
||||||
bits = FB_SCALARPACK(lcd_current_viewport->fg_pattern);
|
bits = FB_SCALARPACK(vp->fg_pattern);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (fillopt == OPT_NONE && lcd_current_viewport->drawmode != DRMODE_COMPLEMENT)
|
if (fillopt == OPT_NONE && vp->drawmode != DRMODE_COMPLEMENT)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
dst = FBADDR(x, y);
|
dst = FBADDR(x, y);
|
||||||
|
@ -259,10 +261,11 @@ void ICODE_ATTR lcd_mono_bitmap_part(const unsigned char *src, int src_x,
|
||||||
int src_y, int stride, int x, int y,
|
int src_y, int stride, int x, int y,
|
||||||
int width, int height)
|
int width, int height)
|
||||||
{
|
{
|
||||||
|
struct viewport *vp = lcd_current_viewport;
|
||||||
const unsigned char *src_end;
|
const unsigned char *src_end;
|
||||||
fb_data *dst, *dst_col;
|
fb_data *dst, *dst_col;
|
||||||
unsigned dmask = 0x100; /* bit 8 == sentinel */
|
unsigned dmask = 0x100; /* bit 8 == sentinel */
|
||||||
int drmode = lcd_current_viewport->drawmode;
|
int drmode = vp->drawmode;
|
||||||
int row;
|
int row;
|
||||||
|
|
||||||
if (!lcd_clip_viewport_rect(&x, &y, &width, &height, &src_x, &src_y))
|
if (!lcd_clip_viewport_rect(&x, &y, &width, &height, &src_x, &src_y))
|
||||||
|
@ -332,7 +335,7 @@ void ICODE_ATTR lcd_mono_bitmap_part(const unsigned char *src, int src_x,
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DRMODE_BG:
|
case DRMODE_BG:
|
||||||
bg = FB_SCALARPACK(lcd_current_viewport->bg_pattern);
|
bg = FB_SCALARPACK(vp->bg_pattern);
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
if (!(data & 0x01))
|
if (!(data & 0x01))
|
||||||
|
@ -345,7 +348,7 @@ void ICODE_ATTR lcd_mono_bitmap_part(const unsigned char *src, int src_x,
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DRMODE_FG:
|
case DRMODE_FG:
|
||||||
fg = FB_SCALARPACK(lcd_current_viewport->fg_pattern);
|
fg = FB_SCALARPACK(vp->fg_pattern);
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
if (data & 0x01)
|
if (data & 0x01)
|
||||||
|
@ -358,7 +361,7 @@ void ICODE_ATTR lcd_mono_bitmap_part(const unsigned char *src, int src_x,
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DRMODE_SOLID|DRMODE_INT_BD:
|
case DRMODE_SOLID|DRMODE_INT_BD:
|
||||||
fg = FB_SCALARPACK(lcd_current_viewport->fg_pattern);
|
fg = FB_SCALARPACK(vp->fg_pattern);
|
||||||
bo = lcd_backdrop_offset;
|
bo = lcd_backdrop_offset;
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
|
@ -371,8 +374,8 @@ void ICODE_ATTR lcd_mono_bitmap_part(const unsigned char *src, int src_x,
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case DRMODE_SOLID:
|
case DRMODE_SOLID:
|
||||||
fg = FB_SCALARPACK(lcd_current_viewport->fg_pattern);
|
fg = FB_SCALARPACK(vp->fg_pattern);
|
||||||
bg = FB_SCALARPACK(lcd_current_viewport->bg_pattern);
|
bg = FB_SCALARPACK(vp->bg_pattern);
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
*dst = (data & 0x01) ? fg : bg;
|
*dst = (data & 0x01) ? fg : bg;
|
||||||
|
@ -442,9 +445,10 @@ static void ICODE_ATTR lcd_alpha_bitmap_part_mix(const fb_data* image,
|
||||||
int width, int height,
|
int width, int height,
|
||||||
int stride_image, int stride_src)
|
int stride_image, int stride_src)
|
||||||
{
|
{
|
||||||
|
struct viewport *vp = lcd_current_viewport;
|
||||||
fb_data *dst, *dst_row;
|
fb_data *dst, *dst_row;
|
||||||
unsigned dmask = 0x00000000;
|
unsigned dmask = 0x00000000;
|
||||||
int drmode = lcd_current_viewport->drawmode;
|
int drmode = vp->drawmode;
|
||||||
|
|
||||||
if (!lcd_clip_viewport_rect(&x, &y, &width, &height, &src_x, &src_y))
|
if (!lcd_clip_viewport_rect(&x, &y, &width, &height, &src_x, &src_y))
|
||||||
return;
|
return;
|
||||||
|
@ -570,7 +574,7 @@ static void ICODE_ATTR lcd_alpha_bitmap_part_mix(const fb_data* image,
|
||||||
while (--col);
|
while (--col);
|
||||||
break;
|
break;
|
||||||
case DRMODE_BG:
|
case DRMODE_BG:
|
||||||
bg = lcd_current_viewport->bg_pattern;
|
bg = vp->bg_pattern;
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
unsigned px = FB_UNPACK_SCALAR_LCD(*dst);
|
unsigned px = FB_UNPACK_SCALAR_LCD(*dst);
|
||||||
|
@ -593,7 +597,7 @@ static void ICODE_ATTR lcd_alpha_bitmap_part_mix(const fb_data* image,
|
||||||
while (--col);
|
while (--col);
|
||||||
break;
|
break;
|
||||||
case DRMODE_FG:
|
case DRMODE_FG:
|
||||||
fg = lcd_current_viewport->fg_pattern;
|
fg = vp->fg_pattern;
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
unsigned px = FB_UNPACK_SCALAR_LCD(*dst);
|
unsigned px = FB_UNPACK_SCALAR_LCD(*dst);
|
||||||
|
@ -605,7 +609,7 @@ static void ICODE_ATTR lcd_alpha_bitmap_part_mix(const fb_data* image,
|
||||||
break;
|
break;
|
||||||
case DRMODE_SOLID|DRMODE_INT_BD:
|
case DRMODE_SOLID|DRMODE_INT_BD:
|
||||||
bo = lcd_backdrop_offset;
|
bo = lcd_backdrop_offset;
|
||||||
fg = lcd_current_viewport->fg_pattern;
|
fg = vp->fg_pattern;
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
unsigned c = FB_UNPACK_SCALAR_LCD(*(fb_data *)((uintptr_t)dst + bo));
|
unsigned c = FB_UNPACK_SCALAR_LCD(*(fb_data *)((uintptr_t)dst + bo));
|
||||||
|
@ -616,7 +620,7 @@ static void ICODE_ATTR lcd_alpha_bitmap_part_mix(const fb_data* image,
|
||||||
while (--col);
|
while (--col);
|
||||||
break;
|
break;
|
||||||
case DRMODE_SOLID|DRMODE_INT_IMG:
|
case DRMODE_SOLID|DRMODE_INT_IMG:
|
||||||
bg = lcd_current_viewport->bg_pattern;
|
bg = vp->bg_pattern;
|
||||||
img_offset = image - dst;
|
img_offset = image - dst;
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
|
@ -641,8 +645,8 @@ static void ICODE_ATTR lcd_alpha_bitmap_part_mix(const fb_data* image,
|
||||||
while (--col);
|
while (--col);
|
||||||
break;
|
break;
|
||||||
case DRMODE_SOLID:
|
case DRMODE_SOLID:
|
||||||
bg = lcd_current_viewport->bg_pattern;
|
bg = vp->bg_pattern;
|
||||||
fg = lcd_current_viewport->fg_pattern;
|
fg = vp->fg_pattern;
|
||||||
do
|
do
|
||||||
{
|
{
|
||||||
*dst = blend_two_colors(bg, fg, data & ALPHA_COLOR_LOOKUP_SIZE );
|
*dst = blend_two_colors(bg, fg, data & ALPHA_COLOR_LOOKUP_SIZE );
|
||||||
|
@ -689,9 +693,10 @@ static void ICODE_ATTR lcd_alpha_bitmap_part_mix(const fb_data* image,
|
||||||
/* Draw a horizontal line (optimised) */
|
/* Draw a horizontal line (optimised) */
|
||||||
void lcd_hline(int x1, int x2, int y)
|
void lcd_hline(int x1, int x2, int y)
|
||||||
{
|
{
|
||||||
|
struct viewport *vp = lcd_current_viewport;
|
||||||
int width;
|
int width;
|
||||||
fb_data *dst, *dst_end;
|
fb_data *dst, *dst_end;
|
||||||
lcd_fastpixelfunc_type *pfunc = lcd_fastpixelfuncs[lcd_current_viewport->drawmode];
|
lcd_fastpixelfunc_type *pfunc = lcd_fastpixelfuncs[vp->drawmode];
|
||||||
|
|
||||||
if (!lcd_clip_viewport_hline(&x1, &x2, &y))
|
if (!lcd_clip_viewport_hline(&x1, &x2, &y))
|
||||||
return;
|
return;
|
||||||
|
@ -710,8 +715,9 @@ void lcd_hline(int x1, int x2, int y)
|
||||||
/* Draw a vertical line (optimised) */
|
/* Draw a vertical line (optimised) */
|
||||||
void lcd_vline(int x, int y1, int y2)
|
void lcd_vline(int x, int y1, int y2)
|
||||||
{
|
{
|
||||||
|
struct viewport *vp = lcd_current_viewport;
|
||||||
fb_data *dst, *dst_end;
|
fb_data *dst, *dst_end;
|
||||||
lcd_fastpixelfunc_type *pfunc = lcd_fastpixelfuncs[lcd_current_viewport->drawmode];
|
lcd_fastpixelfunc_type *pfunc = lcd_fastpixelfuncs[vp->drawmode];
|
||||||
|
|
||||||
if (!lcd_clip_viewport_vline(&x, &y1, &y2))
|
if (!lcd_clip_viewport_vline(&x, &y1, &y2))
|
||||||
return;
|
return;
|
||||||
|
@ -754,6 +760,7 @@ void ICODE_ATTR lcd_bitmap_transparent_part(const fb_data *src, int src_x,
|
||||||
int src_y, int stride, int x,
|
int src_y, int stride, int x,
|
||||||
int y, int width, int height)
|
int y, int width, int height)
|
||||||
{
|
{
|
||||||
|
struct viewport *vp = lcd_current_viewport;
|
||||||
fb_data *dst;
|
fb_data *dst;
|
||||||
fb_data fg, transparent, replacewithfg;
|
fb_data fg, transparent, replacewithfg;
|
||||||
|
|
||||||
|
@ -765,7 +772,7 @@ void ICODE_ATTR lcd_bitmap_transparent_part(const fb_data *src, int src_x,
|
||||||
|
|
||||||
transparent = FB_SCALARPACK(TRANSPARENT_COLOR);
|
transparent = FB_SCALARPACK(TRANSPARENT_COLOR);
|
||||||
replacewithfg = FB_SCALARPACK(REPLACEWITHFG_COLOR);
|
replacewithfg = FB_SCALARPACK(REPLACEWITHFG_COLOR);
|
||||||
fg = FB_SCALARPACK(lcd_current_viewport->fg_pattern);
|
fg = FB_SCALARPACK(vp->fg_pattern);
|
||||||
#define CMP(c1, c2) (c1.r == c2.r && c1.g == c2.g && c1.b == c2.b)
|
#define CMP(c1, c2) (c1.r == c2.r && c1.g == c2.g && c1.b == c2.b)
|
||||||
|
|
||||||
do
|
do
|
||||||
|
|
|
@ -378,6 +378,7 @@ void lcd_clear_viewport(void)
|
||||||
/* Draw a horizontal line (optimised) */
|
/* Draw a horizontal line (optimised) */
|
||||||
void lcd_hline(int x1, int x2, int y)
|
void lcd_hline(int x1, int x2, int y)
|
||||||
{
|
{
|
||||||
|
struct viewport *vp = lcd_current_viewport;
|
||||||
int nx;
|
int nx;
|
||||||
unsigned char *dst;
|
unsigned char *dst;
|
||||||
unsigned mask, mask_right;
|
unsigned mask, mask_right;
|
||||||
|
@ -386,7 +387,7 @@ void lcd_hline(int x1, int x2, int y)
|
||||||
if (!lcd_clip_viewport_hline(&x1, &x2, &y))
|
if (!lcd_clip_viewport_hline(&x1, &x2, &y))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
bfunc = lcd_blockfuncs[lcd_current_viewport->drawmode];
|
bfunc = lcd_blockfuncs[vp->drawmode];
|
||||||
dst = FBADDR(x1>>2,y);
|
dst = FBADDR(x1>>2,y);
|
||||||
nx = x2 - (x1 & ~3);
|
nx = x2 - (x1 & ~3);
|
||||||
mask = 0xFFu >> (2 * (x1 & 3));
|
mask = 0xFFu >> (2 * (x1 & 3));
|
||||||
|
@ -404,6 +405,7 @@ void lcd_hline(int x1, int x2, int y)
|
||||||
/* Draw a vertical line (optimised) */
|
/* Draw a vertical line (optimised) */
|
||||||
void lcd_vline(int x, int y1, int y2)
|
void lcd_vline(int x, int y1, int y2)
|
||||||
{
|
{
|
||||||
|
struct viewport *vp = lcd_current_viewport;
|
||||||
unsigned char *dst, *dst_end;
|
unsigned char *dst, *dst_end;
|
||||||
int stride_dst;
|
int stride_dst;
|
||||||
unsigned mask;
|
unsigned mask;
|
||||||
|
@ -412,9 +414,9 @@ void lcd_vline(int x, int y1, int y2)
|
||||||
if (!lcd_clip_viewport_vline(&x, &y1, &y2))
|
if (!lcd_clip_viewport_vline(&x, &y1, &y2))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
bfunc = lcd_blockfuncs[lcd_current_viewport->drawmode];
|
bfunc = lcd_blockfuncs[vp->drawmode];
|
||||||
dst = FBADDR(x>>2,y1);
|
dst = FBADDR(x>>2,y1);
|
||||||
stride_dst = LCD_FBSTRIDE(lcd_current_viewport->buffer->stride, 0);
|
stride_dst = LCD_FBSTRIDE(vp->buffer->stride, 0);
|
||||||
mask = pixmask[x & 3];
|
mask = pixmask[x & 3];
|
||||||
|
|
||||||
dst_end = dst + (y2 - y1) * stride_dst;
|
dst_end = dst + (y2 - y1) * stride_dst;
|
||||||
|
@ -429,6 +431,7 @@ void lcd_vline(int x, int y1, int y2)
|
||||||
/* Fill a rectangular area */
|
/* Fill a rectangular area */
|
||||||
void lcd_fillrect(int x, int y, int width, int height)
|
void lcd_fillrect(int x, int y, int width, int height)
|
||||||
{
|
{
|
||||||
|
struct viewport *vp = lcd_current_viewport;
|
||||||
int nx;
|
int nx;
|
||||||
unsigned char *dst, *dst_end;
|
unsigned char *dst, *dst_end;
|
||||||
int stride_dst;
|
int stride_dst;
|
||||||
|
@ -438,9 +441,9 @@ void lcd_fillrect(int x, int y, int width, int height)
|
||||||
if (!lcd_clip_viewport_rect(&x, &y, &width, &height, NULL, NULL))
|
if (!lcd_clip_viewport_rect(&x, &y, &width, &height, NULL, NULL))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
bfunc = lcd_blockfuncs[lcd_current_viewport->drawmode];
|
bfunc = lcd_blockfuncs[vp->drawmode];
|
||||||
dst = FBADDR(x>>2,y);
|
dst = FBADDR(x>>2,y);
|
||||||
stride_dst = LCD_FBSTRIDE(lcd_current_viewport->buffer->stride, 0);
|
stride_dst = LCD_FBSTRIDE(vp->buffer->stride, 0);
|
||||||
nx = width - 1 + (x & 3);
|
nx = width - 1 + (x & 3);
|
||||||
mask = 0xFFu >> (2 * (x & 3));
|
mask = 0xFFu >> (2 * (x & 3));
|
||||||
mask_right = 0xFFu << (2 * (~nx & 3));
|
mask_right = 0xFFu << (2 * (~nx & 3));
|
||||||
|
@ -485,12 +488,13 @@ void ICODE_ATTR lcd_mono_bitmap_part(const unsigned char *src, int src_x,
|
||||||
int src_y, int stride, int x, int y,
|
int src_y, int stride, int x, int y,
|
||||||
int width, int height)
|
int width, int height)
|
||||||
{
|
{
|
||||||
|
struct viewport *vp = lcd_current_viewport;
|
||||||
const unsigned char *src_end;
|
const unsigned char *src_end;
|
||||||
fb_data *dst, *dst_end;
|
fb_data *dst, *dst_end;
|
||||||
int stride_dst;
|
int stride_dst;
|
||||||
unsigned dmask = 0x100; /* bit 8 == sentinel */
|
unsigned dmask = 0x100; /* bit 8 == sentinel */
|
||||||
unsigned dst_mask;
|
unsigned dst_mask;
|
||||||
int drmode = lcd_current_viewport->drawmode;
|
int drmode = vp->drawmode;
|
||||||
|
|
||||||
if (!lcd_clip_viewport_rect(&x, &y, &width, &height, &src_x, &src_y))
|
if (!lcd_clip_viewport_rect(&x, &y, &width, &height, &src_x, &src_y))
|
||||||
return;
|
return;
|
||||||
|
@ -500,7 +504,7 @@ void ICODE_ATTR lcd_mono_bitmap_part(const unsigned char *src, int src_x,
|
||||||
src_end = src + width;
|
src_end = src + width;
|
||||||
|
|
||||||
dst = FBADDR(x >> 2,y);
|
dst = FBADDR(x >> 2,y);
|
||||||
stride_dst = LCD_FBSTRIDE(lcd_current_viewport->buffer->stride, 0);
|
stride_dst = LCD_FBSTRIDE(vp->buffer->stride, 0);
|
||||||
dst_end = dst + height * stride_dst;
|
dst_end = dst + height * stride_dst;
|
||||||
dst_mask = pixmask[x & 3];
|
dst_mask = pixmask[x & 3];
|
||||||
|
|
||||||
|
@ -652,6 +656,7 @@ void ICODE_ATTR lcd_bitmap_part(const unsigned char *src, int src_x,
|
||||||
int src_y, int stride, int x, int y,
|
int src_y, int stride, int x, int y,
|
||||||
int width, int height)
|
int width, int height)
|
||||||
{
|
{
|
||||||
|
struct viewport *vp = lcd_current_viewport;
|
||||||
int shift, nx;
|
int shift, nx;
|
||||||
unsigned char *dst, *dst_end;
|
unsigned char *dst, *dst_end;
|
||||||
int stride_dst;
|
int stride_dst;
|
||||||
|
@ -666,7 +671,7 @@ void ICODE_ATTR lcd_bitmap_part(const unsigned char *src, int src_x,
|
||||||
src_x &= 3;
|
src_x &= 3;
|
||||||
x -= src_x;
|
x -= src_x;
|
||||||
dst = FBADDR(x>>2,y);
|
dst = FBADDR(x>>2,y);
|
||||||
stride_dst = LCD_FBSTRIDE(lcd_current_viewport->buffer->stride, 0);
|
stride_dst = LCD_FBSTRIDE(vp->buffer->stride, 0);
|
||||||
shift = x & 3;
|
shift = x & 3;
|
||||||
nx = width - 1 + shift + src_x;
|
nx = width - 1 + shift + src_x;
|
||||||
|
|
||||||
|
|
|
@ -380,6 +380,7 @@ void lcd_clear_viewport(void)
|
||||||
/* Draw a horizontal line (optimised) */
|
/* Draw a horizontal line (optimised) */
|
||||||
void lcd_hline(int x1, int x2, int y)
|
void lcd_hline(int x1, int x2, int y)
|
||||||
{
|
{
|
||||||
|
struct viewport *vp = lcd_current_viewport;
|
||||||
int width;
|
int width;
|
||||||
fb_data *dst, *dst_end;
|
fb_data *dst, *dst_end;
|
||||||
unsigned mask;
|
unsigned mask;
|
||||||
|
@ -390,7 +391,7 @@ void lcd_hline(int x1, int x2, int y)
|
||||||
|
|
||||||
width = x2 - x1 + 1;
|
width = x2 - x1 + 1;
|
||||||
|
|
||||||
bfunc = lcd_blockfuncs[lcd_current_viewport->drawmode];
|
bfunc = lcd_blockfuncs[vp->drawmode];
|
||||||
dst = FBADDR(x1,y>>2);
|
dst = FBADDR(x1,y>>2);
|
||||||
mask = pixmask[y & 3];
|
mask = pixmask[y & 3];
|
||||||
|
|
||||||
|
@ -403,6 +404,7 @@ void lcd_hline(int x1, int x2, int y)
|
||||||
/* Draw a vertical line (optimised) */
|
/* Draw a vertical line (optimised) */
|
||||||
void lcd_vline(int x, int y1, int y2)
|
void lcd_vline(int x, int y1, int y2)
|
||||||
{
|
{
|
||||||
|
struct viewport *vp = lcd_current_viewport;
|
||||||
int ny;
|
int ny;
|
||||||
fb_data *dst;
|
fb_data *dst;
|
||||||
int stride_dst;
|
int stride_dst;
|
||||||
|
@ -412,9 +414,9 @@ void lcd_vline(int x, int y1, int y2)
|
||||||
if (!lcd_clip_viewport_vline(&x, &y1, &y2))
|
if (!lcd_clip_viewport_vline(&x, &y1, &y2))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
bfunc = lcd_blockfuncs[lcd_current_viewport->drawmode];
|
bfunc = lcd_blockfuncs[vp->drawmode];
|
||||||
dst = FBADDR(x,y1>>2);
|
dst = FBADDR(x,y1>>2);
|
||||||
stride_dst = lcd_current_viewport->buffer->stride;
|
stride_dst = vp->buffer->stride;
|
||||||
ny = y2 - (y1 & ~3);
|
ny = y2 - (y1 & ~3);
|
||||||
mask = 0xFFu << (2 * (y1 & 3));
|
mask = 0xFFu << (2 * (y1 & 3));
|
||||||
mask_bottom = 0xFFu >> (2 * (~ny & 3));
|
mask_bottom = 0xFFu >> (2 * (~ny & 3));
|
||||||
|
@ -432,6 +434,7 @@ void lcd_vline(int x, int y1, int y2)
|
||||||
/* Fill a rectangular area */
|
/* Fill a rectangular area */
|
||||||
void lcd_fillrect(int x, int y, int width, int height)
|
void lcd_fillrect(int x, int y, int width, int height)
|
||||||
{
|
{
|
||||||
|
struct viewport *vp = lcd_current_viewport;
|
||||||
int ny;
|
int ny;
|
||||||
fb_data *dst, *dst_end;
|
fb_data *dst, *dst_end;
|
||||||
int stride_dst;
|
int stride_dst;
|
||||||
|
@ -443,9 +446,9 @@ void lcd_fillrect(int x, int y, int width, int height)
|
||||||
if (!lcd_clip_viewport_rect(&x, &y, &width, &height, NULL, NULL))
|
if (!lcd_clip_viewport_rect(&x, &y, &width, &height, NULL, NULL))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (lcd_current_viewport->drawmode & DRMODE_INVERSEVID)
|
if (vp->drawmode & DRMODE_INVERSEVID)
|
||||||
{
|
{
|
||||||
if ((lcd_current_viewport->drawmode & DRMODE_BG) && !lcd_backdrop)
|
if ((vp->drawmode & DRMODE_BG) && !lcd_backdrop)
|
||||||
{
|
{
|
||||||
fillopt = true;
|
fillopt = true;
|
||||||
bits = bg_pattern;
|
bits = bg_pattern;
|
||||||
|
@ -453,15 +456,15 @@ void lcd_fillrect(int x, int y, int width, int height)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (lcd_current_viewport->drawmode & DRMODE_FG)
|
if (vp->drawmode & DRMODE_FG)
|
||||||
{
|
{
|
||||||
fillopt = true;
|
fillopt = true;
|
||||||
bits = fg_pattern;
|
bits = fg_pattern;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
bfunc = lcd_blockfuncs[lcd_current_viewport->drawmode];
|
bfunc = lcd_blockfuncs[vp->drawmode];
|
||||||
dst = FBADDR(x,y>>2);
|
dst = FBADDR(x,y>>2);
|
||||||
stride_dst = lcd_current_viewport->buffer->stride;
|
stride_dst = vp->buffer->stride;
|
||||||
ny = height - 1 + (y & 3);
|
ny = height - 1 + (y & 3);
|
||||||
mask = 0xFFu << (2 * (y & 3));
|
mask = 0xFFu << (2 * (y & 3));
|
||||||
mask_bottom = 0xFFu >> (2 * (~ny & 3));
|
mask_bottom = 0xFFu >> (2 * (~ny & 3));
|
||||||
|
@ -512,6 +515,7 @@ void ICODE_ATTR lcd_mono_bitmap_part(const unsigned char *src, int src_x,
|
||||||
int src_y, int stride, int x, int y,
|
int src_y, int stride, int x, int y,
|
||||||
int width, int height)
|
int width, int height)
|
||||||
{
|
{
|
||||||
|
struct viewport *vp = lcd_current_viewport;
|
||||||
int shift, ny;
|
int shift, ny;
|
||||||
fb_data *dst, *dst_end;
|
fb_data *dst, *dst_end;
|
||||||
int stride_dst;
|
int stride_dst;
|
||||||
|
@ -525,14 +529,14 @@ void ICODE_ATTR lcd_mono_bitmap_part(const unsigned char *src, int src_x,
|
||||||
src_y &= 7;
|
src_y &= 7;
|
||||||
y -= src_y;
|
y -= src_y;
|
||||||
dst = FBADDR(x,y>>2);
|
dst = FBADDR(x,y>>2);
|
||||||
stride_dst = lcd_current_viewport->buffer->stride;
|
stride_dst = vp->buffer->stride;
|
||||||
shift = y & 3;
|
shift = y & 3;
|
||||||
ny = height - 1 + shift + src_y;
|
ny = height - 1 + shift + src_y;
|
||||||
mask = 0xFFFFu << (2 * (shift + src_y));
|
mask = 0xFFFFu << (2 * (shift + src_y));
|
||||||
/* Overflowing bits aren't important. */
|
/* Overflowing bits aren't important. */
|
||||||
mask_bottom = 0xFFFFu >> (2 * (~ny & 7));
|
mask_bottom = 0xFFFFu >> (2 * (~ny & 7));
|
||||||
|
|
||||||
bfunc = lcd_blockfuncs[lcd_current_viewport->drawmode];
|
bfunc = lcd_blockfuncs[vp->drawmode];
|
||||||
|
|
||||||
if (shift == 0)
|
if (shift == 0)
|
||||||
{
|
{
|
||||||
|
@ -662,6 +666,7 @@ void ICODE_ATTR lcd_bitmap_part(const fb_data *src, int src_x, int src_y,
|
||||||
int stride, int x, int y, int width,
|
int stride, int x, int y, int width,
|
||||||
int height)
|
int height)
|
||||||
{
|
{
|
||||||
|
struct viewport *vp = lcd_current_viewport;
|
||||||
int shift, ny;
|
int shift, ny;
|
||||||
fb_data *dst, *dst_end;
|
fb_data *dst, *dst_end;
|
||||||
int stride_dst;
|
int stride_dst;
|
||||||
|
@ -674,7 +679,7 @@ void ICODE_ATTR lcd_bitmap_part(const fb_data *src, int src_x, int src_y,
|
||||||
src_y &= 3;
|
src_y &= 3;
|
||||||
y -= src_y;
|
y -= src_y;
|
||||||
dst = FBADDR(x,y>>2);
|
dst = FBADDR(x,y>>2);
|
||||||
stride_dst = lcd_current_viewport->buffer->stride;
|
stride_dst = vp->buffer->stride;
|
||||||
shift = y & 3;
|
shift = y & 3;
|
||||||
ny = height - 1 + shift + src_y;
|
ny = height - 1 + shift + src_y;
|
||||||
|
|
||||||
|
|
|
@ -413,6 +413,7 @@ void LCDFN(clear_viewport)(void)
|
||||||
/* Draw a horizontal line (optimised) */
|
/* Draw a horizontal line (optimised) */
|
||||||
void LCDFN(hline)(int x1, int x2, int y)
|
void LCDFN(hline)(int x1, int x2, int y)
|
||||||
{
|
{
|
||||||
|
struct viewport *vp = CURRENT_VP;
|
||||||
int width;
|
int width;
|
||||||
FBFN(data) *dst, *dst_end;
|
FBFN(data) *dst, *dst_end;
|
||||||
unsigned mask;
|
unsigned mask;
|
||||||
|
@ -423,7 +424,7 @@ void LCDFN(hline)(int x1, int x2, int y)
|
||||||
|
|
||||||
width = x2 - x1 + 1;
|
width = x2 - x1 + 1;
|
||||||
|
|
||||||
bfunc = LCDFN(blockfuncs)[CURRENT_VP->drawmode];
|
bfunc = LCDFN(blockfuncs)[vp->drawmode];
|
||||||
dst = LCDFB(x1,y>>3);
|
dst = LCDFB(x1,y>>3);
|
||||||
mask = 0x0101 << (y & 7);
|
mask = 0x0101 << (y & 7);
|
||||||
|
|
||||||
|
@ -436,6 +437,7 @@ void LCDFN(hline)(int x1, int x2, int y)
|
||||||
/* Draw a vertical line (optimised) */
|
/* Draw a vertical line (optimised) */
|
||||||
void LCDFN(vline)(int x, int y1, int y2)
|
void LCDFN(vline)(int x, int y1, int y2)
|
||||||
{
|
{
|
||||||
|
struct viewport *vp = CURRENT_VP;
|
||||||
int ny;
|
int ny;
|
||||||
FBFN(data) *dst;
|
FBFN(data) *dst;
|
||||||
int stride_dst;
|
int stride_dst;
|
||||||
|
@ -445,9 +447,9 @@ void LCDFN(vline)(int x, int y1, int y2)
|
||||||
if (!LCDFN(clip_viewport_vline)(&x, &y1, &y2))
|
if (!LCDFN(clip_viewport_vline)(&x, &y1, &y2))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
bfunc = LCDFN(blockfuncs)[CURRENT_VP->drawmode];
|
bfunc = LCDFN(blockfuncs)[vp->drawmode];
|
||||||
dst = LCDFB(x,y1>>3);
|
dst = LCDFB(x,y1>>3);
|
||||||
stride_dst = CURRENT_VP->buffer->stride;
|
stride_dst = vp->buffer->stride;
|
||||||
ny = y2 - (y1 & ~7);
|
ny = y2 - (y1 & ~7);
|
||||||
mask = (0xFFu << (y1 & 7)) & 0xFFu;
|
mask = (0xFFu << (y1 & 7)) & 0xFFu;
|
||||||
mask |= mask << 8;
|
mask |= mask << 8;
|
||||||
|
@ -467,6 +469,7 @@ void LCDFN(vline)(int x, int y1, int y2)
|
||||||
/* Fill a rectangular area */
|
/* Fill a rectangular area */
|
||||||
void LCDFN(fillrect)(int x, int y, int width, int height)
|
void LCDFN(fillrect)(int x, int y, int width, int height)
|
||||||
{
|
{
|
||||||
|
struct viewport *vp = CURRENT_VP;
|
||||||
int ny;
|
int ny;
|
||||||
FBFN(data) *dst, *dst_end;
|
FBFN(data) *dst, *dst_end;
|
||||||
int stride_dst;
|
int stride_dst;
|
||||||
|
@ -478,9 +481,9 @@ void LCDFN(fillrect)(int x, int y, int width, int height)
|
||||||
if (!LCDFN(clip_viewport_rect)(&x, &y, &width, &height, NULL, NULL))
|
if (!LCDFN(clip_viewport_rect)(&x, &y, &width, &height, NULL, NULL))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (CURRENT_VP->drawmode & DRMODE_INVERSEVID)
|
if (vp->drawmode & DRMODE_INVERSEVID)
|
||||||
{
|
{
|
||||||
if ((CURRENT_VP->drawmode & DRMODE_BG) && !backdrop)
|
if ((vp->drawmode & DRMODE_BG) && !backdrop)
|
||||||
{
|
{
|
||||||
fillopt = true;
|
fillopt = true;
|
||||||
bits = bg_pattern;
|
bits = bg_pattern;
|
||||||
|
@ -488,15 +491,15 @@ void LCDFN(fillrect)(int x, int y, int width, int height)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (CURRENT_VP->drawmode & DRMODE_FG)
|
if (vp->drawmode & DRMODE_FG)
|
||||||
{
|
{
|
||||||
fillopt = true;
|
fillopt = true;
|
||||||
bits = fg_pattern;
|
bits = fg_pattern;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
bfunc = LCDFN(blockfuncs)[CURRENT_VP->drawmode];
|
bfunc = LCDFN(blockfuncs)[vp->drawmode];
|
||||||
dst = LCDFB(x,y>>3);
|
dst = LCDFB(x,y>>3);
|
||||||
stride_dst = CURRENT_VP->buffer->stride;
|
stride_dst = vp->buffer->stride;
|
||||||
ny = height - 1 + (y & 7);
|
ny = height - 1 + (y & 7);
|
||||||
mask = (0xFFu << (y & 7)) & 0xFFu;
|
mask = (0xFFu << (y & 7)) & 0xFFu;
|
||||||
mask |= mask << 8;
|
mask |= mask << 8;
|
||||||
|
@ -549,6 +552,7 @@ void ICODE_ATTR LCDFN(mono_bitmap_part)(const unsigned char *src, int src_x,
|
||||||
int src_y, int stride, int x, int y,
|
int src_y, int stride, int x, int y,
|
||||||
int width, int height)
|
int width, int height)
|
||||||
{
|
{
|
||||||
|
struct viewport *vp = CURRENT_VP;
|
||||||
int shift, ny;
|
int shift, ny;
|
||||||
FBFN(data) *dst, *dst_end;
|
FBFN(data) *dst, *dst_end;
|
||||||
int stride_dst;
|
int stride_dst;
|
||||||
|
@ -562,11 +566,11 @@ void ICODE_ATTR LCDFN(mono_bitmap_part)(const unsigned char *src, int src_x,
|
||||||
src_y &= 7;
|
src_y &= 7;
|
||||||
y -= src_y;
|
y -= src_y;
|
||||||
dst = LCDFB(x,y>>3);
|
dst = LCDFB(x,y>>3);
|
||||||
stride_dst = CURRENT_VP->buffer->stride;
|
stride_dst = vp->buffer->stride;
|
||||||
shift = y & 7;
|
shift = y & 7;
|
||||||
ny = height - 1 + shift + src_y;
|
ny = height - 1 + shift + src_y;
|
||||||
|
|
||||||
bfunc = LCDFN(blockfuncs)[CURRENT_VP->drawmode];
|
bfunc = LCDFN(blockfuncs)[vp->drawmode];
|
||||||
mask = 0xFFu << (shift + src_y);
|
mask = 0xFFu << (shift + src_y);
|
||||||
/* not byte-doubled here because shift+src_y can be > 7 */
|
/* not byte-doubled here because shift+src_y can be > 7 */
|
||||||
mask_bottom = 0xFFu >> (~ny & 7);
|
mask_bottom = 0xFFu >> (~ny & 7);
|
||||||
|
@ -670,6 +674,7 @@ void ICODE_ATTR LCDFN(bitmap_part)(const FBFN(data) *src, int src_x,
|
||||||
int src_y, int stride, int x, int y,
|
int src_y, int stride, int x, int y,
|
||||||
int width, int height)
|
int width, int height)
|
||||||
{
|
{
|
||||||
|
struct viewport *vp = CURRENT_VP;
|
||||||
int shift, ny;
|
int shift, ny;
|
||||||
FBFN(data) *dst, *dst_end;
|
FBFN(data) *dst, *dst_end;
|
||||||
int stride_dst;
|
int stride_dst;
|
||||||
|
@ -682,7 +687,7 @@ void ICODE_ATTR LCDFN(bitmap_part)(const FBFN(data) *src, int src_x,
|
||||||
src_y &= 7;
|
src_y &= 7;
|
||||||
y -= src_y;
|
y -= src_y;
|
||||||
dst = LCDFB(x,y>>3);
|
dst = LCDFB(x,y>>3);
|
||||||
stride_dst = CURRENT_VP->buffer->stride;
|
stride_dst = vp->buffer->stride;
|
||||||
shift = y & 7;
|
shift = y & 7;
|
||||||
ny = height - 1 + shift + src_y;
|
ny = height - 1 + shift + src_y;
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue