GUICharM.c
上传用户:zbk8730
上传日期:2017-08-10
资源大小:12168k
文件大小:5k
源码类别:

uCOS

开发平台:

C/C++

  1. /*
  2. *********************************************************************************************************
  3. *                                                uC/GUI
  4. *                        Universal graphic software for embedded applications
  5. *
  6. *                       (c) Copyright 2002, Micrium Inc., Weston, FL
  7. *                       (c) Copyright 2002, SEGGER Microcontroller Systeme GmbH
  8. *
  9. *              礐/GUI is protected by international copyright laws. Knowledge of the
  10. *              source code may not be used to write a similar product. This file may
  11. *              only be used in accordance with a license and should not be redistributed
  12. *              in any way. We appreciate your understanding and fairness.
  13. *
  14. ----------------------------------------------------------------------
  15. File        : GUIChar.C
  16. Purpose     : Implementation of memory devices
  17. ----------------------------------------------------------------------
  18. Version-Date---Author-Explanation
  19. ----------------------------------------------------------------------
  20. */
  21. #include <stddef.h>           /* needed for definition of NULL */
  22. #include "GUI_Private.H"
  23.  
  24. /*
  25.       ***********************************************************
  26.       *                                                         *
  27.       *       Monospaced Font                                   *
  28.       *                                                         *
  29.       ***********************************************************
  30. This is the routine that displays a character. It is used by all
  31. other routines which display characters as a subroutine.
  32. Parameters:     c       character to display
  33. */
  34. void GUIMONO_DispChar(U16P c) {
  35.   int c0, c1;
  36.   U8 * pd;
  37.   int x = GUI_Context.DispPosX;
  38.   int y = GUI_Context.DispPosY;
  39. /* do some checking if drawing is actually necessary ... */
  40.   const GUI_FONT_MONO* pMono = GUI_Context.pAFont->p.pMono;
  41.   unsigned int FirstChar = pMono->FirstChar;
  42.   /* translate character into 2 characters to display : c0,c1
  43.      Check if regular character first. */
  44.   if ((c >= (U16P)FirstChar) &&(c <= (U16P)pMono->LastChar)) {
  45.     pd = (U8*)pMono->pData;
  46.     c0 = ((int)c) - FirstChar;
  47.     c1 = -1;
  48.   } else {
  49.    /* Check if character is in translation table */
  50.     GUI_FONT_TRANSINFO const* pti = pMono->pTrans;
  51.     pd = (U8*)pMono->pTransData;
  52.     if (pti) {
  53.       FirstChar = pti->FirstChar;
  54.       if ((c >= (U16P)FirstChar) && (c <= (U16P)pti->LastChar)) {
  55.         GUI_FONT_TRANSLIST const* ptl;
  56.         c -= pti->FirstChar;
  57.         ptl = pti->pList;
  58.         ptl += c;
  59.         c0  = ptl->c0;
  60.         c1  = ptl->c1;
  61.       } else {
  62.         c0 = c1 = -1;
  63.       }
  64.     } else {
  65.       c0 = c1 = -1;
  66.     }
  67.   }
  68. /*
  69.    Draw first character if it is valid
  70. */
  71.   if (c0!=-1) {
  72.     int BytesPerChar = GUI_Context.pAFont->YSize*pMono->BytesPerLine;
  73.     GUI_DRAWMODE DrawMode;
  74.     int XSize = pMono->XSize;
  75.     int YSize = GUI_Context.pAFont->YSize;
  76. /* Select the right drawing mode */
  77.     DrawMode = GUI_Context.TextMode;
  78. /* call drawing routine */
  79.     {
  80.       U8 OldMode = LCD_SetDrawMode(DrawMode);
  81.       LCD_DrawBitmap( x, y,
  82.                          XSize, YSize,
  83.                          GUI_Context.pAFont->XMag,  GUI_Context.pAFont->YMag,
  84.                          1,     /* Bits per Pixel */
  85.                          pMono->BytesPerLine,
  86.                          pd + c0* BytesPerChar,
  87.                          NULL  /* no palette means default palette */
  88.                          );
  89.       if (c1 != -1) {
  90.         LCD_SetDrawMode(DrawMode | LCD_DRAWMODE_TRANS);
  91.         LCD_DrawBitmap( x, y,
  92.                            XSize, YSize,
  93.                            GUI_Context.pAFont->XMag,  GUI_Context.pAFont->YMag,
  94.                            1,     /* Bits per Pixel */
  95.                            pMono->BytesPerLine,
  96.                            pd + c1* BytesPerChar,
  97.                            NULL  /* no palette means default palette */
  98.                            );
  99.       }
  100.       /* Fill empty pixel lines */
  101.       if (GUI_Context.pAFont->YDist > GUI_Context.pAFont->YSize) {
  102.         int YMag = GUI_Context.pAFont->YMag;
  103.         int YDist = GUI_Context.pAFont->YDist * YMag;
  104.         int YSize = GUI_Context.pAFont->YSize * YMag;
  105.         if (DrawMode != LCD_DRAWMODE_TRANS) {
  106.           LCD_SetDrawMode(DrawMode ^ LCD_DRAWMODE_REV);  /* Reverse so we can fill with BkColor */
  107.           LCD_FillRect(x, y + YSize, x + XSize, y + YDist);
  108.         }
  109.       }
  110.       LCD_SetDrawMode(OldMode);
  111.     } 
  112.   }
  113.   GUI_Context.DispPosX+=pMono->XDist;
  114. }
  115. int GUIMONO_GetCharDistX(U16P c) {
  116.   const GUI_FONT_MONO* pMono = GUI_Context.pAFont->p.pMono;
  117.   GUI_USE_PARA(c);
  118.   return pMono->XDist;
  119. }
  120. void GUIMONO_GetFontInfo(void* pFont, GUI_FONTINFO* pfi) {
  121.   GUI_USE_PARA(pFont);
  122.   pfi->Flags = GUI_FONTINFO_FLAG_MONO;
  123. }
  124. char GUIMONO_IsInFont(void* pFont, U16 c) {
  125.   const GUI_FONT_MONO* pMono = ((GUI_FONT*)pFont)->p.pMono;
  126.   unsigned int FirstChar = pMono->FirstChar;
  127.   /* Check if regular character first. */
  128.   if ((c >= (U16P)FirstChar) &&(c <= (U16P)pMono->LastChar)) {
  129.     return 1;  /* Yes, we have it ! */
  130.   } else {
  131.    /* Check if character is in translation table */
  132.     GUI_FONT_TRANSINFO const* pti = pMono->pTrans;
  133.     if (pti) {
  134.       if ((c >= pti->FirstChar) && (c <= pti->LastChar)) {
  135.         return 1;  /* Yes, we have it ! */
  136.       }
  137. }
  138. }
  139.   return 0;  /* No, we can not display this character */
  140. }