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

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        : TEXT.c
  16. Purpose     : Template for new emWin GSC widgets
  17. ---------------------------END-OF-HEADER------------------------------
  18. */
  19. #include <stdlib.h>
  20. #include <string.h>
  21. #include "TEXT.h"
  22. #include "Widget.h"
  23. #include "GUIDebug.h"
  24. #include "GUI_Private.H"
  25. #if GUI_WINSUPPORT
  26. /*********************************************************************
  27. *
  28. *       Private config defaults
  29. *
  30. **********************************************************************
  31. */
  32. /* Define default fonts */
  33. #ifndef TEXT_FONT_DEFAULT
  34.   #define TEXT_FONT_DEFAULT &GUI_Font13_1
  35. #endif
  36. /*********************************************************************
  37. *
  38. *       Object definition
  39. *
  40. **********************************************************************
  41. */
  42. typedef struct {
  43.   WM_Obj WMObj;
  44.   WM_HMEM hpText;
  45.   const GUI_FONT* pFont;
  46.   I16 Align;
  47.   #if (GUI_DEBUG_LEVEL > 1)
  48.     int DebugId;
  49.   #endif  
  50. } TEXT_Obj;
  51. /*********************************************************************
  52. *
  53. *       Static data
  54. *
  55. **********************************************************************
  56. */
  57. static const GUI_FONT * _pDefaultFont = TEXT_FONT_DEFAULT;
  58. /*********************************************************************
  59. *
  60. *       Macros for internal use
  61. *
  62. **********************************************************************
  63. */
  64. #define TEXT_ID 0x4544   /* Magic numer, should be unique if possible */
  65. #define TEXT_H2P(h) (TEXT_Obj*) WM_HMEM2Ptr(h)
  66. #ifdef _DEBUG
  67.   #define TEXT_ASSERT_IS_VALID_PTR(p) DEBUG_ERROROUT_IF(p->DebugId != TEXT_ID, "xxx.c: Wrong handle type or Object not init'ed")
  68.   #define TEXT_INIT_ID(p)   p->DebugId = TEXT_ID
  69.   #define TEXT_DEINIT_ID(p) p->DebugId = TEXT_ID+1
  70. #else
  71.   #define TEXT_ASSERT_IS_VALID_PTR(p)
  72.   #define TEXT_INIT_ID(p)
  73.   #define TEXT_DEINIT_ID(p)
  74. #endif
  75. /*********************************************************************
  76. *
  77. *       Static routines
  78. *
  79. **********************************************************************
  80. */
  81. static void _FreeAttached(TEXT_Obj* pObj) {
  82.   WM_FREEPTR(&pObj->hpText);
  83. }
  84. static void _Paint(TEXT_Handle hObj, TEXT_Obj* pObj) {
  85.   const char * s;
  86.   GUI_RECT Rect;
  87.   GUI_SetColor(GUI_BLACK);
  88.   GUI_SetFont    (pObj->pFont);
  89.   /* Fill with parents background color */
  90.   GUI_SetBkColor(WIDGET__GetBkColor(hObj));
  91.   GUI_Clear();
  92.   /* Show the text */
  93.   if (pObj->hpText) {
  94.     s = (const char*) WM_HMEM2Ptr(pObj->hpText);
  95.     GUI_SetTextMode(GUI_TM_TRANS);
  96.     WM_GetClientRect(&Rect);
  97.     GUI_DispStringInRect(s, &Rect, pObj->Align);
  98.   }
  99. }
  100. static void _Delete(TEXT_Obj* pObj) {
  101.   /* Delete attached objects (if any) */
  102.   GUI_DEBUG_LOG("TEXT: Delete() Deleting attached items");
  103.   if (pObj->hpText) {
  104.     _FreeAttached(pObj);
  105.   }
  106. }
  107. static void _TEXT_Callback (WM_MESSAGE*pMsg) {
  108.   TEXT_Handle hObj = pMsg->hWin;
  109.   TEXT_Obj* pObj = TEXT_H2P(hObj);
  110.   switch (pMsg->MsgId) {
  111.   case WM_PAINT:
  112.     GUI_DEBUG_LOG("TEXT: _Callback(WM_PAINT)n");
  113.     _Paint(hObj, pObj);
  114.     return;
  115.   case WM_DELETE:
  116.     GUI_DEBUG_LOG("TEXT: _Callback(WM_DELETE)n");
  117.     _Delete(pObj);
  118.     break;       /* No return here ... WM_DefaultProc needs to be called */
  119.   }
  120.   WM_DefaultProc(pMsg);
  121. }
  122. /*********************************************************************
  123. *
  124. *       Exported routines:  Create
  125. *
  126. **********************************************************************
  127. */
  128. /* Note: the parameters to a create function may vary.
  129.          Some widgets may have multiple create functions */
  130. TEXT_Handle TEXT_CreateAsChild (int x0, int y0, int xsize, int ysize, WM_HWIN hParent, int Id, int Flags, const char * s, int Align) {
  131.   TEXT_Handle hObj;
  132.   /* Create the window */
  133.   WM_LOCK();
  134.   GUI_USE_PARA(Id);
  135.   hObj = WM_CreateWindowAsChild(x0, y0, xsize, ysize, hParent,
  136.                        Flags, _TEXT_Callback,
  137.                        sizeof(TEXT_Obj)-sizeof(WM_Obj));
  138.   if (hObj) {
  139.     TEXT_Obj* pObj = TEXT_H2P(hObj);
  140.     /* init widget specific variables */
  141.     /* init member variables */
  142.     TEXT_INIT_ID(pObj);
  143.     {
  144.       WM_HMEM hMem = WM_ALLOC(strlen(s)+1);
  145.       if (hMem) {
  146.         strcpy((char *) WM_HMEM2Ptr(hMem), s);
  147.       }
  148.       pObj->hpText = hMem;
  149.       pObj->Align  = Align;
  150.       pObj->pFont  = _pDefaultFont;
  151.     }
  152.   } else {
  153.     GUI_DEBUG_ERROROUT_IF(hObj==0, "TEXT_Create failed")
  154.   }
  155.   WM_UNLOCK();
  156.   return hObj;
  157. }
  158. TEXT_Handle TEXT_Create      (  int x0, int y0, int xsize, int ysize, int Id, int Flags, const char * s, int Align) {
  159.   return TEXT_CreateAsChild(x0, y0, xsize, ysize, WM_HMEM_NULL, Id, Flags, s, Align);
  160. }
  161. TEXT_Handle TEXT_CreateIndirect(const GUI_WIDGET_CREATE_INFO* pCreateInfo, WM_HWIN hWinParent, int x0, int y0, WM_CALLBACK* cb) {
  162.   TEXT_Handle  hThis;
  163.   GUI_USE_PARA(cb);
  164.   hThis = TEXT_CreateAsChild(pCreateInfo->x0 + x0, pCreateInfo->y0 + y0, pCreateInfo->xSize, pCreateInfo->ySize,
  165.                              hWinParent, pCreateInfo->Id, 0, pCreateInfo->pName, pCreateInfo->Flags);
  166.   if (hThis) {
  167.     TEXT_Obj* pObj;
  168.     pObj = TEXT_H2P(hThis);
  169.     pObj->Align = pCreateInfo->Flags;
  170.   }
  171.   return hThis;
  172. }
  173. /*********************************************************************
  174. *
  175. *       Exported routines:  Various methods
  176. *
  177. **********************************************************************
  178. */
  179. void TEXT_SetDefaultFont(const GUI_FONT* pFont) {
  180.   _pDefaultFont = pFont;
  181. }
  182. const GUI_FONT* TEXT_GetDefaultFont(void) {
  183.   return _pDefaultFont;
  184. }
  185. #endif  /* #if GUI_WINSUPPORT */