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

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

?? guichar.c

?? uCGUI
?? C
字號(hào):
/*************************************************************************************************************
                                                   uC/GUI
                                               嵌入式通用圖形軟件
File        : GUIChar.C
Purpose     : Implementation of character and string services
************************************************************************************************************/
#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') 
  {
      if(c0&0x80&&(I(U8*)s)&0x80
	  {
		  char hz[3];
		  hz[0]=c0;
		  hz[1]=*(U8*)s;
		  hz[2]=0;
		  WriteHz(0,0,hz,0);
		  s++;
	  }

	GUI_Context.pAFont->pfDispChar(c);	
  }
  }
}

*/


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 string
Note: The return value can be used as offset into the
string, 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 display
position 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 application
program or emWin internally, while the routines without that prefix
are not supposed to be called from outside emWin.
The main reason is that GUI_LOCK has to be called before these
values 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 that
the current write position is in an area outside the current window
and 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();
}



?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
精品sm捆绑视频| 欧洲一区二区三区在线| 欧美精品高清视频| 国产免费观看久久| 色婷婷综合久久久中文字幕| 精品久久久久久久久久久久久久久| 国产精品久久久久久久久快鸭| 美国毛片一区二区| 欧美网站大全在线观看| 1区2区3区国产精品| 成人丝袜18视频在线观看| 久久免费美女视频| 日韩视频在线你懂得| av不卡免费在线观看| 久久国产精品99精品国产| 亚洲人成网站影音先锋播放| 久久久久久久久伊人| 日韩欧美一二区| 5月丁香婷婷综合| 欧美性xxxxxxxx| 97久久超碰国产精品电影| 国产精品一区二区视频| 日av在线不卡| 日韩av一二三| 午夜精品久久久久影视| 亚洲精品成人在线| 中文字幕一区不卡| 国产精品日产欧美久久久久| 精品久久国产字幕高潮| 91精品国产一区二区| 欧美日韩不卡在线| 欧美三级视频在线| 欧美视频三区在线播放| 色婷婷国产精品久久包臀| 国产91精品一区二区| 国产在线观看一区二区| 精品午夜一区二区三区在线观看| 秋霞电影一区二区| 免费人成黄页网站在线一区二区| 亚洲午夜日本在线观看| 亚洲综合免费观看高清完整版| 亚洲精品中文字幕在线观看| 亚洲视频你懂的| 亚洲黄一区二区三区| 曰韩精品一区二区| 天天影视网天天综合色在线播放| 亚洲一区免费视频| 天天综合色天天综合色h| 日韩激情一二三区| 久久国产生活片100| 九九精品视频在线看| 国产精品自拍在线| 成人小视频免费观看| 91原创在线视频| 日本二三区不卡| 欧美三级一区二区| 欧美成人伊人久久综合网| 日一区二区三区| 亚洲欧洲无码一区二区三区| 国产精品久久久久久久久免费桃花 | 中文一区一区三区高中清不卡| 91电影在线观看| 日本高清不卡一区| 欧美性一级生活| 成人免费高清在线观看| 色婷婷精品大在线视频| 亚洲乱码精品一二三四区日韩在线| 欧美日本不卡视频| 欧美成人vr18sexvr| 久久亚洲春色中文字幕久久久| 国产日韩综合av| 亚洲免费在线电影| 欧美aaaaa成人免费观看视频| 蜜乳av一区二区三区| 国产在线精品不卡| 色乱码一区二区三区88| 欧美一区二区视频观看视频| 国产亚洲一区字幕| 一区二区高清免费观看影视大全| 天堂一区二区在线免费观看| 国产毛片一区二区| 欧美亚洲日本一区| 26uuu色噜噜精品一区二区| 日韩一区在线免费观看| 免费不卡在线观看| 91丨porny丨最新| 精品国产乱码91久久久久久网站| 国产精品久久久久婷婷二区次| 亚洲电影一区二区三区| 国产福利一区二区三区| 欧美日韩一级大片网址| 国产精品你懂的在线欣赏| 天天亚洲美女在线视频| 成人18视频日本| 日韩精品一区二区三区三区免费| 亚洲色图自拍偷拍美腿丝袜制服诱惑麻豆| 日本不卡123| 91麻豆自制传媒国产之光| 精品国产伦理网| 午夜精品久久久久影视| 97精品久久久午夜一区二区三区 | 日韩经典中文字幕一区| 岛国一区二区三区| 日韩精品一区二| 午夜伊人狠狠久久| 91在线精品一区二区三区| 26uuu国产一区二区三区| 亚洲一区二区三区影院| 99视频精品在线| 久久人人爽爽爽人久久久| 538prom精品视频线放| 国产调教视频一区| 91丝袜美女网| 国产欧美综合色| 国产乱国产乱300精品| xvideos.蜜桃一区二区| 毛片av一区二区| 91精品久久久久久蜜臀| 首页国产欧美日韩丝袜| 91精品国产综合久久精品性色| 亚洲黄色免费网站| 欧美日韩国产天堂| 欧美亚洲免费在线一区| 国产欧美精品在线观看| 精品一区二区三区久久久| 欧美精品久久久久久久久老牛影院| 亚洲精品中文字幕乱码三区| yourporn久久国产精品| 国产精品视频第一区| 国产乱对白刺激视频不卡| 精品少妇一区二区三区日产乱码| 日韩电影一区二区三区| 欧美一区二区在线视频| 日韩有码一区二区三区| 欧美巨大另类极品videosbest| 亚洲国产精品久久艾草纯爱| 欧美性猛片xxxx免费看久爱| 一区二区三区资源| 欧美自拍偷拍一区| 亚洲一二三四区| 欧美日韩成人一区二区| 日韩vs国产vs欧美| 日韩欧美一级特黄在线播放| 青青青伊人色综合久久| 日韩精品中文字幕一区| 寂寞少妇一区二区三区| 久久久精品国产99久久精品芒果| 国产黄色精品网站| 国产精品第13页| 在线亚洲高清视频| 日本亚洲视频在线| 国产婷婷一区二区| 99久久伊人精品| 亚洲午夜免费视频| 精品国产一区二区三区久久久蜜月 | 精品在线播放午夜| 久久老女人爱爱| 成人在线视频首页| 一区二区三区四区激情| 精品视频一区 二区 三区| 性做久久久久久| 精品91自产拍在线观看一区| 国产91综合网| 亚洲最色的网站| 日韩三级视频在线看| 丁香五精品蜜臀久久久久99网站| 国产精品美女一区二区在线观看| 色天天综合色天天久久| 青青草国产成人av片免费| 久久综合五月天婷婷伊人| 99久久综合狠狠综合久久| 亚洲在线免费播放| 26uuu精品一区二区在线观看| 中文字幕在线一区免费| 中文字幕亚洲不卡| 亚洲国产成人高清精品| 国产91精品入口| 成人三级在线视频| 91毛片在线观看| 欧美一卡二卡在线观看| 久久久久久免费网| 国产色91在线| 尤物视频一区二区| 亚洲一区二区三区影院| 轻轻草成人在线| 成人一级视频在线观看| 懂色av一区二区夜夜嗨| 在线不卡免费欧美| 91黄视频在线| 国产一区二区三区电影在线观看| 亚洲欧美日韩系列| 精品理论电影在线观看| 日本大香伊一区二区三区| 国产一区二区免费看| 亚洲午夜国产一区99re久久| 欧美激情一区二区三区全黄| 3d动漫精品啪啪一区二区竹菊| 不卡区在线中文字幕| 免费观看日韩av| 亚洲综合久久久久|