/*********************************************************************
*
*       GUI_SIF_GetCharDistX
*/
static int _GUI_SIF_GetCharDistX(U16P c) {
    const U8 * pCharInfo;
    U16 DistX = 0;
    pCharInfo = _GetpCharInfo(GUI_Context.pAFont, c); /* Get pointer to char info data */
    if (pCharInfo) {
        pCharInfo += 2 /* Skip XSize */;
        DistX = GUI__Read16(&pCharInfo);
    }
    return DistX;
}
Exemple #2
0
/*********************************************************************
*
*       GUI_SIF_DispChar
*/
static void _GUI_SIF_DispChar(U16P c) {
  const U8 * pData;
  const GUI_SIF_CHARINFO *pCharInfo  = (const GUI_SIF_CHARINFO *)(_GetpCharInfo(GUI_Context.pAFont, c));
  if (!pCharInfo){
    pCharInfo  = (const GUI_SIF_CHARINFO *)(_GetpCharInfo(GUI_Context.pAFont, '?'));
  }
    unsigned short x = GUI_Context.DispPosX;
    unsigned short y = GUI_Context.DispPosY;
    unsigned int width = pCharInfo->XSize ;      
    unsigned int dis = pCharInfo->XDist ;      
    unsigned int nbyteperline = pCharInfo->BytesPerLine ;              
    unsigned int addr = (unsigned int)GUI_Context.pAFont->p.pFontData + pCharInfo->OffData ;
  
  for (int i = 0; i < GUI_Context.pAFont->YSize; i++) {    
      unsigned int mask = htonlAt((void*)(addr+i*nbyteperline));    
      for(int j=0;j<width;j++){
        GUI_COLOR color = (mask & (1<<(31-j))) ?  GUI_Context.Color: GUI_Context.BkColor;
        LCD_SetPixel(x + j, y + i, color);
      }
  }
  GUI_Context.DispPosX += pCharInfo->XDist;
}
/*********************************************************************
*
*       GUI_SIF_DispChar
*/
static void _GUI_SIF_DispChar(U16P c) {
    const U8 * pCharInfo, * pData;
    pCharInfo = _GetpCharInfo(GUI_Context.pAFont, c);
    if (pCharInfo) {
        GUI_DRAWMODE DrawMode, OldDrawMode;
        GUI_SIF_CHARINFO CharInfo;
        CharInfo.XSize        = GUI__Read16(&pCharInfo);
        CharInfo.XDist        = GUI__Read16(&pCharInfo);
        CharInfo.BytesPerLine = GUI__Read16(&pCharInfo);
        GUI__Read16(&pCharInfo); /* Dummy */
        CharInfo.OffData      = GUI__Read32(&pCharInfo);
        pData = (const U8 *)GUI_Context.pAFont->p.pFontData + CharInfo.OffData;
        DrawMode = GUI_Context.TextMode;
        OldDrawMode  = LCD_SetDrawMode(DrawMode);
        LCD_DrawBitmap(GUI_Context.DispPosX, GUI_Context.DispPosY,
                       CharInfo.XSize,
                       GUI_Context.pAFont->YSize,
                       GUI_Context.pAFont->XMag,
                       GUI_Context.pAFont->YMag,
                       1,
                       CharInfo.BytesPerLine,
                       pData,
                       &LCD_BKCOLORINDEX);
        /* Fill empty pixel lines */
        if (GUI_Context.pAFont->YDist > GUI_Context.pAFont->YSize) {
            int YMag = GUI_Context.pAFont->YMag;
            int YDist = GUI_Context.pAFont->YDist * YMag;
            int YSize = GUI_Context.pAFont->YSize * YMag;
            if (DrawMode != LCD_DRAWMODE_TRANS) {
                LCD_COLOR OldColor = GUI_GetColor();
                GUI_SetColor(GUI_GetBkColor());
                LCD_FillRect(GUI_Context.DispPosX,
                             GUI_Context.DispPosY + YSize,
                             GUI_Context.DispPosX + CharInfo.XSize,
                             GUI_Context.DispPosY + YDist);
                GUI_SetColor(OldColor);
            }
        }
        LCD_SetDrawMode(OldDrawMode); /* Restore draw mode */
        GUI_Context.DispPosX += CharInfo.XDist;
    }
}
/*********************************************************************
*
*       GUI_SIF_IsInFont
*/
static char _GUI_SIF_IsInFont(const GUI_FONT GUI_UNI_PTR * pFont, U16 c) {
    const U8 * pCharInfo;
    GUI_USE_PARA(pFont);
    pCharInfo = _GetpCharInfo(GUI_Context.pAFont, c);
    return (pCharInfo) ? 1 : 0;
}