GUIAAChar.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        : GUICharAA.C
  16. Purpose     : Display antialiased
  17. ----------------------------------------------------------------------
  18. Version-Date---Author-Explanation
  19. ----------------------------------------------------------------------
  20. 1.00.00 990922 RS     First release
  21. ----------------------------------------------------------------------
  22. Known problems or limitations with current version
  23. ----------------------------------------------------------------------
  24. Module needs cleanup and review, but is fully functional.
  25. ---------------------------END-OF-HEADER------------------------------
  26. */
  27. #include "GUI_Private.H"
  28.  
  29. #include <stdio.h>
  30. #include <string.h>
  31. /*
  32.       ***********************************************************
  33.       *                                                         *
  34.       *       Anti-aliased drawing                              *
  35.       *                                                         *
  36.       ***********************************************************
  37. */
  38. static const U8 Bit2Mask0[] = {1<<7, 1<<5, 1<<3, 1<<1};
  39. static const U8 Bit2Mask1[] = {1<<6, 1<<4, 1<<2, 1<<0};
  40. typedef void tSetPixelAA(int x, int y, U8 Intens);
  41. static void Draw(int x0, int y0, int XSize, int YSize, int BytesPerLine, const U8*pData) {
  42.     int x, y;
  43.     tSetPixelAA* pfSetPixelAA;
  44.     pfSetPixelAA = (GUI_Context.TextMode & GUI_TM_TRANS)
  45.                  ? LCD_SetPixelAA : LCD_SetPixelAA_NoTrans;
  46.   for (y=0; y<YSize; y++) {
  47.      const U8* pData0 = pData;
  48.     const U8* pData1 = pData+BytesPerLine;
  49.      for (x=0; x<XSize; x++) {
  50.         int PixelCnt=0;
  51.         int Mask0 = Bit2Mask0[x&3];
  52.         int Mask1 = Bit2Mask1[x&3];
  53.   if ((*pData0) & Mask0)
  54.     PixelCnt++;
  55.   if ((*pData0) & Mask1)
  56.     PixelCnt++;
  57.   if ((*pData1) & Mask0)
  58.     PixelCnt++;
  59.   if ((*pData1) & Mask1)
  60.     PixelCnt++;
  61.         if ((x&3) ==3) {
  62.           pData0++;
  63.           pData1++;
  64.   }
  65.         switch (PixelCnt) {
  66.         case 4: LCD_HL_DrawPixel(x0+x,y0+y);      break;
  67.         case 3: (*pfSetPixelAA) (x0+x,y0+y, 12); break;
  68.         case 2: (*pfSetPixelAA) (x0+x,y0+y, 8);  break;
  69.         case 1: (*pfSetPixelAA) (x0+x,y0+y, 4);  break;
  70.   }
  71.      }
  72.       pData+=2*BytesPerLine;
  73.   }
  74. }
  75. /*
  76.       ***********************************************************
  77.       *                                                         *
  78.       *       Font handling                                     *
  79.       *                                                         *
  80.       ***********************************************************
  81. */
  82. static const GUI_FONT_PROP* GUIPROP_FindChar(const GUI_FONT_PROP* pProp, U16P c) {
  83.   for (pProp = GUI_Context.pAFont->p.pProp; pProp; pProp=(const GUI_FONT_PROP*) pProp->pNext) {
  84.     if ((c>=pProp->First) && (c<=pProp->Last))
  85.       break;
  86.   }
  87.   return pProp;
  88. }
  89. void GUIPROPAA_DispChar(U16P c) {
  90.   int BytesPerLine;
  91.   GUI_DRAWMODE DrawMode = GUI_Context.TextMode;
  92.   const GUI_FONT_PROP* pProp = GUIPROP_FindChar(GUI_Context.pAFont->p.pProp, c);
  93.   if (pProp) {
  94.     GUI_DRAWMODE OldDrawMode;
  95.     const GUI_CHARINFO* pCharInfo = pProp->paCharInfo+(c-pProp->First);
  96.     BytesPerLine = pCharInfo->BytesPerLine;
  97.     OldDrawMode  = LCD_SetDrawMode(DrawMode);
  98.     Draw  ( GUI_Context.DispPosX, GUI_Context.DispPosY,
  99.                        (pCharInfo->XSize+1)/2,
  100.                        GUI_Context.pAFont->YSize,
  101.                        BytesPerLine,
  102.                        (U8 const*) pCharInfo->pData
  103.                        );
  104.     LCD_SetDrawMode(OldDrawMode); /* Restore draw mode */
  105.     GUI_Context.DispPosX += (pCharInfo->XDist+1)/2;
  106.   }
  107. }
  108. int GUIPROPAA_GetCharDistX(U16P c) {
  109.   int r;
  110.   const GUI_FONT_PROP* pProp = GUIPROP_FindChar(GUI_Context.pAFont->p.pProp, c);
  111.   r = (pProp) ? (pProp->paCharInfo+(c-pProp->First))->XSize : 0;
  112.   return (r+1)/2;
  113. }
  114. void GUIPROPAA_GetFontInfo(void*pFont, GUI_FONTINFO* pfi) {
  115.   GUI_USE_PARA(pFont);
  116.   pfi->Flags = GUI_FONTINFO_FLAG_PROP | GUI_FONTINFO_FLAG_AA;
  117. }
  118. char GUIPROPAA_IsInFont(void*pFont, U16 c) {
  119.   const GUI_FONT_PROP* pProp = GUIPROP_FindChar(((GUI_FONT*)pFont)->p.pProp, c);
  120.   return (pProp==NULL) ? 0 : 1;
  121. }
  122. /* End of file */