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

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. #include <stdio.h>
  29. #include <string.h>
  30. /*
  31.       ***********************************************************
  32.       *                                                         *
  33.       *       Anti-aliased drawing                              *
  34.       *                                                         *
  35.       ***********************************************************
  36. */
  37. static void Draw(int x0, int y0, int XSize, int YSize, int BytesPerLine, const U8*pData) {
  38.   int x, y;
  39.   tLCD_SetPixelAA* pfSetPixelAA;
  40.   pfSetPixelAA = (GUI_Context.TextMode && GUI_TM_TRANS) ?
  41.                  LCD_SetPixelAA : LCD_SetPixelAA_NoTrans;
  42.   for (y=0; y<YSize; y++) {
  43.     const U8*pData0 = pData;
  44.     for (x=0; x<XSize-1; x+=2) {
  45.       (*pfSetPixelAA)(x+x0,y0+y,   (*pData0)>>4); /* x0+x changed -> x+x0 to avoid problems with IAR's ICCMC80 */
  46.       (*pfSetPixelAA)(x0+x+1,y0+y, (*pData0++)&15);
  47.    }
  48.     if (XSize&1) {
  49.       (*pfSetPixelAA)(x0+x,y0+y, (*pData0)&15);
  50.     }
  51.     pData+=BytesPerLine;
  52.   }
  53. }
  54. /*
  55.       ***********************************************************
  56.       *                                                         *
  57.       *       Font handling                                     *
  58.       *                                                         *
  59.       ***********************************************************
  60. */
  61. static const GUI_FONT_PROP* GUIPROP_FindChar(const GUI_FONT_PROP* pProp, U16P c) {
  62.   for (pProp = GUI_Context.pAFont->p.pProp; pProp; pProp=(const GUI_FONT_PROP*) pProp->pNext) {
  63.     if ((c>=pProp->First) && (c<=pProp->Last))
  64.       break;
  65.   }
  66.   return pProp;
  67. }
  68. void GUIPROP_AA4_DispChar(U16P c) {
  69.   int BytesPerLine;
  70.   GUI_DRAWMODE DrawMode = GUI_Context.TextMode;
  71.   const GUI_FONT_PROP* pProp = GUIPROP_FindChar(GUI_Context.pAFont->p.pProp, c);
  72.   if (pProp) {
  73.     GUI_DRAWMODE OldDrawMode;
  74.     const GUI_CHARINFO* pCharInfo = pProp->paCharInfo+(c-pProp->First);
  75.     BytesPerLine = pCharInfo->BytesPerLine;
  76.     OldDrawMode  = LCD_SetDrawMode(DrawMode);
  77.     Draw  ( GUI_Context.DispPosX, GUI_Context.DispPosY,
  78.                        pCharInfo->XSize,
  79.                        GUI_Context.pAFont->YSize,
  80.                        BytesPerLine,
  81.                        (U8 const*)pCharInfo->pData
  82.                        );
  83.     LCD_SetDrawMode(OldDrawMode); /* Restore draw mode */
  84.     GUI_Context.DispPosX += pCharInfo->XDist;
  85.   }
  86. }
  87. int GUIPROP_AA4_GetCharDistX(U16P c) {
  88.   const GUI_FONT_PROP* pProp = GUIPROP_FindChar(GUI_Context.pAFont->p.pProp, c);
  89.   return (pProp) ? (pProp->paCharInfo+(c-pProp->First))->XSize : 0;
  90. }
  91. void GUIPROP_AA4_GetFontInfo(void*pFont, GUI_FONTINFO* pfi) {
  92.   GUI_USE_PARA(pFont);
  93.   pfi->Flags = GUI_FONTINFO_FLAG_PROP | GUI_FONTINFO_FLAG_AA4;
  94. }
  95. char GUIPROP_AA4_IsInFont(void*pFont, U16 c) {
  96.   const GUI_FONT_PROP* pProp = GUIPROP_FindChar(((GUI_FONT*)pFont)->p.pProp, c);
  97.   return (pProp==NULL) ? 0 : 1;
  98. }
  99. /* End of file */