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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? guichar.c

?? Samsung ARM7 s3c44b0 + uC-OSii + uC-GUI 完美的綜合到了一起
?? C
字號:
/***********************************************************************************************************                                                uC/GUI*                        Universal graphic software for embedded applications**                       (c) Copyright 2002, Micrium Inc., Weston, FL*                       (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH**              礐/GUI is protected by international copyright laws. Knowledge of the*              source code may not be used to write a similar product. This file may*              only be used in accordance with a license and should not be redistributed*              in any way. We appreciate your understanding and fairness.*----------------------------------------------------------------------File        : GUIChar.CPurpose     : Implementation of character and string services---------------------------END-OF-HEADER------------------------------*/#include <stddef.h>           /* needed for definition of NULL */#include <stdio.h>#include <string.h>#include "GUI_Private.H" /************************************************************        Public code*************************************************************//*************************************************************       GUI_DispChar*/void GL_DispChar(U16 c) {  /* check for control characters */  if (c == '\n') {    GUI_DispNextLine();  } else {    if (c != '\r') {      GUI_Context.pAFont->pfDispChar(c);    }  }}/*************** GUI_GetStringDistX ****************************This routine is used to calculate the length of a string in pixels.*/int GUI_GetLineDistX(const char GUI_FAR *s, int Len) {  int Dist =0;  if (s) {    if (GUI_Context.pAFont->pafEncode) {      return GUI_Context.pAFont->pafEncode->pfGetLineDistX(s, Len);    }#if (GUI_SUPPORT_UNICODE)    {      U8 c0;      char UCActive=0;      while (((c0=*(U8*)s) !=0) && Len >0) {        s++; Len--;        if (UCActive) {          if (c0 == GUI_UC_ENDCHAR)            UCActive = 0;          else {            U8  c1 = *(U8*)s++;            Len--;            Dist += GUI_GetCharDistX(GUI_DB2UC(c0, c1));          }        } else { /* Unicode not active */          if (c0 == GUI_UC_STARTCHAR)            UCActive = 1;          else            Dist += GUI_GetCharDistX(c0);        }      }    }#else    while (--Len>=0) {      Dist += GUI_GetCharDistX(*(U8*)s++);    }#endif  }  return Dist;}/*************** GUI_GetLineLen ****************************Returns the number of characters in a stringNote: The return value can be used as offset into thestring, which means that double characters count double*/int GUI__GetLineLen(const char GUI_FAR *s, int MaxLen) {  int Len =0;  if (!s)    return 0;  if (GUI_Context.pAFont->pafEncode) {    return GUI_Context.pAFont->pafEncode->pfGetLineLen(s, MaxLen);  }#if (GUI_SUPPORT_UNICODE)  {    U8 c0;    char UCActive=0;    while (((c0=*(U8*)s) !=0) && Len < MaxLen) {      s++;      if (UCActive) {        switch (c0) {        case GUI_UC_ENDCHAR: UCActive = 0; break;        default: Len++; s++;        }      } else { /* Unicode not active */        switch (c0) {        case GUI_UC_STARTCHAR: UCActive = 1; break;        case '\n': return Len;        case '\r': return Len;        }      }      Len++;    }  }#else  for (;Len<MaxLen; Len++) {    U8 Data = *(U8*)s++;    if ((Data == 0) || (Data == '\n'))      break;  }#endif  return Len;}/************************************************************************       "GET"   routines    (information retrieval)************************************************************************These routines all return a value like selected font, current displayposition in x/y direction, window size in x/y direction,font size and matrix in x/y.The routines prefixed with GUI_ can be called from the applicationprogram or emWin internally, while the routines without that prefixare not supposed to be called from outside emWin.The main reason is that GUI_LOCK has to be called before thesevalues can be reliably retrieved in a multitasking environment.*//*------------------------------------------------------------------  GUI_GetYAdjust  --- returns adjustment in vertical (Y) direction                  The return value needs to be subtracted from                  the y-position of the character*/int GUI_GetYAdjust(void) {  switch (GUI_Context.TextAlign&GUI_TA_VERTICAL) {	case GUI_TA_BOTTOM:		return GUI_Context.pAFont->YSize-1;	case GUI_TA_VCENTER:		return GUI_Context.pAFont->YSize/2;	case GUI_TA_BASELINE:		return GUI_Context.pAFont->YSize/2;	}  return 0;}/*        *******************************************        *                                         *        *        Get Font Spacing routines        *        *                                         *        ********************************************/int GUI_GetFontDistY(void) {  int r;  GUI_LOCK();  r = GUI_Context.pAFont->YDist * GUI_Context.pAFont->YMag;  GUI_UNLOCK();  return r;}/*        *******************************************        *                                         *        *        Get Char spacing routines        *        *                                         *        ********************************************/int GUI_GetCharDistX(U16 c) {  int r;  GUI_LOCK();  r = GUI_Context.pAFont->pfGetCharDistX(c);  GUI_UNLOCK();  return r;}/*      *********************************      *                               *      *       Linefeed                *      *                               *      **********************************/void GUI_DispNextLine(void) {  GUI_Context.DispPosY +=GUI_GetFontDistY();  GUI_Context.DispPosX = GUI_Context.LBorder;}/*        ************************************************************        *                                                          *        *             Set the write position                       *        *                                                          *        ************************************************************Sets the write position. The routines routine 1 if it is clear thatthe current write position is in an area outside the current windowand will therefor not be written.*/static char _GotoY(int y) {  GUI_Context.DispPosY = y;  return 0;}static char _GotoX(int x) {  GUI_Context.DispPosX = x;  return 0;}char GUI_GotoY(int y) {  char r;  GUI_LOCK();  r = _GotoY(y);  GUI_UNLOCK();  return r;}char GUI_GotoX(int x) {  char r;  GUI_LOCK();  r = _GotoX(x);  GUI_UNLOCK();  return r;}char GUI_GotoXY(int x, int y) {  char r;  GUI_LOCK();  r  = GUI_GotoX(x);  r |= GUI_GotoY(y);  GUI_UNLOCK();  return r;}/***********************************************************                Display line**********************************************************/void GL_DispLine(const char GUI_FAR *s, int Len, const GUI_RECT *pRect) {  /*    Check if we have anything to do at all ...    If the window manager has already set the clipping rect, it does not    make sense to due this. So it makes sense only if    a) The window manager is not used (-> Configuration)      or    b) The window manager is inactive (-> Memory device active)  */  if (GUI_Context.pClipRect_HL) {    if (GUI_RectsIntersect(GUI_Context.pClipRect_HL, pRect) == 0)      return;  }  if (GUI_Context.pAFont->pafEncode) {    GUI_Context.pAFont->pafEncode->pfDispLine(s, Len);    return;  }#if (GUI_SUPPORT_UNICODE)  {    U8 c0;    char UCActive=0;    while (--Len >=0) {      c0=*(U8*)s++;      if (UCActive) {        if (c0 == GUI_UC_ENDCHAR)          UCActive = 0;        else {          U8  c1 = *(U8*)s++;          Len--;          GL_DispChar (GUI_DB2UC(c0, c1));        }      } else { /* Unicode not active */        if (c0 == GUI_UC_STARTCHAR)          UCActive = 1;        else          GL_DispChar(c0);      }    }  }#else  {    while (--Len >=0) {      GL_DispChar(*(U8*)s++);    }  }#endif}void GUI__DispLine(const char GUI_FAR *s, int Len, const GUI_RECT* pr) {  GUI_RECT r;  r = *pr;  #if GUI_WINSUPPORT  WM_ADDORG(r.x0,r.y0);  WM_ADDORG(r.x1,r.y1);  WM_ITERATE_START(&r) {  #endif     GUI_Context.DispPosX = r.x0;     GUI_Context.DispPosY = r.y0;  /* Do the actual drawing via routine call. */     GL_DispLine(s, Len, &r);  #if GUI_WINSUPPORT  } WM_ITERATE_END();  WM_SUBORG(GUI_Context.DispPosX, GUI_Context.DispPosY);  #endif}/**********************************************************************                Display String***********************************************************************/void GUI_DispString(const char GUI_FAR *s) {  int xAdjust, yAdjust, xOrg;  int FontSizeY;  if (!s)    return;  GUI_LOCK();  FontSizeY = GUI_Context.pAFont->YDist;  xOrg = GUI_Context.DispPosX; /* Adjust vertical position */  yAdjust = GUI_GetYAdjust();  GUI_Context.DispPosY -= yAdjust;  for (; *s; s++) {    GUI_RECT r;    int LineLen= GUI__GetLineLen(s,0x7fff);    int xLineSize = GUI_GetLineDistX(s, LineLen);  /* Check if x-position needs to be changed due to h-alignment */    switch (GUI_Context.TextAlign & GUI_TA_HORIZONTAL) {     case GUI_TA_CENTER: xAdjust= xLineSize/2; break;    case GUI_TA_RIGHT:  xAdjust= xLineSize; break;    default:            xAdjust= 0;    }    r.x0 = GUI_Context.DispPosX -= xAdjust;    r.x1 = r.x0 + xLineSize-1;        r.y0 = GUI_Context.DispPosY;    r.y1 = r.y0 + FontSizeY-1;        GUI__DispLine(s, LineLen, &r);    GUI_Context.DispPosY = r.y0;    s += LineLen;    if ((*s=='\n') || (*s=='\r')) {      switch (GUI_Context.TextAlign & GUI_TA_HORIZONTAL) {       case GUI_TA_CENTER:      case GUI_TA_RIGHT:        GUI_Context.DispPosX = xOrg;        break;      default:        GUI_Context.DispPosX = GUI_Context.LBorder;        break;      }      if (*s=='\n')        GUI_Context.DispPosY += GUI_GetFontDistY();    } else {      GUI_Context.DispPosX = r.x0+xLineSize;    }    if (*s==0)    /* end of string (last line) reached ? */      break;  }  GUI_Context.DispPosY += yAdjust;  GUI_Context.TextAlign &= ~GUI_TA_HORIZONTAL;  GUI_UNLOCK();}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品香蕉一区二区三区| 一卡二卡欧美日韩| 欧美一个色资源| 欧美精品精品一区| 欧美精品高清视频| 欧美丰满高潮xxxx喷水动漫| 在线观看91av| 日韩一区二区免费高清| 日韩视频一区二区| 精品久久人人做人人爽| 久久日韩粉嫩一区二区三区| 国产日本欧美一区二区| 国产精品午夜电影| 尤物视频一区二区| 日韩国产在线观看一区| 久久疯狂做爰流白浆xx| 国产成人午夜精品影院观看视频| 成人av在线一区二区三区| 不卡一区在线观看| 欧美日韩在线播放| 精品国产99国产精品| 久久免费看少妇高潮| 日韩理论片一区二区| 亚洲高清免费观看高清完整版在线观看| 亚洲电影在线免费观看| 久久精品国产**网站演员| 国产91精品一区二区麻豆网站| 91小视频在线| 欧美一级片在线看| 欧美国产精品一区| 午夜伊人狠狠久久| 国产99久久精品| 欧美性大战久久久久久久| 久久奇米777| 亚洲电影在线播放| 国产91对白在线观看九色| 在线观看不卡视频| 久久免费看少妇高潮| 亚洲影视在线播放| 国产高清视频一区| 欧美一区二区三区婷婷月色| 中文字幕高清一区| 蜜桃av一区二区三区| 色综合久久88色综合天天免费| 欧美大尺度电影在线| 樱桃视频在线观看一区| 国产剧情一区二区三区| 欧美日韩不卡一区| 中文字幕亚洲视频| 国产老肥熟一区二区三区| 欧美久久久久久蜜桃| 自拍偷拍亚洲综合| 国产成人免费av在线| 欧美一区二区视频在线观看2020| 亚洲欧洲日韩av| 韩国v欧美v日本v亚洲v| 欧美日韩和欧美的一区二区| 国产精品乱码人人做人人爱| 极品美女销魂一区二区三区 | 丁香网亚洲国际| 69久久99精品久久久久婷婷 | 日韩中文字幕麻豆| 不卡电影免费在线播放一区| 2023国产精品视频| 日本亚洲电影天堂| 欧美日韩国产精品成人| 亚洲视频一区二区在线| 99久精品国产| 亚洲欧洲成人精品av97| 国产69精品久久久久777| 精品国产一区二区精华| 麻豆免费精品视频| 日韩久久久精品| 日本特黄久久久高潮| 91精品国产综合久久久久久久| 欧美日韩mp4| 日韩欧美视频在线| 午夜av一区二区三区| 欧美午夜宅男影院| 午夜精品在线看| 欧美精品久久99| 水野朝阳av一区二区三区| 欧美日韩国产片| 亚洲6080在线| 日韩一区二区精品| 久久精品国产在热久久| 精品va天堂亚洲国产| 国产一区二区成人久久免费影院| 久久久久青草大香线综合精品| 国产河南妇女毛片精品久久久| 久久免费国产精品| www.av精品| 亚洲最新视频在线观看| 7777精品伊人久久久大香线蕉超级流畅 | 亚洲一区二区在线免费看| 国产毛片精品视频| 国产三级三级三级精品8ⅰ区| 国产在线视频一区二区三区| 久久免费看少妇高潮| 风间由美中文字幕在线看视频国产欧美| 国产精品水嫩水嫩| 欧美日韩精品一区二区在线播放| 日韩专区一卡二卡| 国产欧美日韩综合| 色婷婷av一区二区三区软件 | 欧美一级片免费看| 久久er99热精品一区二区| 久久久噜噜噜久久中文字幕色伊伊| 成人福利视频在线看| 亚洲综合色网站| 久久嫩草精品久久久久| 亚洲最大的成人av| 欧美日韩一二三| 久久国产福利国产秒拍| 国产精品久久影院| 日韩亚洲欧美成人一区| 99久久久免费精品国产一区二区| 天天亚洲美女在线视频| 欧美韩国日本综合| 欧美一二三区在线| 91豆麻精品91久久久久久| 国产精品系列在线播放| 亚洲一二三四区不卡| 国产欧美日韩另类视频免费观看| 欧美视频三区在线播放| 成人国产精品免费观看| 午夜欧美电影在线观看| 国产精品乱人伦| 久久先锋影音av鲁色资源| 欧美日韩高清一区二区| 91视频一区二区| 99riav久久精品riav| 亚洲国产精品国自产拍av| 色狠狠综合天天综合综合| 国产成人综合在线| 青青草97国产精品免费观看 | 一区二区在线观看不卡| 久久久久国产精品麻豆ai换脸| 3atv一区二区三区| 在线免费观看日本一区| 岛国精品在线播放| 日韩和的一区二区| 性做久久久久久久免费看| 一区二区三区四区中文字幕| 欧美激情在线一区二区三区| 久久综合资源网| 日韩精品在线网站| 精品欧美乱码久久久久久1区2区| 欧美嫩在线观看| 91.com视频| 色哟哟一区二区在线观看| 国产成人夜色高潮福利影视| 久久99精品久久久久久国产越南| 亚洲成av人片在线观看无码| 亚洲蜜桃精久久久久久久| 中文字幕亚洲一区二区av在线| 国产精品色一区二区三区| 欧美国产日韩a欧美在线观看| 久久精品亚洲精品国产欧美| 精品久久久久久综合日本欧美| 精品理论电影在线观看| 久久网站热最新地址| 国产喂奶挤奶一区二区三区| 国产人久久人人人人爽| 国产精品水嫩水嫩| 亚洲欧美欧美一区二区三区| 亚洲第一久久影院| 三级在线观看一区二区| 狠狠色狠狠色合久久伊人| 国产精品99久久久久久久vr| caoporn国产一区二区| 在线免费观看一区| 欧美大片在线观看一区二区| 久久综合久久99| 中文字幕制服丝袜成人av| 亚洲已满18点击进入久久| 日韩**一区毛片| 国产乱国产乱300精品| 91香蕉视频mp4| 日韩欧美一卡二卡| 亚洲欧洲日韩综合一区二区| 亚洲3atv精品一区二区三区| 国产麻豆成人传媒免费观看| 99国产精品久久久久久久久久 | 中文av一区二区| 亚洲综合一区二区三区| 美女视频一区在线观看| 懂色av中文字幕一区二区三区| 欧美在线免费观看视频| 精品电影一区二区| 国产精品网曝门| 免费在线成人网| 99久久精品久久久久久清纯| 91精品国产日韩91久久久久久| 中文字幕av资源一区| 性久久久久久久久久久久| 成人性生交大片免费看中文网站| 欧美日韩高清不卡| 亚洲欧洲制服丝袜| 国产精品一区二区久激情瑜伽 |