📄 lcdlin32.c
字号:
Data |= Index << 8;
}
}
}
WRITE_MEM(Off, Data);
}
}
}
}
/*********************************************************************
*
* Draw Bitmap 8 BPP, optimized for LCD_ENDIAN_BIG == 0, LCD_BITSPERPIXEL == 4
*/
#elif (LCD_ENDIAN_BIG == 0) && \
(LCD_BITSPERPIXEL == 4) && \
(!LCD_MIRROR_X) && \
(!LCD_MIRROR_Y) && \
(!LCD_SWAP_XY)
static void _DrawBitLine8BPP(int x, int y, U8 const GUI_UNI_PTR * p, int xsize, const LCD_PIXELINDEX * pTrans) {
if ((GUI_Context.DrawMode & LCD_DRAWMODE_TRANS) == 0) {
U32 Data, ColorMask, AndMask;
int Off, NumPixel_0, NumPixel_1, i;
Off = y * DWORDS_PER_LINE + x / PIXELS_PER_DWORD;
NumPixel_0 = x & (PIXELS_PER_DWORD - 1);
NumPixel_1 = (x + xsize - 1) & (PIXELS_PER_DWORD - 1);
if (pTrans) {
/* First DWORD */
if (NumPixel_0) {
ColorMask = 0;
AndMask = ~(0xFFFFFFFF << (4 * NumPixel_0));
for (i = NumPixel_0; (i < 8) && xsize; i++, xsize--) {
U8 Index = *(pTrans + *p++);
ColorMask |= Index << (4 * i);
}
Data = READ_MEM(Off);
Data &= AndMask;
Data |= ColorMask;
WRITE_MEM(Off, Data);
Off++;
}
/* Complete DWORDS */
while (xsize >= 8) {
ColorMask = *(pTrans + *p) |
(*(pTrans + *(p + 1)) << 4) |
(*(pTrans + *(p + 2)) << 8) |
(*(pTrans + *(p + 3)) << 12) |
(*(pTrans + *(p + 4)) << 16) |
(*(pTrans + *(p + 5)) << 20) |
(*(pTrans + *(p + 6)) << 24) |
(*(pTrans + *(p + 7)) << 28);
WRITE_MEM(Off, ColorMask);
p += 8;
Off++;
xsize -= 8;
}
/* Last DWORD */
if (xsize) {
ColorMask = i = 0;
AndMask = 0xFFFFFFF0 << (4 * NumPixel_1);
while (xsize) {
U8 Index = *(pTrans + *p++);
ColorMask |= Index << (4 * i++);
xsize--;
}
Data = READ_MEM(Off);
Data &= AndMask;
Data |= ColorMask;
WRITE_MEM(Off, Data);
}
} else {
/* First DWORD */
if (NumPixel_0) {
ColorMask = 0;
AndMask = ~(0xFFFFFFFF << (4 * NumPixel_0));
for (i = NumPixel_0; (i < 8) && xsize; i++, xsize--) {
U8 Index = *(p++);
ColorMask |= Index << (4 * i);
}
Data = READ_MEM(Off);
Data &= AndMask;
Data |= ColorMask;
WRITE_MEM(Off, Data);
Off++;
}
/* Complete DWORDS */
while (xsize >= 8) {
ColorMask = *(p) |
(*(p + 1) << 4) |
(*(p + 2) << 8) |
(*(p + 3) << 12) |
(*(p + 4) << 16) |
(*(p + 5) << 20) |
(*(p + 6) << 24) |
(*(p + 7) << 28);
WRITE_MEM(Off, ColorMask);
p += 8;
Off++;
xsize -= 8;
}
/* Last DWORD */
if (xsize) {
ColorMask = i = 0;
AndMask = 0xFFFFFFF0 << (4 * NumPixel_1);
while (xsize) {
U8 Index = *(p++);
ColorMask |= Index << (4 * i++);
xsize--;
}
Data = READ_MEM(Off);
Data &= AndMask;
Data |= ColorMask;
WRITE_MEM(Off, Data);
}
}
} else {
/* Handle transparent bitmap with palette */
LCD_PIXELINDEX pixel;
if (pTrans) {
while (xsize > 0) {
pixel = *p;
if (pixel != 0) {
LCD_L0_SetPixelIndex(x + 0, y, *(pTrans + pixel));
}
xsize--;
x++;
p++;
}
/* Handle transparent bitmap without palette */
} else {
while (xsize > 0) {
pixel = *p;
if (pixel != 0) {
LCD_L0_SetPixelIndex(x + 0, y, pixel);
}
xsize--;
x++;
p++;
}
}
}
}
/*********************************************************************
*
* Draw Bitmap 8 BPP, optimized for LCD_ENDIAN_BIG == 0, LCD_BITSPERPIXEL == 2
*/
#elif (LCD_ENDIAN_BIG == 0) && \
(LCD_BITSPERPIXEL == 2) && \
(!LCD_MIRROR_X) && \
(!LCD_MIRROR_Y) && \
(!LCD_SWAP_XY)
static void _DrawBitLine8BPP(int x, int y, U8 const GUI_UNI_PTR * p, int xsize, const LCD_PIXELINDEX * pTrans) {
if ((GUI_Context.DrawMode & LCD_DRAWMODE_TRANS) == 0) {
U32 Data, ColorMask, AndMask;
int Off, NumPixel_0, NumPixel_1, i;
Off = y * DWORDS_PER_LINE + x / PIXELS_PER_DWORD;
NumPixel_0 = x & (PIXELS_PER_DWORD - 1);
NumPixel_1 = (x + xsize - 1) & (PIXELS_PER_DWORD - 1);
if (pTrans) {
/* First DWORD */
if (NumPixel_0) {
ColorMask = 0;
AndMask = ~(0xFFFFFFFF << (2 * NumPixel_0));
for (i = NumPixel_0; (i < 16) && xsize; i++, xsize--) {
U8 Index = *(pTrans + *p++);
ColorMask |= Index << (2 * i);
}
Data = READ_MEM(Off);
Data &= AndMask;
Data |= ColorMask;
WRITE_MEM(Off, Data);
Off++;
}
/* Complete DWORDS */
while (xsize >= 16) {
ColorMask = *(pTrans + *p) |
(*(pTrans + *(p + 1)) << 2) |
(*(pTrans + *(p + 2)) << 4) |
(*(pTrans + *(p + 3)) << 6) |
(*(pTrans + *(p + 4)) << 8) |
(*(pTrans + *(p + 5)) << 10) |
(*(pTrans + *(p + 6)) << 12) |
(*(pTrans + *(p + 7)) << 14) |
(*(pTrans + *(p + 8)) << 16) |
(*(pTrans + *(p + 9)) << 18) |
(*(pTrans + *(p + 10)) << 20) |
(*(pTrans + *(p + 11)) << 22) |
(*(pTrans + *(p + 12)) << 24) |
(*(pTrans + *(p + 13)) << 26) |
(*(pTrans + *(p + 14)) << 28) |
(*(pTrans + *(p + 15)) << 30);
WRITE_MEM(Off, ColorMask);
p += 16;
Off++;
xsize -= 16;
}
/* Last DWORD */
if (xsize) {
ColorMask = i = 0;
AndMask = 0xFFFFFFFC << (2 * NumPixel_1);
while (xsize) {
U8 Index = *(pTrans + *p++);
ColorMask |= Index << (2 * i++);
xsize--;
}
Data = READ_MEM(Off);
Data &= AndMask;
Data |= ColorMask;
WRITE_MEM(Off, Data);
}
} else {
/* First DWORD */
if (NumPixel_0) {
ColorMask = 0;
AndMask = ~(0xFFFFFFFF << (2 * NumPixel_0));
for (i = NumPixel_0; (i < 16) && xsize; i++, xsize--) {
U8 Index = *(p++);
ColorMask |= Index << (2 * i);
}
Data = READ_MEM(Off);
Data &= AndMask;
Data |= ColorMask;
WRITE_MEM(Off, Data);
Off++;
}
/* Complete DWORDS */
while (xsize >= 16) {
ColorMask = *(p) |
(*(p + 1) << 2) |
(*(p + 2) << 4) |
(*(p + 3) << 6) |
(*(p + 4) << 8) |
(*(p + 5) << 10) |
(*(p + 6) << 12) |
(*(p + 7) << 14) |
(*(p + 8) << 16) |
(*(p + 9) << 18) |
(*(p + 10) << 20) |
(*(p + 11) << 22) |
(*(p + 12) << 24) |
(*(p + 13) << 26) |
(*(p + 14) << 28) |
(*(p + 15) << 30);
WRITE_MEM(Off, ColorMask);
p += 16;
Off++;
xsize -= 16;
}
/* Last DWORD */
if (xsize) {
ColorMask = i = 0;
AndMask = 0xFFFFFFFC << (2 * NumPixel_1);
while (xsize) {
U8 Index = *(p++);
ColorMask |= Index << (2 * i++);
xsize--;
}
Data = READ_MEM(Off);
Data &= AndMask;
Data |= ColorMask;
WRITE_MEM(Off, Data);
}
}
} else {
/* Handle transparent bitmap with palette */
LCD_PIXELINDEX pixel;
if (pTrans) {
while (xsize > 0) {
pixel = *p;
if (pixel != 0) {
LCD_L0_SetPixelIndex(x + 0, y, *(pTrans + pixel));
}
xsize--;
x++;
p++;
}
/* Handle transparent bitmap without palette */
} else {
while (xsize > 0) {
pixel = *p;
if (pixel != 0) {
LCD_L0_SetPixelIndex(x + 0, y, pixel);
}
xsize--;
x++;
p++;
}
}
}
}
/*********************************************************************
*
* Draw Bitmap 8 BPP, optimized for LCD_ENDIAN_BIG == 0, LCD_BITSPERPIXEL == 1
*/
#elif (LCD_ENDIAN_BIG == 0) && \
(LCD_BITSPERPIXEL == 1) && \
(!LCD_MIRROR_X) && \
(!LCD_MIRROR_Y) && \
(!LCD_SWAP_XY)
static void _DrawBitLine8BPP(int x, int y, U8 const GUI_UNI_PTR * p, int xsize, const LCD_PIXELINDEX * pTrans) {
if ((GUI_Context.DrawMode & LCD_DRAWMODE_TRANS) == 0) {
U32 Data, ColorMask, AndMask;
int Off, NumPixel_0, NumPixel_1, i;
Off = y * DWORDS_PER_LINE + x / PIXELS_PER_DWORD;
NumPixel_0 = x & (PIXELS_PER_DWORD - 1);
NumPixel_1 = (x + xsize - 1) & (PIXELS_PER_DWORD - 1);
if (pTrans) {
/* First DWORD */
if (NumPixel_0) {
ColorMask = 0;
AndMask = ~(0xFFFFFFFF << NumPixel_0);
for (i = NumPixel_0; (i < 32) && xsize; i++, xsize--) {
U8 Index = *(pTrans + *p++);
ColorMask |= Index << i;
}
Data = READ_MEM(Off);
Data &= AndMask;
Data |= ColorMask;
WRITE_MEM(Off, Data);
Off++;
}
/* Complete DWORDS */
while (xsize >= 32) {
ColorMask = *(pTrans + *p) |
(*(pTrans + *(p + 1)) << 1) |
(*(pTrans + *(p + 2)) << 2) |
(*(pTrans + *(p + 3)) << 3) |
(*(pTrans + *(p + 4)) << 4) |
(*(pTrans + *(p + 5)) << 5) |
(*(pTrans + *(p + 6)) << 6) |
(*(pTrans + *(p + 7)) << 7) |
(*(pTrans + *(p + 8)) << 8) |
(*(pTrans + *(p + 9)) << 9) |
(*(pTrans + *(p + 10)) << 10) |
(*(pTrans + *(p + 11)) << 11) |
(*(pTrans + *(p + 12)) << 12) |
(*(pTrans + *(p + 13)) << 13) |
(*(pTrans + *(p + 14)) << 14) |
(*(pTrans + *(p + 15)) << 15) |
(*(pTrans + *(p + 16)) << 16) |
(*(pTrans + *(p + 17)) << 17) |
(*(pTrans + *(p + 18)) << 18) |
(*(pTrans + *(p + 19)) << 19) |
(*(pTrans + *(p + 20)) << 20) |
(*(pTrans + *(p + 21)) << 21) |
(*(pTrans + *(p + 22)) << 22) |
(*(pTrans + *(p + 23)) << 23) |
(*(pTrans + *(p + 24)) << 24) |
(*(pTrans + *(p + 25)) << 25) |
(*(pTrans + *(p + 26)) << 26) |
(*(pTrans + *(p + 27)) << 27) |
(*(pTrans + *(p + 28)) << 28) |
(*(pTrans + *(p + 29)) << 29) |
(*(pTrans + *(p + 30)) << 30) |
(*(pTrans + *(p + 31)) << 31);
WRITE_MEM(Off, ColorMask);
p += 32;
Off++;
xsize -= 32;
}
/* Last DWORD */
if (xsize) {
ColorMask = i = 0;
AndMask = 0xFFFFFFFE << NumPixel_1;
while (xsize) {
U8 Index = *(pTrans + *p++);
ColorMask |= Index << i++;
xsize--;
}
Data = READ_MEM(Off);
Data &= AndMask;
Data |= ColorMask;
WRITE_MEM(Off, Data);
}
} else {
/* First DWORD */
if (NumPixel_0) {
ColorMask = 0;
AndMask = ~(0xFFFFFFFF << NumPixel_0);
for (i = NumPixel_0; (i < 32) && xsize; i++, xsize--) {
U8 Index = *(p++);
ColorMask |= Index << i;
}
Data = READ_MEM(Off);
Data &= AndMask;
Data |= ColorMask;
WRITE_MEM(Off, Data);
Off++;
}
/* Complete DWORDS */
while (xsize >= 32) {
ColorMask = *(p) |
(*(p + 1) << 1) |
(*(p + 2) << 2) |
(*(p + 3) << 3) |
(*(p + 4) << 4) |
(*(p + 5) << 5) |
(*(p + 6) << 6) |
(*(p + 7) << 7) |
(*(p + 8) << 8) |
(*(p + 9) << 9) |
(*(p + 10) << 10) |
(*(p + 11) << 11) |
(*(p + 12) << 12) |
(*(p + 13) << 13) |
(*(p + 14) << 14) |
(*(p + 15) << 15) |
(*(p + 16) << 16) |
(*(p + 17) << 17) |
(*(p + 18) << 18) |
(*(p + 19) << 19) |
(*(p + 20) << 20) |
(*(p + 21) << 21) |
(*(p + 22) << 22) |
(*(p + 23) << 23) |
(*(p + 24) << 24) |
(*(p + 25) << 25) |
(*(p + 26) << 26) |
(*(p + 27) << 27) |
(*(p + 28) << 28) |
(*(p + 29) << 29) |
(*(p + 30) << 30) |
(*(p + 31) << 31);
WRITE_MEM(Off, ColorMask);
p += 32;
Off++;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -