修复列表项目总数不足以填充可视区域时,程序内存非法访问崩溃的问题。

(cherry picked from commit 1a7fc9f36d)
This commit is contained in:
Polarix 2025-06-30 09:56:39 +08:00
parent cf7eaf257f
commit 1771f85791

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);
}
}