亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? guidev.c

?? 一個用于單片機(jī)上的的gui...,里面有實例和pc模擬器
?? C
?? 第 1 頁 / 共 2 頁
字號:

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;
    }
    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)
      *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;
  pRect->x1 = pDev->x0 + pDev->XSize-1;
  pRect->y1 = pDev->y0 + pDev->YSize-1;
}

static  unsigned int _Color2Index (LCD_COLOR Color) {
  GUI_MEMDEV * pDev = GUI_MEMDEV_h2p(GUI_Context.hDevData);
  return pDev->pfColor2Index(Color);
}

static  LCD_COLOR _Index2Color (int Index) {
  GUI_MEMDEV * pDev = GUI_MEMDEV_h2p(GUI_Context.hDevData);
  return pDev->pfIndex2Color(Index);
}

/*********************************************************************
*
*             Device structure
*
**********************************************************************
*/
static const tLCDDEV_APIList _APIList = {
  _Color2Index,
  _DrawBitmap,
  _DrawHLine,
  _DrawVLine,
  _FillRect,
  _GetPixelIndex,
  _GetRect,
  _Index2Color,
  _SetPixelIndex,
  _XorPixel
};


/*
  *********************************************************
  *
  *            Exported routines
  *
  *********************************************************

*/

/*
      *************************************************
      *                                               *
      *             Delete                            *
      *                                               *
      *************************************************
*/
void GUI_MEMDEV_Delete(GUI_MEMDEV_Handle hMemDev) {
/* Make sure memory device is not used */
  GUI_LOCK();
  if (hMemDev) {
    GUI_MEMDEV* pDev;
    if (GUI_Context.hDevData == hMemDev) {
	    GUI_SelectLCD();
    }
    pDev = GUI_MEMDEV_h2p(hMemDev);
    /* Delete the associated usage device */
    if (pDev->hUsage)
      GUI_USAGE_DecUseCnt(pDev->hUsage);
    GUI_ALLOC_FREE(hMemDev);
  }
  GUI_UNLOCK();
}

/************************************************
*
*             CreateEx
*
*************************************************
*/

GUI_MEMDEV_Handle GUI_MEMDEV_CreateEx (int x0, int y0, int xsize, int ysize, int Flags) {
  I32 MemSize;
  GUI_USAGE_Handle hUsage =0;
  #if LCD_BITSPERPIXEL <= 8
    int BytesPerLine = (( 8*xsize+15)>>4)<<1;  /* Reserve 8 bits for pixels */
  #else
    int BytesPerLine = ((16*xsize+15)>>4)<<1;  /* Reserve 16 bits for pixels */
  #endif
  GUI_MEMDEV_Handle hMemDev;
  /* Calc avaliable MemSize */
  MemSize = GUI_ALLOC_GetMaxSize();
  if (!(Flags & GUI_MEMDEV_NOTRANS)) {
    MemSize = (MemSize/4)*3;   /* We need to reserve some memory for usage object */
  }
  if (ysize<=0) {
    int MaxLines = (MemSize-sizeof(GUI_MEMDEV))/BytesPerLine;
    ysize = (MaxLines >-ysize) ? -ysize : MaxLines;
  }
  if (!(Flags & GUI_MEMDEV_NOTRANS)) {
    /* Create the usage map */
    hUsage = GUI_USAGE_BM_Create(x0, y0, xsize, ysize, 0);
  }
  /* Check if we can alloc sufficient memory */
  if (ysize <= 0) {
    GUI_DEBUG_WARN("GUI_MEMDEV_Create: Too little memory");
    return 0;    
  }
  MemSize = ysize*BytesPerLine +sizeof(GUI_MEMDEV);
  hMemDev = GUI_ALLOC_ALLOC(MemSize);
  if (hMemDev) {
    GUI_MEMDEV* pDevData = GUI_MEMDEV_h2p(hMemDev);
    pDevData->x0    = x0;
    pDevData->y0    = y0;
    pDevData->XSize = xsize;
    pDevData->YSize = ysize;
    pDevData->NumColors = LCD_GET_NUMCOLORS();
    pDevData->BytesPerLine= BytesPerLine;
    pDevData->hUsage = hUsage;
    pDevData->pfColor2Index = GUI_Context.pDeviceAPI->pfColor2Index;    
    pDevData->pfIndex2Color = GUI_Context.pDeviceAPI->pfIndex2Color;
  } else {
    GUI_DEBUG_WARN("GUI_MEMDEV_Create: Alloc failed");
  }
  return hMemDev;
}

/************************************************
*
*             Create
*
*************************************************
*/

GUI_MEMDEV_Handle GUI_MEMDEV_Create (int x0, int y0, int xsize, int ysize) {
  return GUI_MEMDEV_CreateEx(x0, y0, xsize, ysize, GUI_MEMDEV_HASTRANS);
}


/************************************************
*
*             Select
*
*************************************************
*/


void GUI_MEMDEV_Select(GUI_MEMDEV_Handle hMem) {
  if (hMem==0) {
    GUI_SelectLCD();
  } else {
    #if GUI_WINSUPPORT
      WM_Deactivate();
    #endif
    /* If LCD was selected Save cliprect */
    if (GUI_Context.hDevData == 0)
      GUI_Context.ClipRectPrev = GUI_Context.ClipRect;
    GUI_Context.hDevData = hMem;
    GUI_Context.pDeviceAPI  = &_APIList;
    LCD_SetClipRectMax();
  }
}


/*
      *************************************************
      *                                               *
      *             CopyToLCDAt                       *
      *                                               *
      *************************************************
*/
#if LCD_BITSPERPIXEL <=8
  #define BITSPERPIXEL 8
#else
  #define BITSPERPIXEL 16
#endif
#define BYTESPERLINE (BITSPERPIXEL/8)

static void _CopyToLCDAt(GUI_MEMDEV_Handle hMem,int x, int y) {
  /* Make sure the memory handle is valid */
  if (!hMem) {
    return;
  }
  {
    GUI_MEMDEV * pDev = GUI_MEMDEV_h2p(hMem);
    GUI_USAGE_h hUsage = pDev->hUsage; 
    GUI_USAGE*  pUsage;
    int YSize = pDev->YSize;
    int yi;
    int BytesPerLine = pDev->BytesPerLine;
    U8 * pData = (U8*)(pDev+1);
    if (hUsage) {
      pUsage = GUI_USAGE_h2p(hUsage);
      for (yi = 0; yi < YSize; yi++) {
        int xOff = 0;
        int XSize;
        XSize = GUI_USAGE_GetNextDirty(pUsage, &xOff, yi);
        if (XSize == pDev->XSize) {
          /* If the entire line is affected, calculate the number of entire lines */
          int y0 = yi;
          while ((GUI_USAGE_GetNextDirty(pUsage, &xOff, yi + 1)) == XSize) {
            yi++;
          }
		      LCD_DrawBitmap(x, y + y0, pDev->XSize, yi - y0 + 1,
                         1, 1,
                         BITSPERPIXEL,
                         BytesPerLine, pData, NULL);
          pData += (yi - y0 + 1) * BytesPerLine;
        } else {
          /* Draw the partial line which needs to be drawn */
          for (; XSize; ) {
            LCD_DrawBitmap(x + xOff, y + yi, XSize, 1, 
                           1, 1, 
                           BITSPERPIXEL, 
                           BytesPerLine, pData + xOff * BYTESPERLINE, NULL);
            xOff += XSize;
            XSize = GUI_USAGE_GetNextDirty(pUsage, &xOff, yi);
          }
          pData += BytesPerLine;
        }
      }
    } else {
		  LCD_DrawBitmap(x, y, pDev->XSize, YSize,
                     1, 1,
                     BITSPERPIXEL,
                     BytesPerLine, pData, NULL);
    }
  }
  GUI_ALLOC_UNLOCK(hMem);
}

#if (GUI_WINSUPPORT)
void GUI_MEMDEV_CopyToLCDAt(GUI_MEMDEV_Handle hMem, int x, int y) {
  if (hMem) {
    WM_LOCK(); {
      GUI_MEMDEV_Handle hMemPrev = GUI_Context.hDevData;
      GUI_MEMDEV* pDevData = (GUI_MEMDEV*) GUI_ALLOC_LOCK(hMem);  /* Convert to pointer */
      GUI_RECT r;
      /* Make sure LCD is selected as device */
      if (hMemPrev) {
        GUI_MEMDEV_Select(0);  /* Activate LCD */
      }
      if (x==POS_AUTO) {
        x = pDevData->x0;
        y = pDevData->y0;
      }
      /* Calculate rectangle */
      r.x1 = (r.x0 = x) + pDevData->XSize-1;
      r.y1 = (r.y0 = y) + pDevData->YSize-1;;
      /* Do the drawing. WIndow manager has to be on */
      WM_Activate();
      WM_ITERATE_START(&r) {
        _CopyToLCDAt(hMem,x,y);
      } WM_ITERATE_END();
      /* Reactivate previously used device */
      GUI_MEMDEV_Select(hMemPrev);
    } WM_UNLOCK();
  }
}
#else
void GUI_MEMDEV_CopyToLCDAt(GUI_MEMDEV_Handle hMem,int x, int y) {
  GUI_MEMDEV_Handle hMemPrev = GUI_Context.hDevData;
  GUI_MEMDEV* pDevData = (GUI_MEMDEV*) GUI_ALLOC_LOCK(hMem);  /* Convert to pointer */
  /* Make sure LCD is selected as device */
  if (hMemPrev) {
    GUI_MEMDEV_Select(0);  /* Activate LCD */
  }
  if (x==POS_AUTO) {
    x = pDevData->x0;
    y = pDevData->y0;
  }
  _CopyToLCDAt(hMem,x,y);
  /* Reactivate previously used memory device */
  if (hMemPrev) {
    GUI_MEMDEV_Select(hMemPrev);
  }
}

#endif
/*
      *************************************************
      *                                               *
      *             CopyToLCD                         *
      *                                               *
      *************************************************
*/
void GUI_MEMDEV_CopyToLCD(GUI_MEMDEV_Handle hMem) {
  GUI_MEMDEV_CopyToLCDAt(hMem, POS_AUTO, POS_AUTO);
}

#else

void GUIDEV(void) {}

#endif /* GUI_SUPPORT_MEMDEV && (LCD_BITSPERPIXEL <= 8) */

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产一区二区久久| 91精品黄色片免费大全| 色爱区综合激月婷婷| 精品视频123区在线观看| 欧美一区二区久久| 日本一区二区视频在线观看| 亚洲自拍另类综合| 麻豆成人综合网| 成人午夜在线播放| 欧美日韩亚洲另类| 久久亚区不卡日本| 夜夜精品视频一区二区| 麻豆精品一二三| 白白色亚洲国产精品| 欧美日韩aaaaaa| 欧美国产1区2区| 亚洲不卡av一区二区三区| 国产一区久久久| 欧美影视一区二区三区| 久久午夜电影网| 亚洲成a人片在线观看中文| 国产一区二区在线电影| 色噜噜狠狠一区二区三区果冻| 久久综合九色综合欧美亚洲| 亚洲一区视频在线| 高清国产一区二区| 91麻豆精品国产综合久久久久久| 国产精品蜜臀在线观看| 免费人成网站在线观看欧美高清| 99久久精品免费观看| 精品日韩在线一区| 亚洲一区二区三区自拍| 成人晚上爱看视频| 日韩限制级电影在线观看| 亚洲色图清纯唯美| 国产主播一区二区三区| 欧美美女bb生活片| 亚洲婷婷国产精品电影人久久| 极品少妇一区二区| 欧美日韩一本到| 亚洲人妖av一区二区| 激情成人午夜视频| 91精品国产综合久久婷婷香蕉 | 99精品欧美一区二区三区小说| 日韩一区二区三区四区| 亚洲一二三级电影| 99riav久久精品riav| 久久婷婷综合激情| 日韩av电影免费观看高清完整版| 91国偷自产一区二区开放时间| 欧美国产一区视频在线观看| 另类中文字幕网| 91麻豆精品国产91久久久久久久久| 亚洲三级电影网站| 成人黄页在线观看| 久久精品一区二区三区不卡牛牛| 蜜桃视频在线一区| 欧美一区二区三区在线视频 | 欧美一区二区视频在线观看2022| 一区二区三区免费观看| a4yy欧美一区二区三区| 中文字幕国产精品一区二区| 国产福利一区二区三区视频| 久久综合色8888| 国产成人一级电影| 国产婷婷色一区二区三区在线| 国产在线播放一区三区四| 日韩视频不卡中文| 美女视频黄免费的久久| 日韩欧美在线影院| 蜜桃视频一区二区| 欧美大肚乱孕交hd孕妇| 久久不见久久见免费视频1| 日韩亚洲欧美成人一区| 精品一区二区三区蜜桃| 26uuu另类欧美| 国产一区二区成人久久免费影院| 久久久久久久久岛国免费| 国产99久久久国产精品潘金 | 99国产精品久久久久久久久久| 亚洲国产精品二十页| 成人一区二区视频| 国产精品夫妻自拍| 91免费小视频| 亚洲一卡二卡三卡四卡无卡久久 | 麻豆91在线观看| 日韩精品一区二区三区swag| 美女爽到高潮91| 久久久www成人免费无遮挡大片| 国产精品一区二区三区四区| 国产视频在线观看一区二区三区| 成人黄色av网站在线| 成人欧美一区二区三区白人| 一本到高清视频免费精品| 一二三区精品视频| 91精品麻豆日日躁夜夜躁| 激情综合网最新| 国产精品久久久久aaaa樱花| 91麻豆蜜桃一区二区三区| 亚洲va天堂va国产va久| 欧美成人a在线| 国产成人aaaa| 亚洲精选一二三| 欧美日韩国产系列| 精品一区二区三区av| 国产精品高潮呻吟久久| 国产精品免费视频一区| 国产精品国模大尺度视频| 欧美性三三影院| 99久久精品国产一区二区三区| 精品一区二区在线免费观看| 午夜精品久久久久久久99樱桃| 国产精品免费aⅴ片在线观看| 中文字幕日韩欧美一区二区三区| 亚洲视频每日更新| 日本va欧美va精品发布| 风间由美一区二区三区在线观看 | 亚洲国产精品久久久久婷婷884| 丝袜美腿成人在线| 国产精品一区二区黑丝| 欧美性色黄大片手机版| 久久人人97超碰com| 亚洲va国产天堂va久久en| 精品一区二区三区的国产在线播放| 欧美日韩视频第一区| 久久久久久免费| 丰满亚洲少妇av| 日韩欧美中文一区二区| 亚洲成人先锋电影| 在线日韩av片| 91精品麻豆日日躁夜夜躁| 亚洲精品一区二区三区99 | 中文字幕在线一区| 国内久久精品视频| 亚洲一级二级三级| 久久九九99视频| 中文乱码免费一区二区| 精品久久久久99| 91精品国产丝袜白色高跟鞋| 欧美在线free| 91精品办公室少妇高潮对白| 99久久精品情趣| av电影在线观看一区| 成人精品亚洲人成在线| 国产成人日日夜夜| 国产激情视频一区二区三区欧美| 韩国三级电影一区二区| 久久99久久99小草精品免视看| 日韩电影免费在线| 日韩二区在线观看| 日韩影院在线观看| 日韩成人av影视| 日本欧美肥老太交大片| 日韩精品国产精品| 亚洲国产精品久久艾草纯爱| 一区二区三区丝袜| 中文字幕视频一区| 亚洲美女视频一区| 中文字幕一区av| 欧美亚一区二区| 一本大道久久a久久综合| 99re热这里只有精品视频| 成人综合日日夜夜| 国产成人综合网| 国模冰冰炮一区二区| 久久99久久精品欧美| 秋霞影院一区二区| 日韩激情av在线| 美女任你摸久久| 麻豆精品新av中文字幕| 美女一区二区视频| 午夜精品一区二区三区免费视频 | 欧美二区乱c少妇| 欧美丝袜第三区| 欧美在线观看一区二区| 欧美精品丝袜久久久中文字幕| 欧美三区在线观看| 欧美日韩一区二区三区不卡| 精品视频一区二区不卡| 欧美一级视频精品观看| 日韩一区二区在线免费观看| 日韩欧美国产精品| 精品乱码亚洲一区二区不卡| 精品国精品国产尤物美女| 精品女同一区二区| 久久久久高清精品| 国产精品天美传媒| 亚洲视频每日更新| 亚洲另类中文字| 亚洲精品中文在线观看| 爽爽淫人综合网网站| 麻豆传媒一区二区三区| 国内外成人在线视频| av亚洲精华国产精华精华| 一本色道a无线码一区v| 欧美性大战久久| 欧美在线观看视频一区二区三区| 日韩一级精品视频在线观看| 欧美va亚洲va| 国产精品美女久久久久aⅴ国产馆 国产精品美女久久久久av爽李琼 国产精品美女久久久久高潮 |