📄 menu.txt
字号:
00002c e8bd4070 POP {r4-r6,lr}
000030 f7ffbffe B.W WM_InvalidateWindow
;;;1068 }
;;;1069
ENDP
AREA ||i.MENU__SendMenuMessage||, CODE, READONLY, ALIGN=1
MENU__SendMenuMessage PROC
;;;1110 */
;;;1111 int MENU__SendMenuMessage(MENU_Handle hObj, WM_HWIN hDestWin, U16 MsgType, U16 ItemId) {
000000 b57f PUSH {r0-r6,lr}
000002 4615 MOV r5,r2
000004 4604 MOV r4,r0
;;;1112 MENU_MSG_DATA MsgData;
;;;1113 WM_MESSAGE Msg = {0};
000006 f04f0200 MOV r2,#0
00000a 0008 MOVS r0,r1 ;1111
00000c 461e MOV r6,r3 ;1111
00000e 4669 MOV r1,sp
000010 4613 MOV r3,r2
000012 4694 MOV r12,r2
000014 e881100c STM r1,{r2,r3,r12}
;;;1114 MsgData.MsgType = MsgType;
;;;1115 MsgData.ItemId = ItemId;
;;;1116 Msg.MsgId = WM_MENU;
000018 f04f012c MOV r1,#0x2c
;;;1117 Msg.Data.p = &MsgData;
00001c 9100 STR r1,[sp,#0]
00001e f8ad500c STRH r5,[sp,#0xc] ;1114
000022 a903 ADD r1,sp,#0xc
000024 f8ad600e STRH r6,[sp,#0xe] ;1115
;;;1118 Msg.hWinSrc = hObj;
000028 9102 STR r1,[sp,#8]
00002a f8ad4006 STRH r4,[sp,#6]
;;;1119 if (!hDestWin) {
00002e d104 BNE |L8.58|
;;;1120 hDestWin = WM_GetParent(hObj);
000030 4620 MOV r0,r4
000032 f7fffffe BL WM_GetParent
;;;1121 }
;;;1122 if (hDestWin) {
000036 2800 CMP r0,#0
000038 d003 BEQ |L8.66|
|L8.58|
;;;1123 WM__SendMessage(hDestWin, &Msg);
00003a 4669 MOV r1,sp
00003c f7fffffe BL WM__SendMessage
;;;1124 return Msg.Data.v;
000040 9802 LDR r0,[sp,#8]
|L8.66|
;;;1125 }
;;;1126 return 0;
;;;1127 }
000042 b004 ADD sp,sp,#0x10
000044 bd70 POP {r4-r6,pc}
;;;1128
ENDP
AREA ||i.MENU__SetItem||, CODE, READONLY, ALIGN=2
MENU__SetItem PROC
;;;1073 */
;;;1074 char MENU__SetItem(MENU_Handle hObj, MENU_Obj* pObj, unsigned Index, const MENU_ITEM_DATA* pItemData) {
000000 e92d47ff PUSH {r0-r10,lr}
000004 460d MOV r5,r1
;;;1075 MENU_ITEM Item = {0};
000006 2100 MOVS r1,#0
000008 4681 MOV r9,r0 ;1074
00000a 4690 MOV r8,r2 ;1074
00000c 4618 MOV r0,r3 ;1074
00000e 466c MOV r4,sp
000010 460a MOV r2,r1
000012 460b MOV r3,r1
000014 460e MOV r6,r1
000016 c44e STM r4!,{r1-r3,r6}
;;;1076 const char* pText;
;;;1077 pText = pItemData->pText;
;;;1078 if (!pText) {
000018 6804 LDR r4,[r0,#0]
00001a b904 CBNZ r4,|L9.30|
;;;1079 pText = "";
00001c a41e ADR r4,|L9.152|
|L9.30|
;;;1080 }
;;;1081 Item.Id = pItemData->Id;
00001e 8881 LDRH r1,[r0,#4]
000020 f8ad1002 STRH r1,[sp,#2]
;;;1082 Item.Flags = pItemData->Flags;
000024 88c1 LDRH r1,[r0,#6]
000026 f8ad1004 STRH r1,[sp,#4]
;;;1083 Item.hSubmenu = pItemData->hSubmenu;
00002a 8900 LDRH r0,[r0,#8]
00002c f8ad0000 STRH r0,[sp,#0]
000030 2600 MOVS r6,#0
000032 b154 CBZ r4,|L9.74|
000034 6d68 LDR r0,[r5,#0x54]
000036 f7fffffe BL GUI_SetFont
00003a 4607 MOV r7,r0
00003c 4620 MOV r0,r4
00003e f7fffffe BL GUI_GetStringDistX
000042 4606 MOV r6,r0
000044 4638 MOV r0,r7
000046 f7fffffe BL GUI_SetFont
|L9.74|
;;;1084 Item.TextWidth = _CalcTextWidth(pObj, pText);
;;;1085 if (Item.Flags & MENU_IF_SEPARATOR) {
00004a f8bd0004 LDRH r0,[sp,#4]
00004e 9602 STR r6,[sp,#8]
000050 0780 LSLS r0,r0,#30
000052 d502 BPL |L9.90|
;;;1086 Item.hSubmenu = 0; /* Ensures that no separator is a submenu */
000054 2000 MOVS r0,#0
000056 f8ad0000 STRH r0,[sp,#0]
|L9.90|
;;;1087 }
;;;1088 if (GUI_ARRAY_SetItem(&pObj->ItemArray, Index, &Item, sizeof(MENU_ITEM) + strlen(pText)) != 0) {
00005a 4620 MOV r0,r4
00005c f7fffffe BL strlen
000060 f1000310 ADD r3,r0,#0x10
000064 f1050058 ADD r0,r5,#0x58
000068 466a MOV r2,sp
00006a 4641 MOV r1,r8
00006c 4605 MOV r5,r0
00006e f7fffffe BL GUI_ARRAY_SetItem
000072 2800 CMP r0,#0
000074 d00d BEQ |L9.146|
;;;1089 MENU_ITEM* pItem = (MENU_ITEM*)GUI_ARRAY_GetpItem(&pObj->ItemArray, Index);
000076 4641 MOV r1,r8
000078 4628 MOV r0,r5
00007a f7fffffe BL GUI_ARRAY_GetpItem
;;;1090 strcpy(pItem->acText, pText);
00007e 4621 MOV r1,r4
000080 300c ADDS r0,r0,#0xc
000082 f7fffffe BL strcpy
;;;1091 MENU_SetOwner(Item.hSubmenu, hObj);
000086 f9bd0000 LDRSH r0,[sp,#0]
00008a 4649 MOV r1,r9
00008c f7fffffe BL MENU_SetOwner
;;;1092 return 1;
000090 2001 MOVS r0,#1
|L9.146|
;;;1093 }
;;;1094 return 0;
;;;1095 }
000092 b004 ADD sp,sp,#0x10
000094 e8bd87f0 POP {r4-r10,pc}
;;;1096
ENDP
|L9.152|
000098 00 DCB 0
000099 00 DCB 0
00009a 00 DCB 0
00009b 00 DCB 0
AREA ||i.MENU__SetItemFlags||, CODE, READONLY, ALIGN=1
MENU__SetItemFlags PROC
;;;1100 */
;;;1101 void MENU__SetItemFlags(MENU_Obj* pObj, unsigned Index, U16 Mask, U16 Flags) {
000000 b570 PUSH {r4-r6,lr}
000002 4614 MOV r4,r2
000004 461d MOV r5,r3
;;;1102 MENU_ITEM* pItem = (MENU_ITEM*)GUI_ARRAY_GetpItem(&pObj->ItemArray, Index);
000006 3058 ADDS r0,r0,#0x58
000008 f7fffffe BL GUI_ARRAY_GetpItem
;;;1103 pItem->Flags &= ~Mask;
00000c 8881 LDRH r1,[r0,#4]
00000e 43a1 BICS r1,r1,r4
;;;1104 pItem->Flags |= Flags;
000010 b289 UXTH r1,r1
000012 4329 ORRS r1,r1,r5
000014 8081 STRH r1,[r0,#4]
;;;1105 }
000016 bd70 POP {r4-r6,pc}
;;;1106
ENDP
AREA ||i._CalcMenuSizeX||, CODE, READONLY, ALIGN=1
_CalcMenuSizeX PROC
;;;278 */
;;;279 static int _CalcMenuSizeX(MENU_Handle hObj, MENU_Obj* pObj) {
000000 e92d41f0 PUSH {r4-r8,lr}
000004 4680 MOV r8,r0
000006 460f MOV r7,r1
000008 f1010058 ADD r0,r1,#0x58
00000c f7fffffe BL GUI_ARRAY_GetNumItems
;;;280 unsigned i, NumItems = MENU__GetNumItems(pObj);
000010 4606 MOV r6,r0
;;;281 int xSize = 0;
000012 2400 MOVS r4,#0
;;;282 if (pObj->Flags & MENU_SF_VERTICAL) {
000014 f8b7005e LDRH r0,[r7,#0x5e]
;;;283 int ItemWidth;
;;;284 for (i = 0; i < NumItems; i++) {
000018 4625 MOV r5,r4
00001a 07c0 LSLS r0,r0,#31 ;282
00001c d00c BEQ |L11.56|
00001e e008 B |L11.50|
|L11.32|
;;;285 ItemWidth = _GetItemWidth(hObj, pObj, i);
000020 462a MOV r2,r5
000022 4639 MOV r1,r7
000024 4640 MOV r0,r8
000026 f7fffffe BL _GetItemWidth
;;;286 if (ItemWidth > xSize) {
00002a 42a0 CMP r0,r4
00002c dd00 BLE |L11.48|
;;;287 xSize = ItemWidth;
00002e 4604 MOV r4,r0
|L11.48|
000030 1c6d ADDS r5,r5,#1 ;284
|L11.50|
000032 42b5 CMP r5,r6 ;284
000034 d3f4 BCC |L11.32|
000036 e009 B |L11.76|
|L11.56|
;;;288 }
;;;289 }
;;;290 } else {
;;;291 for (i = 0; i < NumItems; i++) {
000038 e006 B |L11.72|
|L11.58|
;;;292 xSize += _GetItemWidth(hObj, pObj, i);
00003a 462a MOV r2,r5
00003c 4639 MOV r1,r7
00003e 4640 MOV r0,r8
000040 f7fffffe BL _GetItemWidth
000044 4404 ADD r4,r4,r0
000046 1c6d ADDS r5,r5,#1 ;291
|L11.72|
000048 42b5 CMP r5,r6 ;291
00004a d3f6 BCC |L11.58|
|L11.76|
;;;293 }
;;;294 }
;;;295 xSize += (_GetEffectSize(hObj, pObj) << 1);
00004c 4639 MOV r1,r7
00004e 4640 MOV r0,r8
000050 f7fffffe BL _GetEffectSize
000054 eb040040 ADD r0,r4,r0,LSL #1
;;;296 return xSize;
;;;297 }
000058 e8bd81f0 POP {r4-r8,pc}
;;;298
ENDP
AREA ||i._CalcMenuSizeY||, CODE, READONLY, ALIGN=1
_CalcMenuSizeY PROC
;;;302 */
;;;303 static int _CalcMenuSizeY(MENU_Handle hObj, MENU_Obj* pObj) {
000000 e92d41f0 PUSH {r4-r8,lr}
000004 4680 MOV r8,r0
000006 460f MOV r7,r1
000008 f1010058 ADD r0,r1,#0x58
00000c f7fffffe BL GUI_ARRAY_GetNumItems
;;;304 unsigned i, NumItems = MENU__GetNumItems(pObj);
000010 4606 MOV r6,r0
;;;305 int ySize = 0;
000012 2400 MOVS r4,#0
;;;306 if (pObj->Flags & MENU_SF_VERTICAL) {
000014 f8b7005e LDRH r0,[r7,#0x5e]
;;;307 for (i = 0; i < NumItems; i++) {
000018 4625 MOV r5,r4
00001a 07c0 LSLS r0,r0,#31 ;306
00001c d00a BEQ |L12.52|
00001e e006 B |L12.46|
|L12.32|
;;;308 ySize += _GetItemHeight(hObj, pObj, i);
000020 462a MOV r2,r5
000022 4639 MOV r1,r7
000024 4640 MOV r0,r8
000026 f7fffffe BL _GetItemHeight
00002a 4404 ADD r4,r4,r0
00002c 1c6d ADDS r5,r5,#1 ;307
|L12.46|
00002e 42b5 CMP r5,r6 ;307
000030 d3f6 BCC |L12.32|
000032 e00b B |L12.76|
|L12.52|
;;;309 }
;;;310 } else {
;;;311 int ItemHeight;
;;;312 for (i = 0; i < NumItems; i++) {
000034 e008 B |L12.72|
|L12.54|
;;;313 ItemHeight = _GetItemHeight(hObj, pObj, i);
000036 462a MOV r2,r5
000038 4639 MOV r1,r7
00003a 4640 MOV r0,r8
00003c f7fffffe BL _GetItemHeight
;;;314 if (ItemHeight > ySize) {
000040 42a0 CMP r0,r4
000042 dd00 BLE |L12.70|
;;;315 ySize = ItemHeight;
000044 4604 MOV r4,r0
|L12.70|
000046 1c6d ADDS r5,r5,#1 ;312
|L12.72|
000048 42b5 CMP r5,r6 ;312
00004a d3f4 BCC |L12.54|
|L12.76|
;;;316 }
;;;317 }
;;;318 }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -