/********************************************************************* * * GRAPH_DATA_XY_Create */ GRAPH_DATA_Handle GRAPH_DATA_XY_Create(GUI_COLOR Color, unsigned MaxNumItems, GUI_POINT * pItems, unsigned NumItems) { GRAPH_DATA_Handle hDataObj; WM_LOCK(); hDataObj = GUI_ALLOC_AllocZero(sizeof(GRAPH_DATA_XY_OBJ)); if (hDataObj) { GRAPH_DATA_XY_OBJ * pDataXYObj; WM_HMEM hData; int BufferSize; BufferSize = sizeof(GUI_POINT) * MaxNumItems; hData = GUI_ALLOC_AllocZero(BufferSize); if (hData && pItems && NumItems) { void * p; p = GUI_ALLOC_h2p(hData); memcpy(p, pItems, sizeof(GUI_POINT) * NumItems); } pDataXYObj = (GRAPH_DATA_XY_OBJ *)GUI_ALLOC_h2p(hDataObj); pDataXYObj->hData = hData; pDataXYObj->PenSize = 1; pDataXYObj->GraphDataObj.Color = Color; pDataXYObj->GraphDataObj.MaxNumItems = MaxNumItems; pDataXYObj->GraphDataObj.NumItems = NumItems; pDataXYObj->GraphDataObj.PaintObj.pfOnPaint = _OnPaint; pDataXYObj->GraphDataObj.PaintObj.pfOnDelete = _OnDelete; } WM_UNLOCK(); return hDataObj; }
/******************************************************************* * * _DemoSineWave */ static void _DemoSineWave(void) { PARAM Param; I16 * pStart; int t0, Cnt = 0; GUI_RECT Rect = {19, (LCD_YSIZE - 20) - YSIZE, (LCD_XSIZE - 2), (LCD_YSIZE - 21)}; GUI_HMEM hMem = GUI_ALLOC_AllocZero(405 * sizeof(I16)); GUI_SetColor(GUI_WHITE); GUI_SetBkColor(GUI_RED); GUI_ClearRect(0, 55, LCD_XSIZE, 75); GUI_SetFont(&GUI_FontComic18B_1); GUI_DispStringAt("Sine wave", 20, 55); pStart = GUI_ALLOC_h2p(hMem); _GetSineData(pStart, 405); GUI_SetFont(&GUI_Font6x8); t0 = GUI_GetTime(); while((GUI_GetTime() - t0) < 10000) { int t1, tDiff2; if (Cnt++ % 90) { Param.aY++; } else { Param.aY = pStart; } t1 = GUI_GetTime(); GUI_MEMDEV_Draw(&Rect, _Draw2, &Param, 0, 0); tDiff2 = GUI_GetTime() - t1; if (tDiff2 < 100) { GUI_Delay(100 - tDiff2); } } GUI_ALLOC_Free(hMem); }
/******************************************************************* * * _DemoRandomGraph */ static void _DemoRandomGraph(void) { PARAM Param; int tDiff, t0; GUI_RECT Rect = {19, (LCD_YSIZE - 20) - YSIZE, (LCD_XSIZE - 2), (LCD_YSIZE - 21)}; GUI_HMEM hMem = GUI_ALLOC_AllocZero((LCD_XSIZE - 20) * sizeof(I16)); GUI_SetColor(GUI_WHITE); GUI_SetBkColor(GUI_RED); GUI_ClearRect(0, 55, LCD_XSIZE, 75); GUI_SetFont(&GUI_FontComic18B_1); GUI_DispStringAt("Random graph", 20, 55); GUI_Lock(); Param.aY = GUI_ALLOC_h2p(hMem); GUI_SetFont(&GUI_Font6x8); t0 = GUI_GetTime(); while((tDiff = (GUI_GetTime() - t0)) < 10000) { int t1, tDiff2; _GetRandomData(Param.aY, tDiff, (LCD_XSIZE - 20)); t1 = GUI_GetTime(); GUI_MEMDEV_Draw(&Rect, _Draw, &Param, 0, 0); tDiff2 = GUI_GetTime() - t1; if (tDiff2 < 100) { GUI_Delay(100 - tDiff2); } } GUI_Unlock(); GUI_ALLOC_Free(hMem); }
/********************************************************************* * * TEXT_CreateEx */ TEXT_Handle TEXT_CreateEx(int x0, int y0, int xsize, int ysize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id, const char* pText) { TEXT_Handle hObj; /* Create the window */ #if TEXT_SUPPORT_TRANSPARENCY WinFlags |= WM_CF_HASTRANS; #endif WM_LOCK(); hObj = WM_CreateWindowAsChild(x0, y0, xsize, ysize, hParent, WinFlags, TEXT_Callback, sizeof(TEXT_Obj) - sizeof(WM_Obj)); if (hObj) { TEXT_Obj* pObj; WM_HMEM hMem = 0; pObj = (TEXT_Obj *)GUI_ALLOC_h2p(hObj); /* Don't use use WIDGET_H2P because WIDGET_INIT_ID() has not be called at this point */ /* init widget specific variables */ WIDGET__Init(&pObj->Widget, Id, 0); /* init member variables */ TEXT_INIT_ID(pObj); if (pText) { hMem = GUI_ALLOC_AllocZero(strlen(pText) + 1); if (hMem) { strcpy((char*) GUI_ALLOC_h2p(hMem), pText); } } pObj->hpText = hMem; pObj->Align = ExFlags; pObj->Props = TEXT__DefaultProps; } else { GUI_DEBUG_ERROROUT_IF(hObj==0, "TEXT_Create failed") } WM_UNLOCK(); return hObj; }
/********************************************************************* * * WM_CreateTimer * * Returns: 0 if failed, else != 0 * Parameters: * hWin Window handle of the window to receive the WM_TIMER message * UserId User defined Id. If not needed, use 0. * Period Number of time units (ticks) * Mode 0: one-shot * */ int WM_CreateTimer (WM_HWIN hWin, int UserId, int Period, int Mode) { int r = 0; int TimerId; GUI_HMEM hTimerLink; TIMER_LINK* pLink; WM_LOCK(); TimerId = GUI_X_CREATE_TIMER(Period, _OnTimer); if (TimerId) { hTimerLink = GUI_ALLOC_AllocZero(sizeof(TIMER_LINK)); if (hTimerLink) { pLink = (TIMER_LINK*) GUI_ALLOC_h2p(hTimerLink); /* Put new timer at beginning of the linked list */ pLink->hNext = _hFirst; if (_hFirst) { TIMER_LINK* pNext; pNext = (TIMER_LINK*) GUI_ALLOC_h2p(_hFirst); } _hFirst = hTimerLink; /* Fill in link data */ pLink->hWin = hWin; pLink->TimerId = TimerId; pLink->UserId = UserId; r = 1; /* All right, we have successfully created a new timer */ } } /* Cleanup in case of problem */ if (r == 0) { if (TimerId) { GUI_X_DELETE_TIMER(TimerId); } } WM_UNLOCK(); return r; }
static void _DemoRandomGraph(void) { PARAM Param; int tDiff, t0, Cnt = 0; GUI_RECT Rect = {19, (LCD_YSIZE - 20) - YSIZE, (LCD_XSIZE - 2), (LCD_YSIZE - 21)}; GUI_HMEM hMem = GUI_ALLOC_AllocZero((LCD_XSIZE - 20) * sizeof(I16)); _ShowText("Random graph"); Param.aY = (I16*)GUI_ALLOC_h2p(hMem); /* GUI_SetFont(&GUI_Font6x8); GUI_DispStringAt("msec/graph:", 10, 50); */ _LabelMS(); t0 = GUI_GetTime(); while(((tDiff = (GUI_GetTime() - t0)) < 10000) && !GUIDEMO_CheckCancel()) { int t1, tDiff2; _GetRandomData(Param.aY, tDiff, (LCD_XSIZE - 20)); t1 = GUI_GetTime(); GUI_MEMDEV_Draw(&Rect, _Draw, &Param, 0, GUI_MEMDEV_NOTRANS); tDiff2 = GUI_GetTime() - t1; if (tDiff2 < 100) { GUI_Delay(100 - tDiff2); } if(!((++Cnt)%10)) { _DisplayTime(tDiff2); /* GUI_GotoXY(80, 50); GUI_SetColor(GUI_WHITE); GUI_SetBkColor(GUI_RED); GUI_DispDecSpace(tDiff2, 3); */ } } GUI_ALLOC_Free(hMem); }
/********************************************************************* * * _GetpCellInfo */ static LISTVIEW_CELL_INFO* _GetpCellInfo(LISTVIEW_Handle hObj, unsigned Column, unsigned Row, unsigned int Index) { LISTVIEW_CELL_INFO* pCellInfo = 0; if (hObj) { LISTVIEW_Obj* pObj; pObj = LISTVIEW_H2P(hObj); if (Index < GUI_COUNTOF(pCellInfo->aTextColor)) { if ((Column < LISTVIEW__GetNumColumns(pObj)) && (Row < LISTVIEW__GetNumRows(pObj))) { LISTVIEW_ROW* pRow; LISTVIEW_CELL* pCell; pRow = (LISTVIEW_ROW*) GUI_ARRAY_GetpItem(&pObj->RowArray, Row); pCell = (LISTVIEW_CELL*) GUI_ARRAY_GetpItem(&pRow->CellArray, Column); if (!pCell->hCellInfo) { int i; pCell->hCellInfo = GUI_ALLOC_AllocZero(sizeof(LISTVIEW_CELL_INFO)); pCellInfo = (LISTVIEW_CELL_INFO*) GUI_ALLOC_h2p(pCell->hCellInfo); for (i = 0; i < GUI_COUNTOF(pCellInfo->aTextColor); i++) { pCellInfo->aTextColor[i] = LISTVIEW_GetTextColor(hObj, i); pCellInfo->aBkColor[i] = LISTVIEW_GetBkColor (hObj, i); } } else { pCellInfo = (LISTVIEW_CELL_INFO*) GUI_ALLOC_h2p(pCell->hCellInfo); } } } } return pCellInfo; }
/********************************************************************* * * GUI_CURSOR_Select */ const GUI_CURSOR GUI_UNI_PTR * GUI_CURSOR_Select(const GUI_CURSOR GUI_UNI_PTR * pCursor) { int AllocSize; const GUI_BITMAP GUI_UNI_PTR * pBM; const GUI_CURSOR GUI_UNI_PTR * pOldCursor; GUI_LOCK(); pOldCursor = _pCursor; if (pCursor != _pCursor) { int i; pBM = pCursor->pBitmap; i = pBM->pPal->NumEntries > 4 ? 4 : pBM->pPal->NumEntries; while (i--) { LCD_COLOR Color = *(pBM->pPal->pPalEntries + i); _ColorIndex[i] = LCD_Color2Index(Color); } _Hide(); AllocSize = pBM->XSize * pBM->YSize * sizeof(LCD_PIXELINDEX); if (AllocSize != _AllocSize) { GUI_ALLOC_Free(_hBuffer); _hBuffer = 0; } _hBuffer = GUI_ALLOC_AllocZero(AllocSize); _CursorOn = 1; _pCursor = pCursor; _CalcRect(); _Show(); } GUI_UNLOCK(); return pOldCursor; }
/********************************************************************* * * GUI_ARRAY_InsertBlankItem * * Purpose: * Inserts a blank element in a GUI_ARRAY. * * Parameters: * Index Index of the element to insert before * 0 means: Insert before first element * 1 means: Insert before second element * * Return value: * 1 if successful * 0 if failed * * Notes: * (1) Index changes * The index of all items after the one inserted will change * (Increment by 1) */ char GUI_ARRAY_InsertBlankItem(GUI_ARRAY* pThis, unsigned int Index) { GUI_ARRAY_CHECK(pThis); /* Sanity checks at higher debug levels only */ if (Index >= (unsigned)pThis->NumItems) { GUI_DEBUG_ERROROUT("GUI_ARRAY_InsertBlankItem: Illegal index"); } else { WM_HMEM hNewBuffer; hNewBuffer = GUI_ALLOC_AllocZero(sizeof(WM_HMEM) * (pThis->NumItems + 1)); if (hNewBuffer == 0) { GUI_DEBUG_ERROROUT("GUI_ARRAY_InsertBlankItem: Failed to alloc buffer"); } else { WM_HMEM *pOldBuffer; WM_HMEM *pNewBuffer; pNewBuffer = (WM_HMEM*) GUI_ALLOC_h2p(hNewBuffer); pOldBuffer = (WM_HMEM*) GUI_ALLOC_h2p(pThis->haHandle); memcpy(pNewBuffer, pOldBuffer, Index * sizeof(WM_HMEM)); memcpy(pNewBuffer + (Index + 1), pOldBuffer + Index, (pThis->NumItems - Index) * sizeof(WM_HMEM)); GUI_ALLOC_Free(pThis->haHandle); pThis->haHandle = hNewBuffer; pThis->NumItems++; return 1; /* Successfull */ } } return 0; /* Failed */ }
/********************************************************************* * * _Sort * * Purpose: * Sorts the contents of the LISTVIEW by using the qsort algorithm. * The compare function is called for each compare operation with valid * pointers to cell data of the specified column. */ static int _Sort(LISTVIEW_Handle hObj) { WM_HMEM hSortArray; SORT_OBJECT SortObject; int NumItems, NumItemsReq, i, Sel; SortObject.pObj = LISTVIEW_H2P(hObj); if (((SortObject.pObj->IsPresorted) && (SortObject.pObj->IsSorted)) || (SortObject.pObj->hSort == 0)) { return 0; } SortObject.pSort = (LISTVIEW_SORT *)GUI_ALLOC_h2p(SortObject.pObj->hSort); NumItemsReq = SortObject.pObj->RowArray.NumItems; NumItems = SortObject.pSort->SortArrayNumItems; Sel = _GetSelUnsorted(SortObject.pObj); /* Adjust number of items in sort array */ if (NumItems != NumItemsReq) { if (!SortObject.pSort->hSortArray) { hSortArray = GUI_ALLOC_AllocZero(sizeof(SORT_TYPE) * NumItemsReq); } else { hSortArray = GUI_ALLOC_Realloc(SortObject.pSort->hSortArray, sizeof(SORT_TYPE) * NumItemsReq); } if (!hSortArray) { return 1; } SortObject.pObj = LISTVIEW_H2P(hObj); SortObject.pSort = (LISTVIEW_SORT *)GUI_ALLOC_h2p(SortObject.pObj->hSort); SortObject.pSort->hSortArray = hSortArray; } SortObject.paSortArray = (SORT_TYPE *)GUI_ALLOC_h2p(SortObject.pSort->hSortArray); if (SortObject.pObj->IsPresorted) { /* Add new indices */ if (NumItems < NumItemsReq) { SortObject.pObj->ReverseSort = 0; /* Reverse sort only allowed if listview is presorted and no rows are added */ for (i = NumItems; i < NumItemsReq; i++) { *(SortObject.paSortArray + i) = i; } } } else { SortObject.pObj->ReverseSort = 0; /* Reverse sort only allowed if listview is presorted */ /* Fill with indices if not presorted */ for (i = 0; i < NumItemsReq; i++) { *(SortObject.paSortArray + i) = i; } } SortObject.pSort->SortArrayNumItems = NumItemsReq; /* Sort only if more than one item is available */ if (NumItemsReq > 1) { if (SortObject.pObj->ReverseSort) { _Reverse(&SortObject); } else { _BubbleSort(0, NumItemsReq - 1, &SortObject); } _SetSelUnsorted(hObj, SortObject.pObj, Sel); } SortObject.pObj->IsPresorted = 1; SortObject.pObj->IsSorted = 1; HEADER_SetDirIndicator(SortObject.pObj->hHeader, SortObject.pObj->SortIndex, SortObject.pSort->Reverse); return 0; }
static void _DemoOrData(void) { int i; PARAM Param; GUI_RECT Rect = {19, (LCD_YSIZE - 20) - YSIZE, (LCD_XSIZE - 2), (LCD_YSIZE - 21)}; GUI_HMEM hMem = GUI_ALLOC_AllocZero((LCD_XSIZE + 90) * sizeof(I16)); _ShowText("Several waves..."); Param.aY = (I16*)GUI_ALLOC_h2p(hMem); _GetSineData(Param.aY, LCD_XSIZE + 90); GUI_MEMDEV_Draw(&Rect, _Draw, &Param, 0, GUI_MEMDEV_NOTRANS); for (i = 0; (i < 90) && !GUIDEMO_CheckCancel(); i++) { _DrawOrData(GUI_GREEN, ++Param.aY); GUI_Delay(10); } GUI_ALLOC_Free(hMem); }
/********************************************************************* * * _CreateSortObject */ static LISTVIEW_SORT * _CreateSortObject(LISTVIEW_Handle hObj, LISTVIEW_Obj * pObj) { LISTVIEW_SORT * pSort; if (!pObj->hSort) { pObj->hSort = GUI_ALLOC_AllocZero(sizeof(LISTVIEW_SORT)); pObj = LISTVIEW_H2P(hObj); /* Restore after allocating memory */ if (!pObj->hSort) { return NULL; } } pSort = (LISTVIEW_SORT *)GUI_ALLOC_h2p(pObj->hSort); pObj->SortIndex = -1; pSort->fpFree = _Free; pSort->fpSort = _Sort; return pSort; }
/********************************************************************* * * GUI_DRAW_STREAMED_Create */ WM_HMEM GUI_DRAW_STREAMED_Create(const GUI_BITMAP_STREAM * pBitmap, int x, int y) { WM_HMEM hMem; hMem = GUI_ALLOC_AllocZero(sizeof(GUI_DRAW)); if (hMem) { GUI_DRAW* pObj; WM_LOCK(); pObj = (GUI_DRAW*)GUI_ALLOC_h2p(hMem); pObj->pConsts = &_ConstObjData; pObj->Data.pData = (const void*)pBitmap; pObj->xOff = x; pObj->yOff = y; WM_UNLOCK(); } return hMem; }
/********************************************************************* * * GUI_DRAW_SELF_Create */ WM_HMEM GUI_DRAW_SELF_Create(GUI_DRAW_SELF_CB* pfDraw, int x, int y) { WM_HMEM hMem; hMem = GUI_ALLOC_AllocZero(sizeof(GUI_DRAW)); if (hMem) { GUI_DRAW* pObj; GUI_LOCK(); pObj = (GUI_DRAW*)GUI_ALLOC_h2p(hMem); pObj->pConsts = &_ConstObjData; pObj->Data.pfDraw = pfDraw; pObj->xOff = x; pObj->yOff = y; GUI_UNLOCK(); } return hMem; }
static void _DemoSineWave(void) { PARAM Param; I16 * pStart; int t0, Cnt = 0; GUI_HMEM hMem; GUI_RECT Rect; Rect.x0 = 19; Rect.y0 = (LCD_YSIZE - 20) - _YSize; Rect.x1 = LCD_XSIZE - 2; Rect.y1 = LCD_YSIZE - 21; hMem = GUI_ALLOC_AllocZero((LCD_XSIZE + 90) * sizeof(I16)); _ShowText("Sine wave"); GUI_LOCK(); pStart = (I16*)GUI_ALLOC_h2p(hMem); GUI_UNLOCK(); /* Note: unlocking is permitted only if no further allocation is done so hMem stays valid */ _GetSineData(pStart, LCD_XSIZE + 90); /* GUI_SetFont(&GUI_Font6x8); GUI_DispStringAt("msec/graph:", 10, 50); */ _LabelMS(); t0 = GUI_GetTime(); while(((GUI_GetTime() - t0) < 10000) && !GUIDEMO_CheckCancel()) { U32 t1, tDiff2; if (Cnt % 90) { Param.aY++; } else { Param.aY = pStart; } t1 = GUI_GetTime(); GUI_MEMDEV_Draw(&Rect, _Draw2, &Param, 0, GUI_MEMDEV_NOTRANS); tDiff2 = GUI_GetTime() - t1; if (tDiff2 < 100) { GUI_Delay(100 - tDiff2); } if(!((++Cnt) % 10)) { _DisplayTime(tDiff2); /* GUI_GotoXY(80, 50); GUI_SetColor(GUI_WHITE); GUI_SetBkColor(GUI_RED); GUI_DispDecSpace(tDiff2, 3); */ } } GUI_ALLOC_Free(hMem); }
/********************************************************************* * * GUI_MEASDEV_Create */ GUI_MEASDEV_Handle GUI_MEASDEV_Create(void) { int MemSize; GUI_MEASDEV_Handle hMemDev; MemSize = sizeof(GUI_MEASDEV); hMemDev = GUI_ALLOC_AllocZero(MemSize); if (hMemDev) { GUI_MEASDEV* pDevData; GUI_LOCK(); pDevData = (GUI_MEASDEV*)GUI_ALLOC_h2p(hMemDev); pDevData->pfColor2Index = GUI_Context.pDeviceAPI->pfColor2Index; pDevData->pfIndex2Color = GUI_Context.pDeviceAPI->pfIndex2Color; GUI_MEASDEV_ClearRect(hMemDev); GUI_UNLOCK(); } else { GUI_DEBUG_WARN("GUI_MEASDEV_Create: Alloc failed"); } return hMemDev; }
/********************************************************************* * * GRAPH_SCALE_Create */ GRAPH_SCALE_Handle GRAPH_SCALE_Create(int Pos, int TextAlign, unsigned Flags, unsigned TickDist) { GRAPH_SCALE_Handle hScaleObj; WM_LOCK(); hScaleObj = GUI_ALLOC_AllocZero(sizeof(GRAPH_SCALE_OBJ)); if (hScaleObj) { GRAPH_SCALE_OBJ * pScaleObj; pScaleObj = (GRAPH_SCALE_OBJ *)GUI_ALLOC_h2p(hScaleObj); pScaleObj->Pos = Pos; pScaleObj->TextAlign = TextAlign; pScaleObj->Flags = Flags; pScaleObj->TickDist = TickDist; pScaleObj->Factor = 1; pScaleObj->Props = _Props; pScaleObj->PaintObj.pfOnPaint = _OnPaint; } WM_UNLOCK(); return hScaleObj; }
/********************************************************************* * * GUI_TIMER_Create */ GUI_TIMER_HANDLE GUI_TIMER_Create(GUI_TIMER_CALLBACK* cb, int Time, U32 Context, int Flags) { GUI_TIMER_HANDLE hObj; GUI_TIMER_Obj* pObj; GUI_LOCK(); GUI_USE_PARA(Flags); GUI_USE_PARA(Time); GUI_pfTimerExec = GUI_TIMER_Exec; { /* Alloc memory for obj */ hObj = GUI_ALLOC_AllocZero(sizeof(GUI_TIMER_Obj)); pObj = GUI_TIMER_H2P(hObj); /* init member variables */ pObj->cb = cb; pObj->Context = Context; /* Link it */ _Link(hObj); } GUI_UNLOCK(); return hObj; }
/******************************************************************* * * _DemoOrData */ static void _DemoOrData(void) { int i; PARAM Param; GUI_RECT Rect = {19, (LCD_YSIZE - 20) - YSIZE, (LCD_XSIZE - 2), (LCD_YSIZE - 21)}; GUI_HMEM hMem = GUI_ALLOC_AllocZero(405 * sizeof(I16)); GUI_SetColor(GUI_WHITE); GUI_SetBkColor(GUI_RED); GUI_ClearRect(0, 55, LCD_XSIZE, 75); GUI_SetFont(&GUI_FontComic18B_1); GUI_DispStringAt("Several waves...", 20 ,55); Param.aY = GUI_ALLOC_h2p(hMem); _GetSineData(Param.aY, 405); GUI_MEMDEV_Draw(&Rect, _Draw, &Param, 0, 0); for (i = 0; (i < 90); i++) { _DrawOrData(GUI_GREEN, ++Param.aY); GUI_Delay(10); } GUI_ALLOC_Free(hMem); }
static void _DemoSineWave(void) { PARAM Param; I16 * pStart; int t0, Cnt = 0; GUI_RECT Rect = {19, (LCD_YSIZE - 20) - YSIZE, (LCD_XSIZE - 2), (LCD_YSIZE - 21)}; GUI_HMEM hMem = GUI_ALLOC_AllocZero((LCD_XSIZE + 90) * sizeof(I16)); _ShowText("Sine wave"); pStart = (I16*)GUI_ALLOC_h2p(hMem); _GetSineData(pStart, LCD_XSIZE + 90); /* GUI_SetFont(&GUI_Font6x8); GUI_DispStringAt("msec/graph:", 10, 50); */ _LabelMS(); t0 = GUI_GetTime(); while(((GUI_GetTime() - t0) < 10000) && !GUIDEMO_CheckCancel()) { int t1, tDiff2; if (Cnt % 90) { Param.aY++; } else { Param.aY = pStart; } t1 = GUI_GetTime(); GUI_MEMDEV_Draw(&Rect, _Draw2, &Param, 0, GUI_MEMDEV_NOTRANS); tDiff2 = GUI_GetTime() - t1; if (tDiff2 < 100) { GUI_Delay(100 - tDiff2); } if(!((++Cnt) % 10)) { _DisplayTime(tDiff2); /* GUI_GotoXY(80, 50); GUI_SetColor(GUI_WHITE); GUI_SetBkColor(GUI_RED); GUI_DispDecSpace(tDiff2, 3); */ } } GUI_ALLOC_Free(hMem); }
/********************************************************************* * * TEXT_CreateEx */ TEXT_Handle TEXT_CreateEx(int x0, int y0, int xsize, int ysize, WM_HWIN hParent, int WinFlags, int ExFlags, int Id, const char* pText) { TEXT_Handle hObj; /* Create the window */ #if TEXT_SUPPORT_TRANSPARENCY WinFlags |= WM_CF_HASTRANS; #endif hObj = WM_CreateWindowAsChild(x0, y0, xsize, ysize, hParent, WinFlags, _TEXT_Callback, sizeof(TEXT_Obj) - sizeof(WM_Obj)); if (hObj) { TEXT_Obj* pObj; WM_HMEM hMem = 0; WM_LOCK(); pObj = TEXT_H2P(hObj); /* init widget specific variables */ WIDGET__Init(&pObj->Widget, Id, 0); /* init member variables */ TEXT_INIT_ID(pObj); if (pText) { hMem = GUI_ALLOC_AllocZero(strlen(pText) + 1); if (hMem) { strcpy((char*) GUI_ALLOC_h2p(hMem), pText); } } pObj->hpText = hMem; pObj->Align = ExFlags; pObj->pFont = _pDefaultFont; pObj->BkColor = GUI_INVALID_COLOR; pObj->TextColor = _DefaultTextColor; WM_UNLOCK(); } else { GUI_DEBUG_ERROROUT_IF(hObj==0, "TEXT_Create failed") } return hObj; }
static void _DemoRandomGraph(void) { PARAM Param; int tDiff, t0; int Cnt = 0; GUI_HMEM hMem; GUI_RECT Rect; int lcd_xsize; int lcd_ysize; lcd_xsize = LCD_GetXSize(); lcd_ysize = LCD_GetYSize(); Rect.x0 = 19; Rect.y0 = (lcd_ysize - 20) - _YSize; Rect.x1 = lcd_xsize - 2; Rect.y1 = lcd_ysize - 21; hMem = GUI_ALLOC_AllocZero((LCD_GetXSize() - 20) * sizeof(I16)); _ShowText("Random graph"); GUI_LOCK(); Param.aY = (I16*)GUI_ALLOC_h2p(hMem); GUI_UNLOCK(); /* Note: unlocking is permitted only if no further allocation is done so hMem stays valid */ _LabelMS(); t0 = GUI_GetTime(); while(((tDiff = (GUI_GetTime() - t0)) < 10000) && !GUIDEMO_CheckCancel()) { U32 t1, tDiff2; _GetRandomData(Param.aY, tDiff, (lcd_xsize - 20)); t1 = GUI_GetTime(); GUI_MEMDEV_Draw(&Rect, _Draw, &Param, 0, GUI_MEMDEV_NOTRANS); tDiff2 = GUI_GetTime() - t1; if (tDiff2 < 100) { GUI_Delay(100 - tDiff2); } if(!((++Cnt)%10)) { _DisplayTime(tDiff2); } } GUI_ALLOC_Free(hMem); }