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

📄 guidev.lst

📁 Keil C下通过的UCGUI,UCGUI的移植源代码
💻 LST
📖 第 1 页 / 共 3 页
字号:
                    if (pixels&0xF0) {
                      *pData = *(pTrans + (pixels>>4));
                      if (pUsage)
                        GUI_USAGE_AddPixel(pUsage, x,y);
                    }
                    /* Draw 2. (right) pixel */
C51 COMPILER V8.05a   GUIDEV                                                               04/11/2008 14:19:26 PAGE 6   

                    if (pixels &= 15) {
                      *(pData+1) = *(pTrans + pixels);
                      if (pUsage)
                        GUI_USAGE_AddPixel(pUsage, x+1,y);
                    }
                    pData +=2;
                    x+=2;
                    xsize-=2;
                    pixels = *++p;
                  }
                  /* Draw incomplete bytes to the right of center area */
                  if (xsize) {
                    if (pixels >>= 4) {
                      *pData = *(pTrans + pixels);
                      if (pUsage)
                        GUI_USAGE_AddPixel(pUsage, x,y);
                    }
                  }
                  break;
                case LCD_DRAWMODE_XOR:;
                PixelLoopXor:
                  if (PixelCnt>xsize)
                    PixelCnt =xsize;
                  xsize -= PixelCnt;
                  do {
                    if ((pixels&0xc0))
                      *pData ^= 255;
                    pData++;
                    pixels<<=4;
                  } while (--PixelCnt);
                  if (xsize) {
                    PixelCnt=2;
                    pixels = *(++p);
                    goto PixelLoopXor;
                  }
                  break;
                }
              }
              
              /*
                      *********************************************************
                      *                                                       *
                      *          Draw Bitmap 8 BPP Trans                      *
                      *                                                       *
                      *********************************************************
              */
              
              static void  DrawBitLine8BPP(GUI_USAGE* pUsage, int x, int y, U8 const*pSrc, int xsize, const LCD_PIXELIND
             -EX*pTrans) {
                LCD_PIXELINDEX* pDest;
                pDest = GUI_MEMDEV_XY2PTR(x,y);
                switch (GUI_Context.DrawMode & (LCD_DRAWMODE_TRANS|LCD_DRAWMODE_XOR)) {
                case 0:    /* Write mode */
                  do {
                    *pDest = *(pTrans + *pSrc);
                    pDest++;
                    pSrc++;
                  } while (--xsize);
                  break;
                case LCD_DRAWMODE_TRANS:
                  do {
                    if (*pSrc) {
C51 COMPILER V8.05a   GUIDEV                                                               04/11/2008 14:19:26 PAGE 7   

                      *pDest = *(pTrans + *pSrc);
                      GUI_USAGE_AddPixel(pUsage, x,y);
                    }
                    x++;
                    pDest++;
                    pSrc++;
                  } while (--xsize);
                  break;
                }
              }
              
              /*
                      *********************************************************
                      *                                                       *
                      *          Draw Bitmap 8 BPP No Trans                   *
                      *                                                       *
                      *********************************************************
              */
              
              static void  DrawBitLine8BPP_DDB(GUI_USAGE* pUsage, int x, int y, U8 const*pSrc, int xsize) {
                LCD_PIXELINDEX* pDest;
                pDest = GUI_MEMDEV_XY2PTR(x,y);
                switch (GUI_Context.DrawMode & (LCD_DRAWMODE_TRANS|LCD_DRAWMODE_XOR)) {
                case 0:    /* Write mode */
                  #if LCD_BITSPERPIXEL <=8
                    memcpy(pDest, pSrc, xsize);
                  #else
                    *pDest = *pSrc;
                    while (--xsize) {
                      *++pDest = *++pSrc;
                    }
                  #endif
                  break;
                case LCD_DRAWMODE_TRANS:
                  do {
                    if (*pSrc) {
                      *pDest = *pSrc;
                      GUI_USAGE_AddPixel(pUsage, x,y);
                    }
                    x++;
                    pDest++;
                    pSrc++;
                  } while (--xsize);
                  break;
                }
              }
              
              /********************************************************
              *
              *          Draw Bitmap 16 BPP DDB
              *
              *********************************************************
              */
              
              #if LCD_BITSPERPIXEL >8
              static void  DrawBitLine16BPP_DDB(GUI_USAGE* pUsage, int x, int y, const U16 *pSrc, int xsize) {
                LCD_PIXELINDEX* pDest;
                pDest = GUI_MEMDEV_XY2PTR(x,y);
                switch (GUI_Context.DrawMode & (LCD_DRAWMODE_TRANS|LCD_DRAWMODE_XOR)) {
                case 0:    /* Write mode */
                  memcpy(pDest, pSrc, xsize*2);
                  break;
C51 COMPILER V8.05a   GUIDEV                                                               04/11/2008 14:19:26 PAGE 8   

                case LCD_DRAWMODE_TRANS:
                  do {
                    if (*pSrc) {
                      *pDest = *pSrc;
                      GUI_USAGE_AddPixel(pUsage, x,y);
                    }
                    x++;
                    pDest++;
                    pSrc++;
                  } while (--xsize);
                  break;
                }
              }
              #endif
              /*
                      *********************************************************
                      *                                                       *
                      *         Universal draw Bitmap routine                 *
                      *                                                       *
                      *********************************************************
              */
              
              static void _DrawBitmap   (int x0, int y0,
                                     int xsize, int ysize,
                                     int BitsPerPixel, 
                                     int BytesPerLine,
                                     const U8* pData, int Diff,
                                     const LCD_PIXELINDEX* pTrans)
              {
                int i;
                GUI_MEMDEV * pDev = GUI_MEMDEV_h2p(GUI_Context.hDevData);
                GUI_USAGE* pUsage = (pDev->hUsage) ? GUI_USAGE_h2p(pDev->hUsage) : 0;
                /* Mark all affected pixels dirty unless transparency is set */
                if (pUsage) {
                  if ((GUI_Context.DrawMode & LCD_DRAWMODE_TRANS) ==0) {
                    for (i=0; i<ysize; i++) {
                      GUI_USAGE_AddHLine(pUsage, x0+Diff,y0+i,xsize);
                    }
                  }
                }
                /* Handle 8 bpp bitmaps seperately as we have different routine bitmaps with or without palette */
                x0+=Diff;
                /* handle 16 bpp bitmaps in high color modes, but only without palette */
                #if LCD_BITSPERPIXEL >8
                  if (BitsPerPixel==16) {
                    for (i=0; i<ysize; i++) {
                      DrawBitLine16BPP_DDB(pUsage, x0, i+y0, (U16*)pData, xsize);
                      pData += BytesPerLine;
                    }
                    return;
                  }
                #endif
                /* handle 8 bpp bitmaps */
                if (BitsPerPixel==8) {
                  for (i=0; i<ysize; i++) {
                    if (pTrans) {
                      DrawBitLine8BPP(pUsage, x0, i+y0, pData, xsize, pTrans);
                    } else {
                      DrawBitLine8BPP_DDB(pUsage, x0, i+y0, pData, xsize);
                    }
                    pData += BytesPerLine;
                  }
C51 COMPILER V8.05a   GUIDEV                                                               04/11/2008 14:19:26 PAGE 9   

                  return;
                }
                /* Use aID for bitmaps without palette */
                if (!pTrans) {
                  pTrans = aID;
                }
                for (i=0; i<ysize; i++) {
                  switch (BitsPerPixel) {
                  case 1:
                    DrawBitLine1BPP(pUsage, x0, i+y0, pData, Diff, xsize, pTrans);
                    break;
                  case 2:
                    DrawBitLine2BPP(pUsage, x0, i+y0, pData, Diff, xsize, pTrans);
                    break;
                  case 4:
                    DrawBitLine4BPP(pUsage, x0, i+y0, pData, Diff, xsize, pTrans);
                    break;
                  }
                  pData += BytesPerLine;
                }
              
              }
              
              
              static void _DrawHLine    (int x0, int y,  int x1) {
                GUI_MEMDEV * pDev = GUI_MEMDEV_h2p(GUI_Context.hDevData);
                GUI_USAGE_h hUsage = pDev->hUsage; 
                if (hUsage)
                  GUI_USAGE_AddHLine(GUI_USAGE_h2p(hUsage), x0,y,x1-x0+1);
                {
                  int len = x1-x0+1;
                  LCD_PIXELINDEX* pData = GUI_MEMDEV_XY2PTR(x0,y);
                  if (GUI_Context.DrawMode & LCD_DRAWMODE_XOR) {
                    int NumColorsM1 = pDev->NumColors-1;
                    do {
                      *pData = NumColorsM1 - *pData;
                      pData++;
                    } while (--len);
                  } else {  /* Fill */
                    #if LCD_BITSPERPIXEL <=8
                      memset (pData, LCD_COLORINDEX, len);
                    #else
                      *pData = LCD_COLORINDEX;   /* We write at least one pixel, so this is permitted ...
                                                (speed optimization) */
                      while (--len) {
                        *++pData = LCD_COLORINDEX;
                      }
                    #endif
                  }
                }
              }
              
              static void _DrawVLine    (int x , int y0,  int y1) {
                GUI_MEMDEV * pDev = GUI_MEMDEV_h2p(GUI_Context.hDevData);
                GUI_USAGE_h hUsage = pDev->hUsage; 
                GUI_USAGE*  pUsage = hUsage ? GUI_USAGE_h2p(hUsage) : NULL;
                int NumColorsM1 = pDev->NumColors-1;
                LCD_PIXELINDEX* pData = GUI_MEMDEV_XY2PTR(x,y0);
                do {
                  if (hUsage)
                    GUI_USAGE_AddPixel(pUsage, x,y0);
                  if (GUI_Context.DrawMode & LCD_DRAWMODE_XOR)
C51 COMPILER V8.05a   GUIDEV                                                               04/11/2008 14:19:26 PAGE 10  

                    *pData = NumColorsM1 - *pData;
                  else
                    *pData = LCD_COLORINDEX;
                  #if LCD_BITSPERPIXEL <= 8
                    pData += pDev->BytesPerLine;
                  #else
                    pData += pDev->BytesPerLine>>1;
                  #endif
                } while (++y0<=y1);
              }
              
              static void _SetPixelIndex (int x, int y, int Index){
                GUI_MEMDEV * pDev = GUI_MEMDEV_h2p(GUI_Context.hDevData);
                GUI_USAGE_h hUsage = pDev->hUsage; 
                LCD_PIXELINDEX* pData = GUI_MEMDEV_XY2PTR(x,y);
                *pData = Index;
                if (hUsage) {
                  GUI_USAGE*  pUsage = GUI_USAGE_h2p(hUsage);
                  GUI_USAGE_AddPixel(pUsage, x,y);
                }
              }
              
              static void _XorPixel (int x, int y) {
                GUI_MEMDEV * pDev = GUI_MEMDEV_h2p(GUI_Context.hDevData);
                GUI_USAGE_h hUsage = pDev->hUsage; 
                LCD_PIXELINDEX* pData = GUI_MEMDEV_XY2PTR(x,y);
                *pData = pDev->NumColors - 1-*pData;
                if (hUsage) {
                  GUI_USAGE*  pUsage = GUI_USAGE_h2p(hUsage);
                  GUI_USAGE_AddPixel(pUsage, x,y);
                }
              }
              
              static unsigned int _GetPixelIndex (int x, int y){
                LCD_PIXELINDEX* pData = GUI_MEMDEV_XY2PTR(x,y);
                return *pData;
              }
              
              static void _FillRect     (int x0, int y0, int x1, int y1){
                for (; y0 <= y1; y0++) {
                  _DrawHLine(x0,y0, x1);
                }
              }
              
              
              
              static void _GetRect  (GUI_RECT* pRect) {
                GUI_MEMDEV * pDev = GUI_MEMDEV_h2p(GUI_Context.hDevData);
                pRect->x0 = pDev->x0;
                pRect->y0 = pDev->y0;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -