⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 menu.txt

📁 STM32F103ZET6+UCOSII+UCGUI源码
💻 TXT
📖 第 1 页 / 共 5 页
字号:
;;;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 + -