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

📄 menu.txt

📁 STM32F103ZET6+UCOSII+UCGUI源码
💻 TXT
📖 第 1 页 / 共 5 页
字号:


                          AREA ||i._GetItemHeight||, CODE, READONLY, ALIGN=1

                  _GetItemHeight PROC
;;;257    */
;;;258    static int _GetItemHeight(MENU_Handle hObj, MENU_Obj* pObj, unsigned Index) {
000000  b570              PUSH     {r4-r6,lr}
000002  460c              MOV      r4,r1
;;;259      int ItemHeight;
;;;260      if (pObj->Height && !(pObj->Flags & MENU_SF_VERTICAL)) {
000004  6e89              LDR      r1,[r1,#0x68]
000006  4616              MOV      r6,r2                 ;258
000008  b151              CBZ      r1,|L19.32|
00000a  f8b4105e          LDRH     r1,[r4,#0x5e]
00000e  07c9              LSLS     r1,r1,#31
000010  d106              BNE      |L19.32|
;;;261        ItemHeight = pObj->Height - (_GetEffectSize(hObj, pObj) << 1);
000012  4621              MOV      r1,r4
000014  f7fffffe          BL       _GetEffectSize
000018  6ea1              LDR      r1,[r4,#0x68]
00001a  eba10040          SUB      r0,r1,r0,LSL #1
;;;262      } else {
;;;263        ItemHeight = GUI_GetYDistOfFont(pObj->Props.pFont);
;;;264        if (pObj->Flags & MENU_SF_VERTICAL) {
;;;265          MENU_ITEM* pItem = (MENU_ITEM*)GUI_ARRAY_GetpItem(&pObj->ItemArray, Index);
;;;266          if (pItem->Flags & MENU_IF_SEPARATOR) {
;;;267            ItemHeight = 3;
;;;268          }
;;;269        }
;;;270        ItemHeight += pObj->Props.aBorder[MENU_BI_TOP] + pObj->Props.aBorder[MENU_BI_BOTTOM];
;;;271      }
;;;272      return ItemHeight;
;;;273    }
00001e  bd70              POP      {r4-r6,pc}
                  |L19.32|
000020  6d60              LDR      r0,[r4,#0x54]         ;263
000022  f7fffffe          BL       GUI_GetYDistOfFont
000026  4605              MOV      r5,r0                 ;263
000028  f8b4005e          LDRH     r0,[r4,#0x5e]         ;264
00002c  07c0              LSLS     r0,r0,#31             ;264
00002e  d008              BEQ      |L19.66|
000030  4631              MOV      r1,r6                 ;265
000032  f1040058          ADD      r0,r4,#0x58           ;265
000036  f7fffffe          BL       GUI_ARRAY_GetpItem
00003a  8880              LDRH     r0,[r0,#4]            ;266
00003c  0780              LSLS     r0,r0,#30             ;266
00003e  d500              BPL      |L19.66|
000040  2503              MOVS     r5,#3                 ;267
                  |L19.66|
000042  f8140f52          LDRB     r0,[r4,#0x52]!        ;270
000046  7861              LDRB     r1,[r4,#1]            ;270
000048  4408              ADD      r0,r0,r1              ;270
00004a  4428              ADD      r0,r0,r5              ;270
00004c  bd70              POP      {r4-r6,pc}
;;;274    
                          ENDP


                          AREA ||i._GetItemWidth||, CODE, READONLY, ALIGN=1

                  _GetItemWidth PROC
;;;237    */
;;;238    static int _GetItemWidth(MENU_Handle hObj, MENU_Obj* pObj, unsigned Index) {
000000  b510              PUSH     {r4,lr}
000002  460c              MOV      r4,r1
;;;239      int ItemWidth;
;;;240      if (pObj->Width && (pObj->Flags & MENU_SF_VERTICAL)) {
000004  6e63              LDR      r3,[r4,#0x64]
000006  4611              MOV      r1,r2                 ;238
000008  b153              CBZ      r3,|L20.32|
00000a  f8b4305e          LDRH     r3,[r4,#0x5e]
00000e  07db              LSLS     r3,r3,#31
000010  d006              BEQ      |L20.32|
;;;241        ItemWidth = pObj->Width - (_GetEffectSize(hObj, pObj) << 1);
000012  4621              MOV      r1,r4
000014  f7fffffe          BL       _GetEffectSize
000018  6e61              LDR      r1,[r4,#0x64]
00001a  eba10040          SUB      r0,r1,r0,LSL #1
;;;242      } else {
;;;243        MENU_ITEM* pItem = (MENU_ITEM*)GUI_ARRAY_GetpItem(&pObj->ItemArray, Index);
;;;244        if ((pObj->Flags & MENU_SF_VERTICAL) || !(pItem->Flags & MENU_IF_SEPARATOR)) {
;;;245          ItemWidth = pItem->TextWidth;
;;;246        } else {
;;;247          ItemWidth = 3;
;;;248       }
;;;249        ItemWidth += pObj->Props.aBorder[MENU_BI_LEFT] + pObj->Props.aBorder[MENU_BI_RIGHT];
;;;250      }
;;;251      return ItemWidth;
;;;252    }
00001e  bd10              POP      {r4,pc}
                  |L20.32|
000020  f1040058          ADD      r0,r4,#0x58           ;243
000024  f7fffffe          BL       GUI_ARRAY_GetpItem
000028  f8b4105e          LDRH     r1,[r4,#0x5e]         ;244
00002c  07c9              LSLS     r1,r1,#31             ;244
00002e  d102              BNE      |L20.54|
000030  8881              LDRH     r1,[r0,#4]            ;244
000032  0789              LSLS     r1,r1,#30             ;244
000034  d401              BMI      |L20.58|
                  |L20.54|
000036  6880              LDR      r0,[r0,#8]            ;245
000038  e000              B        |L20.60|
                  |L20.58|
00003a  2003              MOVS     r0,#3                 ;247
                  |L20.60|
00003c  f8141f50          LDRB     r1,[r4,#0x50]!        ;249
000040  7862              LDRB     r2,[r4,#1]            ;249
000042  4411              ADD      r1,r1,r2              ;249
000044  4408              ADD      r0,r0,r1              ;249
000046  bd10              POP      {r4,pc}
;;;253    
                          ENDP


                          AREA ||i._HandlePID||, CODE, READONLY, ALIGN=1

                  _HandlePID PROC
;;;658    */
;;;659    static char _HandlePID(MENU_Handle hObj, MENU_Obj* pObj, int x, int y, int Pressed) {
000000  e92d41f0          PUSH     {r4-r8,lr}
000004  b086              SUB      sp,sp,#0x18
000006  4680              MOV      r8,r0
000008  460c              MOV      r4,r1
00000a  4616              MOV      r6,r2
00000c  461f              MOV      r7,r3
;;;660      GUI_PID_STATE PrevState;
;;;661      char XYInWidget = 0;
;;;662      WM_PID__GetPrevState(&PrevState);
00000e  a803              ADD      r0,sp,#0xc
000010  9d0c              LDR      r5,[sp,#0x30]
000012  f7fffffe          BL       WM_PID__GetPrevState
;;;663      /*
;;;664       * Check if coordinates are inside the widget.
;;;665       */
;;;666      if ((x >= 0) && (y >= 0)) {
000016  2e00              CMP      r6,#0
000018  db6f              BLT      |L21.250|
00001a  2f00              CMP      r7,#0
00001c  db6d              BLT      |L21.250|
;;;667        GUI_RECT r;
;;;668        WM__GetClientRectWin(&pObj->Widget.Win, &r);
00001e  a901              ADD      r1,sp,#4
000020  4620              MOV      r0,r4
000022  f7fffffe          BL       WM__GetClientRectWin
;;;669        if ((x <= r.x1) && (y <= r.y1)) {
000026  f9bd0008          LDRSH    r0,[sp,#8]
00002a  42b0              CMP      r0,r6
00002c  db7a              BLT      |L21.292|
00002e  f9bd000a          LDRSH    r0,[sp,#0xa]
000032  42b8              CMP      r0,r7
000034  db76              BLT      |L21.292|
;;;670          XYInWidget = 1;
;;;671        }
;;;672      }
;;;673    
;;;674      if (XYInWidget) {
;;;675        int ItemIndex;
;;;676        ItemIndex = _GetItemFromPos(hObj, pObj, x, y);
000036  463b              MOV      r3,r7
000038  4632              MOV      r2,r6
00003a  4621              MOV      r1,r4
00003c  4640              MOV      r0,r8
00003e  f7fffffe          BL       _GetItemFromPos
000042  1e06              SUBS     r6,r0,#0
;;;677        /* 
;;;678         * Handle PID when coordinates are inside the widget.
;;;679         */
;;;680        if (ItemIndex >= 0) {
000044  db5a              BLT      |L21.252|
000046  f1040058          ADD      r0,r4,#0x58
;;;681          /* 
;;;682           * Coordinates are inside the menu.
;;;683           */
;;;684          if (Pressed == 1) {
00004a  2d01              CMP      r5,#1
00004c  d133              BNE      |L21.182|
;;;685            if (PrevState.Pressed == 0) {  /* Clicked */
00004e  f89d1014          LDRB     r1,[sp,#0x14]
000052  2900              CMP      r1,#0
000054  d14b              BNE      |L21.238|
000056  f8b4105e          LDRH     r1,[r4,#0x5e]
00005a  0789              LSLS     r1,r1,#30
00005c  d447              BMI      |L21.238|
00005e  4631              MOV      r1,r6
000060  f7fffffe          BL       GUI_ARRAY_GetpItem
000064  8801              LDRH     r1,[r0,#0]
000066  2900              CMP      r1,#0
000068  d041              BEQ      |L21.238|
00006a  8880              LDRH     r0,[r0,#4]
00006c  07c0              LSLS     r0,r0,#31
00006e  d13e              BNE      |L21.238|
000070  f8b4005e          LDRH     r0,[r4,#0x5e]
000074  0641              LSLS     r1,r0,#25
000076  d40e              BMI      |L21.150|
000078  f0400040          ORR      r0,r0,#0x40
00007c  f8a4005e          STRH     r0,[r4,#0x5e]
000080  4632              MOV      r2,r6
000082  4621              MOV      r1,r4
000084  4640              MOV      r0,r8
000086  f7fffffe          BL       _OpenSubmenu
00008a  4632              MOV      r2,r6
00008c  4621              MOV      r1,r4
00008e  4640              MOV      r0,r8
000090  f7fffffe          BL       _SetSelection
000094  e02b              B        |L21.238|
                  |L21.150|
000096  0740              LSLS     r0,r0,#29
000098  d529              BPL      |L21.238|
00009a  6ee0              LDR      r0,[r4,#0x6c]
00009c  42b0              CMP      r0,r6
00009e  d126              BNE      |L21.238|
0000a0  4621              MOV      r1,r4
0000a2  4640              MOV      r0,r8
0000a4  f7fffffe          BL       _CloseSubmenu
0000a8  f8b4005e          LDRH     r0,[r4,#0x5e]
0000ac  f0200040          BIC      r0,r0,#0x40
0000b0  f8a4005e          STRH     r0,[r4,#0x5e]
0000b4  e01b              B        |L21.238|
                  |L21.182|
;;;686              _ActivateMenu(hObj, pObj, ItemIndex);
;;;687            }
;;;688            _SelectItem(hObj, pObj, ItemIndex);
;;;689          } else if ((Pressed == 0) && (PrevState.Pressed == 1)) {  /* Released */
0000b6  2d00              CMP      r5,#0
0000b8  d118              BNE      |L21.236|
0000ba  f89d1014          LDRB     r1,[sp,#0x14]
0000be  2901              CMP      r1,#1
0000c0  d12c              BNE      |L21.284|
0000c2  4631              MOV      r1,r6
0000c4  f7fffffe          BL       GUI_ARRAY_GetpItem
0000c8  4605              MOV      r5,r0
0000ca  8800              LDRH     r0,[r0,#0]
0000cc  bb30              CBNZ     r0,|L21.284|
0000ce  88a8              LDRH     r0,[r5,#4]
0000d0  0780              LSLS     r0,r0,#30
0000d2  d123              BNE      |L21.284|
0000d4  4621              MOV      r1,r4
0000d6  4640              MOV      r0,r8
0000d8  f7fffffe          BL       _ClosePopup
0000dc  886b              LDRH     r3,[r5,#2]
0000de  f9b4105c          LDRSH    r1,[r4,#0x5c]
0000e2  2200              MOVS     r2,#0
0000e4  4640              MOV      r0,r8
0000e6  f7fffffe          BL       MENU__SendMenuMessage
0000ea  e017              B        |L21.284|
                  |L21.236|
;;;690            _ActivateItem(hObj, pObj, ItemIndex);
;;;691          } else if (Pressed < 0) {  /* Mouse moved */
0000ec  da16              BGE      |L21.284|
                  |L21.238|
;;;692            if (_ForwardMouseOverMsg(hObj, pObj, x, y) == 0) {
;;;693              _SelectItem(hObj, pObj, ItemIndex);
0000ee  4632              MOV      r2,r6
0000f0  4621              MOV      r1,r4
0000f2  4640              MOV      r0,r8
0000f4  f7fffffe          BL       _SelectItem
0000f8  e010              B        |L21.284|
                  |L21.250|
0000fa  e013              B        |L21.292|
                  |L21.252|
;;;694            } else {
;;;695              _DeselectItem(hObj, pObj);
;;;696            }
;;;697          }
;;;698        } else {
;;;699          /* 
;;;700           * Coordinates are outside the menu but inside the widget.
;;;701           */
;;;702          if (Pressed == 1) {
0000fc  2d01              CMP      r5,#1
0000fe  d107              BNE      |L21.272|
;;;703            if (PrevState.Pressed == 0) {  /* Clicked */
000100  f89d0014          LDRB     r0,[sp,#0x14]
000104  b930              CBNZ     r0,|L21.276|
;;;704              /* 
;;;705               * User has clicked outside the menu. Close the active submenu.
;;;706               * The widget itself must be closed (if needed) by the owner.
;;;707               */
;;;708              _DeactivateMenu(hObj, pObj);
000106  4621              MOV      r1,r4
000108  4640              MOV      r0,r8
00010a  f7fffffe          BL       _DeactivateMenu
00010e  e001              B        |L21.276|
                  |L21.272|
;;;709            }
;;;710            _DeselectItem(hObj, pObj);
;;;711          } else if (Pressed < 0) {  /* Moved out or mouse moved */
000110  2d00              CMP      r5,#0
000112  da03              BGE      |L21.284|
                  |L21.276|
;;;712            _DeselectItem(hObj, pObj);
000114  4621              MOV      r1,r4
000116  4640              MOV      r0,r8
000118  f7fffffe          BL       _DeselectItem
                  |L21.284|
;;;713          }
;;;714        }
;;;715        return 0;
00011c  2000              MOVS     r0,#0
                  |L21.286|
;;;716      } else {
;;;717        /* 
;;;718         * Handle PID when coordinates are outside the widget.
;;;719         */
;;;720        if ((Pressed == 1) && (PrevState.Pressed == 0)) {
;;;721          /* 
;;;722           * User has clicked outside the menu. Close the active submenu.
;;;723           * The widget itself must be closed (if needed) by the owner.
;;;724           */
;;;725          _DeactivateMenu(hObj, pObj);
;;;726          _ClosePopup(hObj, pObj);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -