📄 listview.txt
字号:
000154 b108 CBZ r0,|L12.346|
000156 f7fffffe BL GUI_ALLOC_Free
|L12.346|
00015a 1c64 ADDS r4,r4,#1
|L12.348|
00015c 42bc CMP r4,r7
00015e dbf3 BLT |L12.328|
000160 4648 MOV r0,r9
000162 f7fffffe BL GUI_ARRAY_Delete
000166 1c76 ADDS r6,r6,#1
|L12.360|
000168 4546 CMP r6,r8
00016a dbe6 BLT |L12.314|
00016c 4650 MOV r0,r10
00016e f7fffffe BL GUI_ARRAY_Delete
000172 4658 MOV r0,r11
000174 f7fffffe BL GUI_ARRAY_Delete
|L12.376|
000178 4628 MOV r0,r5 ;567
00017a f7fffffe BL WM_DefaultProc
00017e e77c B |L12.122|
;;;569
ENDP
AREA ||i._NotifyOwner||, CODE, READONLY, ALIGN=1
_NotifyOwner PROC
;;;336 */
;;;337 static void _NotifyOwner(WM_HWIN hObj, int Notification) {
000000 b53e PUSH {r1-r5,lr}
000002 460d MOV r5,r1
;;;338 WM_MESSAGE Msg = {0};
000004 2100 MOVS r1,#0
000006 4604 MOV r4,r0 ;337
000008 4668 MOV r0,sp
00000a 460a MOV r2,r1
00000c 460b MOV r3,r1
00000e c00e STM r0!,{r1-r3}
;;;339 WM_HWIN hOwner;
;;;340 LISTVIEW_Obj* pObj = LISTVIEW_H2P(hObj);
000010 4620 MOV r0,r4
000012 f7fffffe BL GUI_ALLOC_h2p
;;;341 hOwner = pObj->hOwner ? pObj->hOwner : WM_GetParent(hObj);
000016 f9b00080 LDRSH r0,[r0,#0x80]
00001a b910 CBNZ r0,|L13.34|
00001c 4620 MOV r0,r4
00001e f7fffffe BL WM_GetParent
|L13.34|
;;;342 Msg.MsgId = WM_NOTIFY_PARENT;
000022 2126 MOVS r1,#0x26
;;;343 Msg.Data.v = Notification;
;;;344 Msg.hWin = hObj;
000024 9100 STR r1,[sp,#0]
000026 9502 STR r5,[sp,#8]
000028 f8ad4004 STRH r4,[sp,#4]
;;;345 WM_SendMessage(hOwner, &Msg);
00002c 4669 MOV r1,sp
00002e f7fffffe BL WM_SendMessage
;;;346 }
000032 bd3e POP {r1-r5,pc}
;;;347
ENDP
AREA ||i._Paint||, CODE, READONLY, ALIGN=1
_Paint PROC
;;;147 */
;;;148 static void _Paint(LISTVIEW_Handle hObj, LISTVIEW_Obj* pObj, WM_MESSAGE* pMsg) {
000000 e92d4ff0 PUSH {r4-r11,lr}
000004 4680 MOV r8,r0
000006 b08f SUB sp,sp,#0x3c
000008 460c MOV r4,r1
00000a 4617 MOV r7,r2
;;;149 const GUI_ARRAY* pRow;
;;;150 GUI_RECT ClipRect, Rect;
;;;151 int NumRows, NumVisRows, NumColumns;
;;;152 int LBorder, RBorder, EffectSize;
;;;153 int xPos, yPos, Width, RowDistY;
;;;154 int Align, i, j, EndRow;
;;;155 /* Init some values */
;;;156 NumColumns = HEADER_GetNumItems(pObj->hHeader);
00000c f9b10028 LDRSH r0,[r1,#0x28]
000010 f7fffffe BL HEADER_GetNumItems
;;;157 NumRows = GUI_ARRAY_GetNumItems(&pObj->RowArray);
000014 9006 STR r0,[sp,#0x18]
000016 f104002a ADD r0,r4,#0x2a
00001a 900e STR r0,[sp,#0x38]
00001c f7fffffe BL GUI_ARRAY_GetNumItems
000020 4606 MOV r6,r0
;;;158 NumVisRows = _GetNumVisibleRows(hObj, pObj);
000022 4621 MOV r1,r4
000024 4640 MOV r0,r8
000026 f7fffffe BL _GetNumVisibleRows
;;;159 RowDistY = LISTVIEW__GetRowDistY(pObj);
00002a 9007 STR r0,[sp,#0x1c]
00002c 4620 MOV r0,r4
00002e f7fffffe BL LISTVIEW__GetRowDistY
;;;160 LBorder = pObj->LBorder;
000032 9002 STR r0,[sp,#8]
000034 6e20 LDR r0,[r4,#0x60]
;;;161 RBorder = pObj->RBorder;
000036 9005 STR r0,[sp,#0x14]
000038 6e60 LDR r0,[r4,#0x64]
;;;162 EffectSize = pObj->Widget.pEffect->EffectSize;
00003a 9004 STR r0,[sp,#0x10]
00003c 6a20 LDR r0,[r4,#0x20]
00003e 6941 LDR r1,[r0,#0x14]
;;;163 yPos = HEADER_GetHeight(pObj->hHeader) + EffectSize;
000040 9103 STR r1,[sp,#0xc]
000042 f9b40028 LDRSH r0,[r4,#0x28]
000046 f7fffffe BL HEADER_GetHeight
00004a 9903 LDR r1,[sp,#0xc]
00004c 1845 ADDS r5,r0,r1
;;;164 EndRow = pObj->ScrollStateV.v + (((NumVisRows + 1) > NumRows) ? NumRows : NumVisRows + 1);
00004e 9807 LDR r0,[sp,#0x1c]
000050 6ee1 LDR r1,[r4,#0x6c]
000052 1c40 ADDS r0,r0,#1
000054 42b0 CMP r0,r6
000056 dc01 BGT |L14.92|
000058 9e07 LDR r6,[sp,#0x1c]
00005a 1c76 ADDS r6,r6,#1
|L14.92|
00005c 1988 ADDS r0,r1,r6
;;;165 /* Calculate clipping rectangle */
;;;166 ClipRect = *(const GUI_RECT*)pMsg->Data.p;
00005e 9001 STR r0,[sp,#4]
000060 2208 MOVS r2,#8
000062 a80a ADD r0,sp,#0x28
000064 68b9 LDR r1,[r7,#8]
000066 f7fffffe BL __aeabi_memcpy
;;;167 GUI_MoveRect(&ClipRect, -pObj->Widget.Win.Rect.x0, -pObj->Widget.Win.Rect.y0);
00006a f9b40002 LDRSH r0,[r4,#2]
00006e 4242 RSBS r2,r0,#0
000070 f9b40000 LDRSH r0,[r4,#0]
000074 4241 RSBS r1,r0,#0
000076 a80a ADD r0,sp,#0x28
000078 f7fffffe BL GUI_MoveRect
;;;168 WM_GetInsideRectExScrollbar(hObj, &Rect);
00007c a908 ADD r1,sp,#0x20
00007e 4640 MOV r0,r8
000080 f7fffffe BL WM_GetInsideRectExScrollbar
;;;169 GUI__IntersectRect(&ClipRect, &Rect);
000084 a908 ADD r1,sp,#0x20
000086 a80a ADD r0,sp,#0x28
000088 f7fffffe BL GUI__IntersectRect
;;;170 /* Set drawing color, font and text mode */
;;;171 LCD_SetColor(pObj->Props.aTextColor[0]);
00008c 6c20 LDR r0,[r4,#0x40]
00008e f7fffffe BL LCD_SetColor
;;;172 GUI_SetFont(pObj->Props.pFont);
000092 6d20 LDR r0,[r4,#0x50]
000094 f7fffffe BL GUI_SetFont
;;;173 GUI_SetTextMode(GUI_TM_TRANS);
000098 2002 MOVS r0,#2
00009a f7fffffe BL GUI_SetTextMode
;;;174 /* Do the drawing */
;;;175 for (i = pObj->ScrollStateV.v; i < EndRow; i++) {
00009e 6ee0 LDR r0,[r4,#0x6c]
0000a0 e09f B |L14.482|
|L14.162|
;;;176 pRow = (const GUI_ARRAY*)GUI_ARRAY_GetpItem(&pObj->RowArray, i);
0000a2 4641 MOV r1,r8
0000a4 980e LDR r0,[sp,#0x38]
0000a6 f7fffffe BL GUI_ARRAY_GetpItem
;;;177 if (pRow) {
0000aa 900c STR r0,[sp,#0x30]
0000ac 2800 CMP r0,#0
0000ae d07e BEQ |L14.430|
;;;178 Rect.y0 = yPos;
0000b0 b228 SXTH r0,r5
;;;179 /* Break when all other rows are outside the drawing area */
;;;180 if (Rect.y0 > ClipRect.y1) {
0000b2 f9bd102e LDRSH r1,[sp,#0x2e]
0000b6 f8ad0022 STRH r0,[sp,#0x22] ;178
0000ba 4288 CMP r0,r1
0000bc dc78 BGT |L14.432|
;;;181 break;
;;;182 }
;;;183 Rect.y1 = yPos + RowDistY - 1;
0000be 9802 LDR r0,[sp,#8]
;;;184 /* Make sure that we draw only when row is in drawing area */
;;;185 if (Rect.y1 >= ClipRect.y0) {
0000c0 f9bd102a LDRSH r1,[sp,#0x2a]
0000c4 4428 ADD r0,r0,r5 ;183
0000c6 900d STR r0,[sp,#0x34] ;183
0000c8 1e40 SUBS r0,r0,#1 ;183
0000ca b200 SXTH r0,r0 ;183
0000cc f8ad0026 STRH r0,[sp,#0x26] ;183
0000d0 4288 CMP r0,r1
0000d2 db6e BLT |L14.434|
;;;186 int ColorIndex;
;;;187 /* Set background color */
;;;188 if (i == pObj->Sel) {
0000d4 6d61 LDR r1,[r4,#0x54]
0000d6 4541 CMP r1,r8
0000d8 d105 BNE |L14.230|
;;;189 ColorIndex = (pObj->Widget.State & WIDGET_STATE_FOCUS) ? 2 : 1;
0000da 8ce0 LDRH r0,[r4,#0x26]
0000dc 2602 MOVS r6,#2
0000de 07c0 LSLS r0,r0,#31
0000e0 d102 BNE |L14.232|
0000e2 2601 MOVS r6,#1
0000e4 e000 B |L14.232|
|L14.230|
;;;190 } else {
;;;191 ColorIndex = 0;
0000e6 2600 MOVS r6,#0
|L14.232|
;;;192 }
;;;193 LCD_SetBkColor(pObj->Props.aBkColor[ColorIndex]);
0000e8 eb040086 ADD r0,r4,r6,LSL #2
0000ec 4681 MOV r9,r0
0000ee 6b40 LDR r0,[r0,#0x34]
0000f0 f7fffffe BL LCD_SetBkColor
;;;194 /* Iterate over all columns */
;;;195 if (pObj->ShowGrid) {
0000f4 6da0 LDR r0,[r4,#0x58]
0000f6 b120 CBZ r0,|L14.258|
;;;196 Rect.y1--;
0000f8 f8bd0026 LDRH r0,[sp,#0x26]
0000fc 1e40 SUBS r0,r0,#1
0000fe f8ad0026 STRH r0,[sp,#0x26]
|L14.258|
;;;197 }
;;;198 xPos = EffectSize - pObj->ScrollStateH.v;
000102 6fa0 LDR r0,[r4,#0x78]
000104 9903 LDR r1,[sp,#0xc]
;;;199 for (j = 0; j < NumColumns; j++) {
000106 2700 MOVS r7,#0
000108 1a0d SUBS r5,r1,r0 ;198
00010a e059 B |L14.448|
|L14.268|
;;;200 Width = HEADER_GetItemWidth(pObj->hHeader, j);
00010c f9b40028 LDRSH r0,[r4,#0x28]
000110 4639 MOV r1,r7
000112 f7fffffe BL HEADER_GetItemWidth
000116 4601 MOV r1,r0
;;;201 Rect.x0 = xPos;
000118 b228 SXTH r0,r5
;;;202 /* Break when all other columns are outside the drawing area */
;;;203 if (Rect.x0 > ClipRect.x1) {
00011a f9bd202c LDRSH r2,[sp,#0x2c]
00011e f8ad0020 STRH r0,[sp,#0x20] ;201
000122 4290 CMP r0,r2
000124 dc4f BGT |L14.454|
;;;204 break;
;;;205 }
;;;206 Rect.x1 = xPos + Width - 1;
000126 1868 ADDS r0,r5,r1
000128 4682 MOV r10,r0
00012a 1e40 SUBS r0,r0,#1
00012c b200 SXTH r0,r0
;;;207 /* Make sure that we draw only when column is in drawing area */
;;;208 if (Rect.x1 >= ClipRect.x0) {
00012e f9bd1028 LDRSH r1,[sp,#0x28]
000132 f8ad0024 STRH r0,[sp,#0x24] ;206
000136 4288 CMP r0,r1
000138 db40 BLT |L14.444|
;;;209 LISTVIEW_ITEM * pItem;
;;;210 pItem = (LISTVIEW_ITEM *)GUI_ARRAY_GetpItem(pRow, j);
00013a 4639 MOV r1,r7
00013c 980c LDR r0,[sp,#0x30]
00013e f7fffffe BL GUI_ARRAY_GetpItem
000142 4605 MOV r5,r0
;;;211 if (pItem->hItemInfo) {
000144 f9b00000 LDRSH r0,[r0,#0]
000148 b150 CBZ r0,|L14.352|
;;;212 LISTVIEW_ITEM_INFO * pItemInfo;
;;;213 pItemInfo = (LISTVIEW_ITEM_INFO *)GUI_ALLOC_h2p(pItem->hItemInfo);
00014a f7fffffe BL GUI_ALLOC_h2p
00014e 4683 MOV r11,r0
;;;214 LCD_SetBkColor(pItemInfo->aBkColor[ColorIndex]);
000150 f8500026 LDR r0,[r0,r6,LSL #2]
000154 f7fffffe BL LCD_SetBkColor
;;;215 LCD_SetColor(pItemInfo->aTextColor[ColorIndex]);
000158 eb0b0086 ADD r0,r11,r6,LSL #2
00015c 68c0 LDR r0,[r0,#0xc]
;;;216 } else {
00015e e001 B |L14.356|
|L14.352|
;;;217 LCD_SetColor(pObj->Props.aTextColor[ColorIndex]);
000160 f8d90040 LDR r0,[r9,#0x40]
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -