⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 lcdlin32.c

📁 ucgui的3.98版本的源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
              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 + -