📄 menu.txt
字号:
;;;319 ySize += (_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
;;;320 return ySize;
;;;321 }
000058 e8bd81f0 POP {r4-r8,pc}
;;;322
ENDP
AREA ||i._ClosePopup||, CODE, READONLY, ALIGN=1
_ClosePopup PROC
;;;524 */
;;;525 static void _ClosePopup(MENU_Handle hObj, MENU_Obj* pObj) {
000000 b510 PUSH {r4,lr}
;;;526 if (pObj->Flags & MENU_SF_POPUP) {
000002 f8b1205e LDRH r2,[r1,#0x5e]
000006 0613 LSLS r3,r2,#24
000008 d509 BPL |L13.30|
;;;527 pObj->Flags &= ~(MENU_SF_POPUP);
00000a f0220280 BIC r2,r2,#0x80
00000e f8a1205e STRH r2,[r1,#0x5e]
;;;528 WM_DetachWindow(hObj);
000012 f7fffffe BL WM_DetachWindow
;;;529 WM_ReleaseCapture();
000016 e8bd4010 POP {r4,lr}
00001a f7ffbffe B.W WM_ReleaseCapture
|L13.30|
;;;530 }
;;;531 }
00001e bd10 POP {r4,pc}
;;;532
ENDP
AREA ||i._CloseSubmenu||, CODE, READONLY, ALIGN=1
_CloseSubmenu PROC
;;;449 */
;;;450 static void _CloseSubmenu(MENU_Handle hObj, MENU_Obj* pObj) {
000000 b570 PUSH {r4-r6,lr}
000002 4605 MOV r5,r0
;;;451 if (pObj->Flags & MENU_SF_ACTIVE) {
000004 f8b1005e LDRH r0,[r1,#0x5e]
000008 460c MOV r4,r1 ;450
00000a 0640 LSLS r0,r0,#25
00000c d520 BPL |L14.80|
;;;452 if (pObj->IsSubmenuActive) {
00000e f8940060 LDRB r0,[r4,#0x60]
000012 2800 CMP r0,#0
000014 d01c BEQ |L14.80|
;;;453 MENU_ITEM* pItem = (MENU_ITEM*)GUI_ARRAY_GetpItem(&pObj->ItemArray, pObj->Sel);
000016 f1040058 ADD r0,r4,#0x58
00001a 6ee1 LDR r1,[r4,#0x6c]
00001c f7fffffe BL GUI_ARRAY_GetpItem
000020 4606 MOV r6,r0
;;;454 /* Inform submenu about its deactivation and detach it */
;;;455 MENU__SendMenuMessage(hObj, pItem->hSubmenu, MENU_ON_CLOSE, 0);
000022 f9b01000 LDRSH r1,[r0,#0]
000026 2300 MOVS r3,#0
000028 2204 MOVS r2,#4
00002a 4628 MOV r0,r5
00002c f7fffffe BL MENU__SendMenuMessage
;;;456 WM_DetachWindow(pItem->hSubmenu);
000030 f9b60000 LDRSH r0,[r6,#0]
000034 f7fffffe BL WM_DetachWindow
;;;457 pObj->IsSubmenuActive = 0;
000038 2000 MOVS r0,#0
00003a f8840060 STRB r0,[r4,#0x60]
;;;458 /*
;;;459 * Keep capture in menu widget. The capture may only released
;;;460 * by clicking outside the menu or when mouse moved out.
;;;461 * And it may only released from a top level menu.
;;;462 */
;;;463 _SetCapture(hObj, pObj);
00003e 4621 MOV r1,r4
000040 4628 MOV r0,r5
000042 f7fffffe BL _SetCapture
000046 4628 MOV r0,r5
000048 e8bd4070 POP {r4-r6,lr}
00004c f7ffbffe B.W WM_InvalidateWindow
|L14.80|
;;;464 /* Invalidate menu item. This is needed because the appearance may have changed */
;;;465 MENU__InvalidateItem(hObj, pObj, pObj->Sel);
;;;466 }
;;;467 }
;;;468 }
000050 bd70 POP {r4-r6,pc}
;;;469
ENDP
AREA ||i._DeactivateMenu||, CODE, READONLY, ALIGN=1
_DeactivateMenu PROC
;;;612 */
;;;613 static void _DeactivateMenu(MENU_Handle hObj, MENU_Obj* pObj) {
000000 b510 PUSH {r4,lr}
000002 460c MOV r4,r1
;;;614 _CloseSubmenu(hObj, pObj);
000004 f7fffffe BL _CloseSubmenu
;;;615 if ((pObj->Flags & MENU_SF_OPEN_ON_POINTEROVER) == 0) {
000008 f8b4005e LDRH r0,[r4,#0x5e]
00000c 0781 LSLS r1,r0,#30
00000e d403 BMI |L15.24|
;;;616 pObj->Flags &= ~MENU_SF_ACTIVE;
000010 f0200040 BIC r0,r0,#0x40
000014 f8a4005e STRH r0,[r4,#0x5e]
|L15.24|
;;;617 }
;;;618 }
000018 bd10 POP {r4,pc}
;;;619
ENDP
AREA ||i._DeselectItem||, CODE, READONLY, ALIGN=1
_DeselectItem PROC
;;;560 */
;;;561 static void _DeselectItem(MENU_Handle hObj, MENU_Obj* pObj) {
000000 b570 PUSH {r4-r6,lr}
000002 4605 MOV r5,r0
;;;562 if (pObj->IsSubmenuActive == 0) {
000004 f8910060 LDRB r0,[r1,#0x60]
000008 460c MOV r4,r1 ;561
00000a 2800 CMP r0,#0
00000c d117 BNE |L16.62|
;;;563 _SetSelection(hObj, pObj, -1);
00000e 1e42 SUBS r2,r0,#1
000010 4621 MOV r1,r4
000012 4628 MOV r0,r5
000014 f7fffffe BL _SetSelection
000018 4628 MOV r0,r5
00001a f7fffffe BL WM_HasCaptured
00001e 2800 CMP r0,#0
000020 d00d BEQ |L16.62|
000022 4621 MOV r1,r4
000024 4628 MOV r0,r5
000026 f7fffffe BL _IsTopLevelMenu
00002a 2800 CMP r0,#0
00002c d007 BEQ |L16.62|
00002e f8b4005e LDRH r0,[r4,#0x5e]
000032 0600 LSLS r0,r0,#24
000034 d403 BMI |L16.62|
000036 e8bd4070 POP {r4-r6,lr}
00003a f7ffbffe B.W WM_ReleaseCapture
|L16.62|
;;;564 _ReleaseCapture(hObj, pObj);
;;;565 }
;;;566 }
00003e bd70 POP {r4-r6,pc}
;;;567
ENDP
AREA ||i._GetEffectSize||, CODE, READONLY, ALIGN=1
_GetEffectSize PROC
;;;210 */
;;;211 static int _GetEffectSize(MENU_Handle hObj, MENU_Obj* pObj) {
000000 b570 PUSH {r4-r6,lr}
000002 460d MOV r5,r1
;;;212 int r = 0;
000004 2400 MOVS r4,#0
;;;213 if (_HasEffect(hObj, pObj)) {
000006 f7fffffe BL _HasEffect
00000a b108 CBZ r0,|L17.16|
;;;214 r = pObj->Widget.pEffect->EffectSize;
00000c 6a28 LDR r0,[r5,#0x20]
00000e 6944 LDR r4,[r0,#0x14]
|L17.16|
;;;215 }
;;;216 return r;
000010 4620 MOV r0,r4
;;;217 }
000012 bd70 POP {r4-r6,pc}
;;;218
ENDP
AREA ||i._GetItemFromPos||, CODE, READONLY, ALIGN=1
_GetItemFromPos PROC
;;;357 */
;;;358 static int _GetItemFromPos(MENU_Handle hObj, MENU_Obj* pObj, int x, int y) {
000000 e92d47f0 PUSH {r4-r10,lr}
000004 4682 MOV r10,r0
000006 4688 MOV r8,r1
000008 4615 MOV r5,r2
00000a 461f MOV r7,r3
;;;359 int xSize, ySize, EffectSize, r = -1;
00000c f04f39ff MOV r9,#0xffffffff
;;;360 ySize = _CalcMenuSizeY(hObj, pObj);
000010 f7fffffe BL _CalcMenuSizeY
000014 4604 MOV r4,r0
;;;361 if ((pObj->Height) && (pObj->Height < ySize)) {
000016 f8d80068 LDR r0,[r8,#0x68]
00001a b110 CBZ r0,|L18.34|
00001c 42a0 CMP r0,r4
00001e da00 BGE |L18.34|
;;;362 ySize = pObj->Height;
000020 4604 MOV r4,r0
|L18.34|
;;;363 }
;;;364 xSize = _CalcMenuSizeX(hObj, pObj);
000022 4641 MOV r1,r8
000024 4650 MOV r0,r10
000026 f7fffffe BL _CalcMenuSizeX
00002a 4606 MOV r6,r0
;;;365 if ((pObj->Width) && (pObj->Width < xSize)) {
00002c f8d80064 LDR r0,[r8,#0x64]
000030 b110 CBZ r0,|L18.56|
000032 42b0 CMP r0,r6
000034 da00 BGE |L18.56|
;;;366 xSize = pObj->Width;
000036 4606 MOV r6,r0
|L18.56|
;;;367 }
;;;368 EffectSize = _GetEffectSize(hObj, pObj);
000038 4641 MOV r1,r8
00003a 4650 MOV r0,r10
00003c f7fffffe BL _GetEffectSize
;;;369 x -= EffectSize;
000040 1a2d SUBS r5,r5,r0
;;;370 y -= EffectSize;
000042 eba70700 SUB r7,r7,r0
;;;371 xSize -= (EffectSize << 1);
000046 eba60140 SUB r1,r6,r0,LSL #1
;;;372 ySize -= (EffectSize << 1);
00004a eba40040 SUB r0,r4,r0,LSL #1
;;;373 if ((x >= 0) && (y >= 0) && (x < xSize) && (y < ySize)) {
00004e d42d BMI |L18.172|
000050 2f00 CMP r7,#0
000052 db2b BLT |L18.172|
000054 428d CMP r5,r1
000056 da29 BGE |L18.172|
000058 4287 CMP r7,r0
00005a da27 BGE |L18.172|
00005c f1080058 ADD r0,r8,#0x58
000060 f7fffffe BL GUI_ARRAY_GetNumItems
;;;374 unsigned i, NumItems = MENU__GetNumItems(pObj);
000064 4606 MOV r6,r0
;;;375 if (pObj->Flags & MENU_SF_VERTICAL) {
000066 f8b8005e LDRH r0,[r8,#0x5e]
00006a 07c0 LSLS r0,r0,#31
00006c d010 BEQ |L18.144|
;;;376 int yPos = 0;
00006e 2500 MOVS r5,#0
;;;377 for (i = 0; i < NumItems; i++) {
000070 462c MOV r4,r5
000072 e00a B |L18.138|
|L18.116|
;;;378 yPos += _GetItemHeight(hObj, pObj, i);
000074 4622 MOV r2,r4
000076 4641 MOV r1,r8
000078 4650 MOV r0,r10
00007a f7fffffe BL _GetItemHeight
00007e 4405 ADD r5,r5,r0
;;;379 if (y < yPos) {
000080 42af CMP r7,r5
000082 da01 BGE |L18.136|
|L18.132|
;;;380 r = i;
000084 46a1 MOV r9,r4
;;;381 break;
000086 e011 B |L18.172|
|L18.136|
000088 1c64 ADDS r4,r4,#1 ;377
|L18.138|
00008a 42b4 CMP r4,r6 ;377
00008c d3f2 BCC |L18.116|
00008e e00d B |L18.172|
|L18.144|
;;;382 }
;;;383 }
;;;384 } else {
;;;385 int xPos = 0;
000090 2700 MOVS r7,#0
;;;386 for (i = 0; i < NumItems; i++) {
000092 463c MOV r4,r7
000094 e008 B |L18.168|
|L18.150|
;;;387 xPos += _GetItemWidth(hObj, pObj, i);
000096 4622 MOV r2,r4
000098 4641 MOV r1,r8
00009a 4650 MOV r0,r10
00009c f7fffffe BL _GetItemWidth
0000a0 4407 ADD r7,r7,r0
;;;388 if (x < xPos) {
0000a2 42bd CMP r5,r7
0000a4 dbee BLT |L18.132|
0000a6 1c64 ADDS r4,r4,#1 ;386
|L18.168|
0000a8 42b4 CMP r4,r6 ;386
0000aa d3f4 BCC |L18.150|
|L18.172|
;;;389 r = i;
;;;390 break;
;;;391 }
;;;392 }
;;;393 }
;;;394 }
;;;395 return r;
0000ac 4648 MOV r0,r9
;;;396 }
0000ae e8bd87f0 POP {r4-r10,pc}
;;;397
ENDP
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -