TEXT widget does not draw text

    This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

    • TEXT widget does not draw text

      ho have a custom widget that is a window whit a TEXT widget child. here is the source code:

      C Source Code

      1. #include "CogWheelWidget.h"
      2. #include <string.h>
      3. #include "GUI.h"
      4. #include "WM.h"
      5. #include "TEXT.h"
      6. #include "GuiLocal.h"
      7. static GUI_CONST_STORAGE unsigned long _acCogWheel[] = {
      8. 0xFF000000, 0xFF000000, 0xF7FF0000, 0xD1FF0000, 0xFF000000, 0x74FF0000, 0x74FF0000, 0xFF000000, 0xD1FF0000, 0xF7FF0000, 0xFF000000, 0xFF000000,
      9. 0xFF000000, 0xFF000000, 0xC7FF0000, 0x07FF0000, 0xD0FF0000, 0x4FFF0000, 0x4FFF0000, 0xD0FF0000, 0x07FF0000, 0xC7FF0000, 0xFF000000, 0xFF000000,
      10. 0xF7FF0000, 0xC7FF0000, 0xFDFF0000, 0x2AFF0000, 0x00FF0000, 0x00FF0000, 0x00FF0000, 0x00FF0000, 0x2AFF0000, 0xFDFF0000, 0xC7FF0000, 0xF7FF0000,
      11. 0xD1FF0000, 0x06FF0000, 0x2AFF0000, 0x00FF0000, 0x34FF0000, 0x99FF0000, 0x99FF0000, 0x33FF0000, 0x00FF0000, 0x2AFF0000, 0x06FF0000, 0xD1FF0000,
      12. 0xFF000000, 0xD0FF0000, 0x01FF0000, 0x34FF0000, 0xFAFF0000, 0xFF000000, 0xFF000000, 0xFAFF0000, 0x33FF0000, 0x01FF0000, 0xD0FF0000, 0xFF000000,
      13. 0x75FF0000, 0x4EFF0000, 0x00FF0000, 0x99FF0000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0x98FF0000, 0x00FF0000, 0x4EFF0000, 0x75FF0000,
      14. 0x75FF0000, 0x4EFF0000, 0x00FF0000, 0x99FF0000, 0xFF000000, 0xFF000000, 0xFF000000, 0xFF000000, 0x98FF0000, 0x00FF0000, 0x4EFF0000, 0x75FF0000,
      15. 0xFF000000, 0xD0FF0000, 0x01FF0000, 0x33FF0000, 0xFAFF0000, 0xFF000000, 0xFF000000, 0xFAFF0000, 0x32FF0000, 0x01FF0000, 0xD0FF0000, 0xFF000000,
      16. 0xD1FF0000, 0x06FF0000, 0x2AFF0000, 0x00FF0000, 0x33FF0000, 0x98FF0000, 0x98FF0000, 0x32FF0000, 0x00FF0000, 0x2AFF0000, 0x06FF0000, 0xD1FF0000,
      17. 0xF7FF0000, 0xC7FF0000, 0xFDFF0000, 0x2AFF0000, 0x00FF0000, 0x00FF0000, 0x00FF0000, 0x00FF0000, 0x2AFF0000, 0xFDFF0000, 0xC7FF0000, 0xF7FF0000,
      18. 0xFF000000, 0xFF000000, 0xC7FF0000, 0x07FF0000, 0xD0FF0000, 0x4FFF0000, 0x4FFF0000, 0xD0FF0000, 0x07FF0000, 0xC7FF0000, 0xFF000000, 0xFF000000,
      19. 0xFF000000, 0xFF000000, 0xF7FF0000, 0xD1FF0000, 0xFF000000, 0x74FF0000, 0x74FF0000, 0xFF000000, 0xD1FF0000, 0xF7FF0000, 0xFF000000, 0xFF000000
      20. };
      21. GUI_CONST_STORAGE GUI_BITMAP bmCogWheel = {
      22. 12, // xSize
      23. 12, // ySize
      24. 48, // BytesPerLine
      25. 32, // BitsPerPixel
      26. (unsigned char *)_acCogWheel, // Pointer to picture data
      27. NULL, // Pointer to palette
      28. GUI_DRAW_BMP8888
      29. };
      30. typedef struct COGWHEELWIDGET_Obj_s
      31. {
      32. TEXT_Handle hText;
      33. char strText[20];
      34. }COGWHEELWIDGET_Obj;
      35. COGWHEELWIDGET_Handle COGWHEELWIDGET_Create(int x0, int y0, int xSize, int ySize,
      36. WM_HWIN hWinParent, U32 Style, WM_CALLBACK * pfCallback)
      37. {
      38. WM_HWIN hWin;
      39. WM_CALLBACK * pfUsed;
      40. if (pfCallback)
      41. {
      42. pfUsed = pfCallback;
      43. }
      44. else
      45. {
      46. pfUsed = COGWHEELWIDGET_Callback;
      47. }
      48. hWin = WM_CreateWindowAsChild(x0, y0, xSize, ySize, hWinParent,
      49. Style, pfUsed, sizeof(COGWHEELWIDGET_Obj *));
      50. return hWin;
      51. }
      52. /* defined only to put a break point into WM_PAINT */
      53. void _cbcb(WM_MESSAGE * pMsg)
      54. {
      55. switch (pMsg->MsgId)
      56. {
      57. case WM_PAINT:
      58. TEXT_Callback(pMsg); // breakpoint here is never triggered
      59. break;
      60. default:
      61. TEXT_Callback(pMsg);
      62. break;
      63. }
      64. }
      65. void COGWHEELWIDGET_Callback(WM_MESSAGE * pMsg)
      66. {
      67. WM_HWIN hWin;
      68. hWin = pMsg->hWin;
      69. COGWHEELWIDGET_Obj *CogWheelWidgetObj;
      70. switch (pMsg->MsgId)
      71. {
      72. case MESSAGE_SETTEXT:
      73. WM_GetUserData(hWin, &CogWheelWidgetObj, sizeof(COGWHEELWIDGET_Obj *));
      74. strncpy(CogWheelWidgetObj->strText, (const char *)pMsg->Data.p, PAGE_TITLE_STRLEN); // non necessario
      75. CogWheelWidgetObj->strText[20-1] = '\0';
      76. TEXT_SetText(CogWheelWidgetObj->hText, CogWheelWidgetObj->strText);
      77. break;
      78. case WM_CREATE:
      79. {
      80. CogWheelWidgetObj = (COGWHEELWIDGET_Obj *)MALLOC(sizeof(COGWHEELWIDGET_Obj));
      81. CogWheelWidgetObj->hText = TEXT_CreateEx(159 - 50, 0, 50, 13, hWin, WM_CF_SHOW | WM_CF_MEMDEV, TEXT_CF_VCENTER | TEXT_CF_LEFT, GUI_ID_TEXT0, "");
      82. TEXT_SetTextColor(CogWheelWidgetObj->hText, GUI_BLUE);
      83. TEXT_SetBkColor(CogWheelWidgetObj->hText, GUI_BLACK);
      84. WM_SetCallback(CogWheelWidgetObj->hText, _cbcb);
      85. WM_SetUserData(hWin, &CogWheelWidgetObj, sizeof(COGWHEELWIDGET_Obj *));
      86. }
      87. break;
      88. case WM_DELETE:
      89. WM_GetUserData(hWin, &CogWheelWidgetObj, sizeof(COGWHEELWIDGET_Obj *));
      90. FREE(CogWheelWidgetObj);
      91. CogWheelWidgetObj = NULL;
      92. WM_SetUserData(hWin, &CogWheelWidgetObj, sizeof(COGWHEELWIDGET_Obj *));
      93. break;
      94. case WM_PAINT:
      95. {
      96. GUI_RECT Rect;
      97. WM_GetInsideRect(&Rect);
      98. GUI_SetBkColor(GUI_TRANSPARENT);
      99. GUI_ClearRectEx(&Rect);
      100. GUI_DrawBitmap(&bmCogWheel, WM_GetWindowSizeX(hWin) - bmCogWheel.XSize - 1, 1);
      101. }
      102. break;
      103. default:
      104. WM_DefaultProc(pMsg);
      105. }
      106. }
      107. void COGWHEELWIDGET_SetText(COGWHEELWIDGET_Handle hWin, const char *title)
      108. {
      109. WM_MESSAGE pMsgS;
      110. pMsgS.MsgId = MESSAGE_SETTEXT;
      111. pMsgS.hWin = hWin;
      112. pMsgS.Data.p = title;
      113. WM_SendMessage(hWin, &pMsgS);
      114. }
      Display All



      I tried this :

      C Source Code

      1. #include "GUI.h"
      2. #include "CogWheelWidget.h"
      3. #include "TEXT.h"
      4. #include <stdio.h>
      5. void MainTask(void)
      6. {
      7. GUI_Init();
      8. // GUI_EnableAlpha(1);
      9. GUI_SetBkColor(GUI_WHITE);
      10. GUI_Clear();
      11. COGWHEELWIDGET_Handle hWin;
      12. hWin = COGWHEELWIDGET_Create(10, 10, 60, 14, WM_HBKWIN, WM_CF_HIDE | WM_CF_HASTRANS, NULL);
      13. COGWHEELWIDGET_SetText(hWin, "gear");
      14. WM_ShowWindow(hWin);
      15. TEXT_Handle hText;
      16. hText = TEXT_CreateEx(10, 24, 60, 14, WM_HBKWIN, WM_CF_HIDE | WM_CF_HASTRANS, TEXT_CF_VCENTER | TEXT_CF_LEFT, GUI_ID_TEXT0, "");
      17. TEXT_SetBkColor(hText, GUI_TRANSPARENT);
      18. TEXT_SetTextColor(hText, GUI_BLUE);
      19. TEXT_SetText(hText, "text");
      20. WM_ShowWindow(hText);
      21. WM_PaintWindowAndDescs(WM_HBKWIN); // try but does not solve
      22. while(1)
      23. {
      24. GUI_Delay(100);
      25. }
      26. }
      Display All


      the result is:

      [img]https://s17.postimg.org/n4d0bm7i7/text_doen_not_display.png[/img]

      I cannot figure out why the TEXT widget called directly works, and, instead, the one nested into anothe window does not. It seems that WM_PAINT for the inner TEXT widget is never send.
      Where am I wrong? How to make it works?

      best regards
      Max