📄 listbox.txt
字号:
;;;974 WM_UNLOCK();
;;;975 }
;;;976 }
000060 e8bd81f0 POP {r4-r8,pc}
;;;977
ENDP
AREA ||i.LISTBOX_OwnerDraw||, CODE, READONLY, ALIGN=1
LISTBOX_OwnerDraw PROC
;;;323 */
;;;324 int LISTBOX_OwnerDraw(const WIDGET_ITEM_DRAW_INFO* pDrawItemInfo) {
000000 e92d47ff PUSH {r0-r10,lr}
000004 4604 MOV r4,r0
;;;325 switch (pDrawItemInfo->Cmd) {
000006 6840 LDR r0,[r0,#4]
000008 b330 CBZ r0,|L8.88|
00000a 2801 CMP r0,#1
00000c d00f BEQ |L8.46|
00000e 2802 CMP r0,#2
000010 d17e BNE |L8.272|
;;;326 case WIDGET_ITEM_GET_XSIZE: {
;;;327 LISTBOX_Obj* pObj;
;;;328 const GUI_FONT GUI_UNI_PTR* pOldFont;
;;;329 const char* s;
;;;330 int DistX;
;;;331 pObj = LISTBOX_H2P(pDrawItemInfo->hWin);
;;;332 pOldFont = GUI_SetFont(pObj->Props.pFont);
;;;333 s = LISTBOX__GetpString(pObj, pDrawItemInfo->ItemIndex);
;;;334 DistX = GUI_GetStringDistX(s);
;;;335 GUI_SetFont(pOldFont);
;;;336 return DistX;
;;;337 }
;;;338 case WIDGET_ITEM_GET_YSIZE: {
;;;339 LISTBOX_Obj* pObj;
;;;340 pObj = LISTBOX_H2P(pDrawItemInfo->hWin);
000012 f9b40000 LDRSH r0,[r4,#0]
000016 f7fffffe BL GUI_ALLOC_h2p
00001a 4604 MOV r4,r0
;;;341 return GUI_GetYDistOfFont(pObj->Props.pFont) + pObj->ItemSpacing;
00001c 6c80 LDR r0,[r0,#0x48]
00001e f7fffffe BL GUI_GetYDistOfFont
000022 f8b41076 LDRH r1,[r4,#0x76]
000026 4408 ADD r0,r0,r1
|L8.40|
;;;342 }
;;;343 case WIDGET_ITEM_DRAW: {
;;;344 LISTBOX_Obj* pObj;
;;;345 LISTBOX_ITEM* pItem;
;;;346 WM_HMEM hItem;
;;;347 GUI_RECT r;
;;;348 int FontDistY;
;;;349 int ItemIndex = pDrawItemInfo->ItemIndex;
;;;350 const char* s;
;;;351 int ColorIndex;
;;;352 char IsDisabled;
;;;353 char IsSelected;
;;;354 pObj = LISTBOX_H2P(pDrawItemInfo->hWin);
;;;355 hItem = GUI_ARRAY_GethItem(&pObj->ItemArray, ItemIndex);
;;;356 pItem = (LISTBOX_ITEM *)GUI_ALLOC_h2p(hItem);
;;;357 WM_GetInsideRect(&r);
;;;358 FontDistY = GUI_GetFontDistY();
;;;359 /* Calculate color index */
;;;360 IsDisabled = (pItem->Status & LISTBOX_ITEM_DISABLED) ? 1 : 0;
;;;361 IsSelected = (pItem->Status & LISTBOX_ITEM_SELECTED) ? 1 : 0;
;;;362 if (pObj->Flags & LISTBOX_SF_MULTISEL) {
;;;363 if (IsDisabled) {
;;;364 ColorIndex = 3;
;;;365 } else {
;;;366 ColorIndex = (IsSelected) ? 2 : 0;
;;;367 }
;;;368 } else {
;;;369 if (IsDisabled) {
;;;370 ColorIndex = 3;
;;;371 } else {
;;;372 if (ItemIndex == pObj->Sel) {
;;;373 ColorIndex = (pObj->Widget.State & WIDGET_STATE_FOCUS) ? 2 : 1;
;;;374 } else {
;;;375 ColorIndex = 0;
;;;376 }
;;;377 }
;;;378 }
;;;379 /* Display item */
;;;380 LCD_SetBkColor(pObj->Props.aBackColor[ColorIndex]);
;;;381 LCD_SetColor (pObj->Props.aTextColor[ColorIndex]);
;;;382 s = LISTBOX__GetpString(pObj, ItemIndex);
;;;383 GUI_SetTextMode(GUI_TM_TRANS);
;;;384 GUI_Clear();
;;;385 GUI_DispStringAt(s, pDrawItemInfo->x0 + 1, pDrawItemInfo->y0);
;;;386 /* Display focus rectangle */
;;;387 if ((pObj->Flags & LISTBOX_SF_MULTISEL) && (ItemIndex == pObj->Sel)) {
;;;388 GUI_RECT rFocus;
;;;389 rFocus.x0 = pDrawItemInfo->x0;
;;;390 rFocus.y0 = pDrawItemInfo->y0;
;;;391 rFocus.x1 = r.x1;
;;;392 rFocus.y1 = pDrawItemInfo->y0 + FontDistY - 1;
;;;393 LCD_SetColor(GUI_WHITE - pObj->Props.aBackColor[ColorIndex]);
;;;394 GUI_DrawFocusRect(&rFocus, 0);
;;;395 }
;;;396 return 0;
;;;397 }
;;;398 }
;;;399 return 0;
;;;400 }
000028 b004 ADD sp,sp,#0x10
00002a e8bd87f0 POP {r4-r10,pc}
|L8.46|
00002e f9b40000 LDRSH r0,[r4,#0] ;331
000032 f7fffffe BL GUI_ALLOC_h2p
000036 4605 MOV r5,r0 ;331
000038 6c80 LDR r0,[r0,#0x48] ;332
00003a f7fffffe BL GUI_SetFont
00003e 4606 MOV r6,r0 ;332
000040 4628 MOV r0,r5 ;333
000042 68a1 LDR r1,[r4,#8] ;333
000044 f7fffffe BL LISTBOX__GetpString
000048 f7fffffe BL GUI_GetStringDistX
00004c 4604 MOV r4,r0 ;334
00004e 4630 MOV r0,r6 ;335
000050 f7fffffe BL GUI_SetFont
000054 4620 MOV r0,r4 ;336
000056 e7e7 B |L8.40|
|L8.88|
000058 f9b40000 LDRSH r0,[r4,#0] ;354
00005c 68a6 LDR r6,[r4,#8] ;354
00005e f7fffffe BL GUI_ALLOC_h2p
000062 4605 MOV r5,r0 ;354
000064 4631 MOV r1,r6 ;355
000066 3028 ADDS r0,r0,#0x28 ;355
000068 f7fffffe BL GUI_ARRAY_GethItem
00006c f7fffffe BL GUI_ALLOC_h2p
000070 4607 MOV r7,r0 ;356
000072 a802 ADD r0,sp,#8 ;357
000074 f7fffffe BL WM_GetInsideRect
000078 f7fffffe BL GUI_GetFontDistY
00007c 4680 MOV r8,r0 ;358
00007e 7938 LDRB r0,[r7,#4] ;360
000080 f3c00140 UBFX r1,r0,#1,#1 ;360
000084 f0000201 AND r2,r0,#1 ;361
000088 f8950074 LDRB r0,[r5,#0x74] ;362
00008c 0740 LSLS r0,r0,#29 ;362
00008e d505 BPL |L8.156|
000090 b929 CBNZ r1,|L8.158|
000092 b10a CBZ r2,|L8.152|
000094 2002 MOVS r0,#2 ;366
000096 e00d B |L8.180|
|L8.152|
000098 2000 MOVS r0,#0 ;366
00009a e00b B |L8.180|
|L8.156|
00009c b109 CBZ r1,|L8.162|
|L8.158|
00009e 2003 MOVS r0,#3 ;370
0000a0 e008 B |L8.180|
|L8.162|
0000a2 f9b50072 LDRSH r0,[r5,#0x72] ;372
0000a6 42b0 CMP r0,r6 ;372
0000a8 d1f6 BNE |L8.152|
0000aa 8ce9 LDRH r1,[r5,#0x26] ;373
0000ac 2002 MOVS r0,#2 ;373
0000ae 07c9 LSLS r1,r1,#31 ;373
0000b0 d100 BNE |L8.180|
0000b2 2001 MOVS r0,#1 ;373
|L8.180|
0000b4 eb050780 ADD r7,r5,r0,LSL #2 ;380
0000b8 6d38 LDR r0,[r7,#0x50] ;380
0000ba f7fffffe BL LCD_SetBkColor
0000be 6e38 LDR r0,[r7,#0x60] ;381
0000c0 f7fffffe BL LCD_SetColor
0000c4 4631 MOV r1,r6 ;382
0000c6 4628 MOV r0,r5 ;382
0000c8 f7fffffe BL LISTBOX__GetpString
0000cc 4681 MOV r9,r0 ;382
0000ce 2002 MOVS r0,#2 ;383
0000d0 f7fffffe BL GUI_SetTextMode
0000d4 f7fffffe BL GUI_Clear
0000d8 e9d41203 LDRD r1,r2,[r4,#0xc] ;385
0000dc 1c49 ADDS r1,r1,#1 ;385
0000de 4648 MOV r0,r9 ;385
0000e0 f7fffffe BL GUI_DispStringAt
0000e4 f8950074 LDRB r0,[r5,#0x74] ;387
0000e8 0740 LSLS r0,r0,#29 ;387
0000ea d51f BPL |L8.300|
0000ec f9b50072 LDRSH r0,[r5,#0x72] ;387
0000f0 42b0 CMP r0,r6 ;387
0000f2 d11b BNE |L8.300|
0000f4 68e0 LDR r0,[r4,#0xc] ;389
0000f6 f8ad0000 STRH r0,[sp,#0] ;389
0000fa 6920 LDR r0,[r4,#0x10] ;390
0000fc f8ad0002 STRH r0,[sp,#2] ;390
000100 f8bd000c LDRH r0,[sp,#0xc] ;391
000104 f8ad0004 STRH r0,[sp,#4] ;391
000108 f1a80001 SUB r0,r8,#1 ;392
00010c 6921 LDR r1,[r4,#0x10] ;392
00010e e000 B |L8.274|
|L8.272|
000110 e00c B |L8.300|
|L8.274|
000112 4408 ADD r0,r0,r1 ;392
000114 f8ad0006 STRH r0,[sp,#6] ;392
000118 6d38 LDR r0,[r7,#0x50] ;393
00011a f06f417f MVN r1,#0xff000000 ;393
00011e 1a08 SUBS r0,r1,r0 ;393
000120 f7fffffe BL LCD_SetColor
000124 2100 MOVS r1,#0 ;394
000126 4668 MOV r0,sp ;394
000128 f7fffffe BL GUI_DrawFocusRect
|L8.300|
00012c 2000 MOVS r0,#0 ;399
00012e e77b B |L8.40|
;;;401
ENDP
AREA ||i.LISTBOX_SetSel||, CODE, READONLY, ALIGN=1
LISTBOX_SetSel PROC
;;;1039 */
;;;1040 void LISTBOX_SetSel (LISTBOX_Handle hObj, int NewSel) {
000000 e92d41f0 PUSH {r4-r8,lr}
000004 0006 MOVS r6,r0
000006 460c MOV r4,r1
;;;1041 if (hObj) {
000008 d03a BEQ |L9.128|
;;;1042 LISTBOX_Obj* pObj;
;;;1043 int MaxSel;
;;;1044 WM_LOCK();
;;;1045 pObj = LISTBOX_H2P(hObj);
00000a 4630 MOV r0,r6
00000c f7fffffe BL GUI_ALLOC_h2p
000010 4605 MOV r5,r0
000012 3028 ADDS r0,r0,#0x28
000014 4680 MOV r8,r0
000016 f7fffffe BL GUI_ARRAY_GetNumItems
;;;1046 MaxSel = LISTBOX__GetNumItems(pObj);
;;;1047 MaxSel = MaxSel ? MaxSel - 1 : 0;
00001a b100 CBZ r0,|L9.30|
00001c 1e40 SUBS r0,r0,#1
|L9.30|
;;;1048 if (NewSel > MaxSel) {
00001e 4284 CMP r4,r0
000020 dd00 BLE |L9.36|
;;;1049 NewSel = MaxSel;
000022 4604 MOV r4,r0
|L9.36|
;;;1050 }
;;;1051 if (NewSel < 0) {
;;;1052 NewSel = -1;
000024 f04f37ff MOV r7,#0xffffffff
000028 2c00 CMP r4,#0 ;1051
00002a db09 BLT |L9.64|
;;;1053 } else {
;;;1054 WM_HMEM hItem = GUI_ARRAY_GethItem(&pObj->ItemArray, NewSel);
00002c 4621 MOV r1,r4
00002e 4640 MOV r0,r8
000030 f7fffffe BL GUI_ARRAY_GethItem
;;;1055 if (hItem) {
000034 b128 CBZ r0,|L9.66|
;;;1056 LISTBOX_ITEM* pItem = (LISTBOX_ITEM*)GUI_ALLOC_h2p(hItem);
000036 f7fffffe BL GUI_ALLOC_h2p
;;;1057 if (pItem->Status & LISTBOX_ITEM_DISABLED) {
00003a 7900 LDRB r0,[r0,#4]
00003c 0780 LSLS r0,r0,#30
00003e d500 BPL |L9.66|
|L9.64|
;;;1058 NewSel = -1;
000040 463c MOV r4,r7
|L9.66|
;;;1059 }
;;;1060 }
;;;1061 }
;;;1062 if (NewSel != pObj->Sel) {
000042 f9b57072 LDRSH r7,[r5,#0x72]
000046 42a7 CMP r7,r4
000048 d01a BEQ |L9.128|
;;;1063 int OldSel;
;;;1064 OldSel = pObj->Sel;
;;;1065 pObj->Sel = NewSel;
00004a f8a54072 STRH r4,[r5,#0x72]
;;;1066 if (_UpdateScrollPos(hObj, pObj)) {
00004e 4629 MOV r1,r5
000050 4630 MOV r0,r6
000052 f7fffffe BL _UpdateScrollPos
000056 b118 CBZ r0,|L9.96|
;;;1067 LISTBOX__InvalidateInsideArea(hObj);
000058 4630 MOV r0,r6
00005a f7fffffe BL LISTBOX__InvalidateInsideArea
00005e e009 B |L9.116|
|L9.96|
;;;1068 } else {
;;;1069 LISTBOX__InvalidateItem(hObj, pObj, OldSel);
000060 463a MOV r2,r7
000062 4629 MOV r1,r5
000064 4630 MOV r0,r6
000066 f7fffffe BL LISTBOX__InvalidateItem
;;;1070 LISTBOX__InvalidateItem(hObj, pObj, NewSel);
00006a 4622 MOV r2,r4
00006c 4629 MOV r1,r5
00006e 4630 MOV r0,r6
000070 f7fffffe BL LISTBOX__InvalidateItem
|L9.116|
;;;1071 }
;;;1072 _NotifyOwner(hObj, WM_NOTIFICATION_SEL_CHANGED);
000074 4630 MOV r0,r6
000076 e8bd41f0 POP {r4-r8,lr}
00007a 2104 MOVS r1,#4
00007c f7ffbffe B.W _NotifyOwner
|L9.128|
;;;1073 }
;;;1074 WM_UNLOCK();
;;;1075 }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -