Compare commits

...

3 Commits

Author SHA1 Message Date
独角戏
6c62279ed1
Pre Merge pull request !10 from 独角戏/Develope 2025-06-30 02:03:11 +00:00
Polarix
1771f85791 修复列表项目总数不足以填充可视区域时,程序内存非法访问崩溃的问题。
(cherry picked from commit 1a7fc9f36d)
2025-06-30 10:03:08 +08:00
gaoxiao
8c393854a7 1.修复刷新函数空指针导致的异常。 2022-09-09 16:53:35 +08:00
2 changed files with 15 additions and 4 deletions

View File

@ -168,7 +168,6 @@ void SGUI_ItemsBase_Repaint(SGUI_SCR_DEV* pstDeviceIF, SGUI_ITEMS_BASE* pstObj)
SGUI_ITEMS_ITEM* pstPaintingItem;
SGUI_CSZSTR cszItemText;
SGUI_INT iItemPosY;
void* pVisiEndItem;
/*----------------------------------*/
/* Process */
@ -220,13 +219,20 @@ void SGUI_ItemsBase_Repaint(SGUI_SCR_DEV* pstDeviceIF, SGUI_ITEMS_BASE* pstObj)
/* Paint all visible item. */
pstPaintingItem = ITEMS_VISIBLE_START_ITEM(pstObj);
iItemPosY = pstObj->stLayout.iY + pstObj->iItemPaintOffset;
pVisiEndItem = ITEMS_VISIBLE_END_ITEM(pstObj) ? ITEMS_VISIBLE_END_ITEM(pstObj)->pstNext : NULL;
while((pstPaintingItem != pVisiEndItem) && (NULL != pstPaintingItem))
while(NULL != pstPaintingItem)
{
cszItemText = (NULL == pstPaintingItem->szVariableText) ? (pstPaintingItem->cszLabelText) : (pstPaintingItem->szVariableText);
SGUI_Basic_FillRectangleArea(pstDeviceIF, pstObj->stLayout.iX, iItemPosY, pstObj->stLayout.iWidth, ITEM_HEIGHT(pstObj->pstFontRes), pstPaintingItem==ITEMS_SENECT_ITEM(pstObj)?SGUI_COLOR_FRGCLR:SGUI_COLOR_BKGCLR);
SGUI_Text_DrawText(pstDeviceIF, cszItemText, pstObj->pstFontRes, pstObj->stLayout.iX, iItemPosY + ITEM_EDGE_WIDTH, pstPaintingItem==ITEMS_SENECT_ITEM(pstObj)?SGUI_DRAW_REVERSE:SGUI_DRAW_NORMAL);
pstPaintingItem = pstPaintingItem->pstNext;
if(ITEMS_VISIBLE_END_ITEM(pstObj))
{
if(pstPaintingItem == ITEMS_VISIBLE_END_ITEM(pstObj)->pstNext)
{
/* ALl visible items paint done. */
break;
}
}
iItemPosY += ITEM_HEIGHT(pstObj->pstFontRes);
}
}

View File

@ -128,7 +128,12 @@ HMI_ENGINE_RESULT HMI_StartEngine(const void* pstParameters)
if(NULL != pstStartScreen->pstActions->Prepare)
{
eProcessResult = pstStartScreen->pstActions->Prepare(g_pstActivedEngineObject->Interface, pstParameters);
g_pstActivedEngineObject->Interface->fnSyncBuffer();
if( (NULL != g_pstActivedEngineObject->Interface) &&
(NULL != g_pstActivedEngineObject->Interface->fnSyncBuffer))
{
g_pstActivedEngineObject->Interface->fnSyncBuffer();
}
}
}
}