edit.txt

来自「STM32F103ZET6+UCOSII+UCGUI源码」· 文本 代码 · 共 1,571 行 · 第 1/5 页

TXT
1,571
字号
;;;368          char* pText;
;;;369          pText = (char*) GUI_ALLOC_h2p(pObj->hpText);
000040  f9b40028          LDRSH    r0,[r4,#0x28]
000044  f7fffffe          BL       GUI_ALLOC_h2p
000048  4607              MOV      r7,r0
;;;370          CursorOffset = GUI_UC__NumChars2NumBytes(pText, pObj->CursorPos);
00004a  6c21              LDR      r1,[r4,#0x40]
00004c  f7fffffe          BL       GUI_UC__NumChars2NumBytes
;;;371          pText += CursorOffset;
000050  183c              ADDS     r4,r7,r0
;;;372          memmove(pText + BytesNeeded, pText, strlen(pText) + 1);
000052  4620              MOV      r0,r4
000054  f7fffffe          BL       strlen
000058  1c42              ADDS     r2,r0,#1
00005a  19a0              ADDS     r0,r4,r6
00005c  4621              MOV      r1,r4
00005e  f7fffffe          BL       __aeabi_memmove
;;;373          GUI_UC_Encode(pText, Char);
000062  4641              MOV      r1,r8
000064  4620              MOV      r0,r4
000066  f7fffffe          BL       GUI_UC_Encode
;;;374          WM_NotifyParent(hObj, WM_NOTIFICATION_VALUE_CHANGED);
00006a  2105              MOVS     r1,#5
00006c  4628              MOV      r0,r5
00006e  f7fffffe          BL       WM_NotifyParent
;;;375          return 1;
000072  2001              MOVS     r0,#1
                  |L18.116|
;;;376        }
;;;377      }
;;;378      return 0;
;;;379    }
000074  e8bd81f0          POP      {r4-r8,pc}
                  |L18.120|
000078  2000              MOVS     r0,#0                 ;378
00007a  e7fb              B        |L18.116|
;;;380    
                          ENDP


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

                  _IsSpaceInBuffer PROC
;;;295    */
;;;296    static int _IsSpaceInBuffer(EDIT_Obj* pObj, int BytesNeeded) {
000000  b570              PUSH     {r4-r6,lr}
000002  4604              MOV      r4,r0
000004  460d              MOV      r5,r1
;;;297      int NumBytes = 0;
;;;298      if (pObj->hpText) {
000006  f9b41028          LDRSH    r1,[r4,#0x28]
00000a  2000              MOVS     r0,#0                 ;297
00000c  b121              CBZ      r1,|L19.24|
00000e  4608              MOV      r0,r1
;;;299        NumBytes = strlen((char*)GUI_ALLOC_h2p(pObj->hpText));
000010  f7fffffe          BL       GUI_ALLOC_h2p
000014  f7fffffe          BL       strlen
                  |L19.24|
;;;300      }
;;;301      BytesNeeded = (BytesNeeded + NumBytes + 1) - pObj->BufferSize;
000018  8da1              LDRH     r1,[r4,#0x2c]
00001a  4428              ADD      r0,r0,r5
00001c  1a41              SUBS     r1,r0,r1
00001e  1c49              ADDS     r1,r1,#1
;;;302      if (BytesNeeded > 0) {
000020  2900              CMP      r1,#0
000022  dd05              BLE      |L19.48|
;;;303        if (!_IncrementBuffer(pObj, BytesNeeded + EDIT_REALLOC_SIZE)) {
000024  3110              ADDS     r1,r1,#0x10
000026  4620              MOV      r0,r4
000028  f7fffffe          BL       _IncrementBuffer
00002c  2800              CMP      r0,#0
00002e  d000              BEQ      |L19.50|
                  |L19.48|
;;;304          return 0;
;;;305        }
;;;306      }
;;;307      return 1;
000030  2001              MOVS     r0,#1
                  |L19.50|
;;;308    }
000032  bd70              POP      {r4-r6,pc}
;;;309    
                          ENDP


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

                  _Paint PROC
;;;131    */
;;;132    static void _Paint(EDIT_Obj* pObj, EDIT_Handle hObj) {
000000  e92d47f0          PUSH     {r4-r10,lr}
000004  4604              MOV      r4,r0
000006  b08a              SUB      sp,sp,#0x28
000008  4608              MOV      r0,r1
;;;133      GUI_RECT rFillRect, rInside, r, rText, rInvert;
;;;134      const char GUI_UNI_PTR * pText = NULL;
00000a  f04f0800          MOV      r8,#0
;;;135      int IsEnabled, CursorWidth;
;;;136      IsEnabled = WM__IsEnabled(hObj);
00000e  f7fffffe          BL       WM__IsEnabled
;;;137      /* Set colors and font */
;;;138      LCD_SetBkColor(pObj->Props.aBkColor[IsEnabled]);
000012  eb040080          ADD      r0,r4,r0,LSL #2
000016  6e80              LDR      r0,[r0,#0x68]
000018  f7fffffe          BL       LCD_SetBkColor
;;;139      LCD_SetColor(pObj->Props.aTextColor[0]);
00001c  6e20              LDR      r0,[r4,#0x60]
00001e  f7fffffe          BL       LCD_SetColor
;;;140      GUI_SetFont(pObj->Props.pFont);
000022  6de0              LDR      r0,[r4,#0x5c]
000024  f7fffffe          BL       GUI_SetFont
;;;141      /* Calculate size */
;;;142      WM__GetClientRectWin(&pObj->Widget.Win, &r);
000028  a904              ADD      r1,sp,#0x10
00002a  4620              MOV      r0,r4
00002c  f7fffffe          BL       WM__GetClientRectWin
;;;143      WIDGET__GetInsideRect(&pObj->Widget, &rFillRect);
000030  a908              ADD      r1,sp,#0x20
000032  4620              MOV      r0,r4
000034  f7fffffe          BL       WIDGET__GetInsideRect
;;;144      if (pObj->hpText) {
000038  f9b40028          LDRSH    r0,[r4,#0x28]
00003c  b110              CBZ      r0,|L20.68|
;;;145        pText = (const char*) GUI_ALLOC_h2p(pObj->hpText);
00003e  f7fffffe          BL       GUI_ALLOC_h2p
000042  4680              MOV      r8,r0
                  |L20.68|
;;;146      }
;;;147      rInside = rFillRect;
000044  e9dd0108          LDRD     r0,r1,[sp,#0x20]
;;;148      rInside.x0 += pObj->Props.Border + EDIT_XOFF;
000048  e9cd0106          STRD     r0,r1,[sp,#0x18]
00004c  f8bd1018          LDRH     r1,[sp,#0x18]
000050  6da0              LDR      r0,[r4,#0x58]
;;;149      rInside.x1 -= pObj->Props.Border + EDIT_XOFF;
;;;150      GUI__CalcTextRect(pText, &rInside, &rText, pObj->Props.Align);
000052  aa02              ADD      r2,sp,#8
000054  4401              ADD      r1,r1,r0              ;148
000056  1c49              ADDS     r1,r1,#1              ;148
000058  f8ad1018          STRH     r1,[sp,#0x18]         ;148
00005c  f8bd101c          LDRH     r1,[sp,#0x1c]         ;149
000060  1a08              SUBS     r0,r1,r0              ;149
000062  1e40              SUBS     r0,r0,#1              ;149
000064  f8ad001c          STRH     r0,[sp,#0x1c]         ;149
000068  a906              ADD      r1,sp,#0x18
00006a  4640              MOV      r0,r8
00006c  6d63              LDR      r3,[r4,#0x54]
00006e  f7fffffe          BL       GUI__CalcTextRect
;;;151      /* Calculate position and size of cursor */
;;;152      if (pObj->Widget.State & WIDGET_STATE_FOCUS) {
000072  8ce0              LDRH     r0,[r4,#0x26]
000074  07c0              LSLS     r0,r0,#31
000076  d045              BEQ      |L20.260|
;;;153        const char GUI_UNI_PTR * p = pText;
;;;154        CursorWidth = ((pObj->XSizeCursor > 0) ? (pObj->XSizeCursor) : (1));
000078  f8cd8004          STR      r8,[sp,#4]
00007c  f8940049          LDRB     r0,[r4,#0x49]
000080  2501              MOVS     r5,#1
000082  b100              CBZ      r0,|L20.134|
000084  4605              MOV      r5,r0
                  |L20.134|
;;;155        if (pText) {
000086  f1b80f00          CMP      r8,#0
00008a  d03b              BEQ      |L20.260|
;;;156          U16 Char;
;;;157          int i;
;;;158          if ((pObj->EditMode != GUI_EDIT_MODE_INSERT) || (pObj->SelSize)) {
00008c  f8940048          LDRB     r0,[r4,#0x48]
000090  b908              CBNZ     r0,|L20.150|
000092  6c60              LDR      r0,[r4,#0x44]
000094  b330              CBZ      r0,|L20.228|
                  |L20.150|
;;;159            int NumChars, CursorOffset;
;;;160            NumChars = GUI__GetNumChars(pText);
000096  4640              MOV      r0,r8
000098  f7fffffe          BL       GUI__GetNumChars
;;;161            if (pObj->CursorPos < NumChars) {
00009c  6c21              LDR      r1,[r4,#0x40]
00009e  4281              CMP      r1,r0
0000a0  da20              BGE      |L20.228|
;;;162              if (pObj->SelSize) {
0000a2  6c60              LDR      r0,[r4,#0x44]
0000a4  b1a8              CBZ      r0,|L20.210|
;;;163                CursorWidth = 0;
0000a6  2500              MOVS     r5,#0
;;;164                for (i = pObj->CursorPos; i < (int)(pObj->CursorPos + pObj->SelSize); i++) {
0000a8  460e              MOV      r6,r1
0000aa  e00a              B        |L20.194|
                  |L20.172|
;;;165                  CursorOffset = GUI_UC__NumChars2NumBytes(pText, i);
0000ac  4631              MOV      r1,r6
0000ae  4640              MOV      r0,r8
0000b0  f7fffffe          BL       GUI_UC__NumChars2NumBytes
;;;166                  Char         = GUI_UC_GetCharCode      (pText + CursorOffset);
0000b4  4440              ADD      r0,r0,r8
0000b6  f7fffffe          BL       GUI_UC_GetCharCode
;;;167                  CursorWidth += GUI_GetCharDistX        (Char);
0000ba  f7fffffe          BL       GUI_GetCharDistX
0000be  4405              ADD      r5,r5,r0
0000c0  1c76              ADDS     r6,r6,#1              ;164
                  |L20.194|
0000c2  e9d40110          LDRD     r0,r1,[r4,#0x40]      ;164
0000c6  4408              ADD      r0,r0,r1              ;164
0000c8  42b0              CMP      r0,r6                 ;164
0000ca  dcef              BGT      |L20.172|
;;;168                }
;;;169                if (!CursorWidth) {
0000cc  b955              CBNZ     r5,|L20.228|
;;;170                  CursorWidth = 1;
0000ce  2501              MOVS     r5,#1
0000d0  e008              B        |L20.228|
                  |L20.210|
;;;171                }
;;;172              } else {
;;;173                CursorOffset = GUI_UC__NumChars2NumBytes(pText, pObj->CursorPos);
0000d2  4640              MOV      r0,r8
0000d4  f7fffffe          BL       GUI_UC__NumChars2NumBytes
;;;174                Char = GUI_UC_GetCharCode(pText + CursorOffset);
0000d8  4440              ADD      r0,r0,r8
0000da  f7fffffe          BL       GUI_UC_GetCharCode
;;;175                CursorWidth = GUI_GetCharDistX(Char);
0000de  f7fffffe          BL       GUI_GetCharDistX
0000e2  4605              MOV      r5,r0
                  |L20.228|
;;;176              }
;;;177            }
;;;178          }
;;;179          rInvert = rText;
;;;180          for (i = 0; i != pObj->CursorPos; i++) {
0000e4  e9dd6902          LDRD     r6,r9,[sp,#8]
0000e8  2700              MOVS     r7,#0
0000ea  e008              B        |L20.254|
                  |L20.236|
;;;181            Char = GUI_UC__GetCharCodeInc(&p);
0000ec  a801              ADD      r0,sp,#4
0000ee  f7fffffe          BL       GUI_UC__GetCharCodeInc
;;;182            rInvert.x0 += GUI_GetCharDistX(Char);
0000f2  f7fffffe          BL       GUI_GetCharDistX
0000f6  4430              ADD      r0,r0,r6
0000f8  f360060f          BFI      r6,r0,#0,#16
0000fc  1c7f              ADDS     r7,r7,#1              ;180
                  |L20.254|
0000fe  6c20              LDR      r0,[r4,#0x40]         ;180
000100  42b8              CMP      r0,r7                 ;180
000102  d1f3              BNE      |L20.236|
                  |L20.260|
;;;183          }
;;;184        }
;;;185      }
;;;186      /* WM loop */
;;;187      WM_ITERATE_START(NULL) {
000104  2000              MOVS     r0,#0
000106  f7fffffe          BL       WM__InitIVRSearch
00010a  2800              CMP      r0,#0
00010c  d022              BEQ      |L20.340|
;;;188        /* Set clipping rectangle */
;;;189        WM_SetUserClipRect(&rFillRect);
;;;190        /* Display text */
;;;191        WIDGET__FillStringInRect(pText, &rFillRect, &rInside, &rText);
;;;192        /* Display cursor if needed */
;;;193        if (pObj->Widget.State & WIDGET_STATE_FOCUS) {
;;;194          GUI_InvertRect(rInvert.x0, rInvert.y0, rInvert.x0 + CursorWidth - 1, rInvert.y1);
00010e  ea4f4a26          ASR      r10,r6,#16
000112  1e6d              SUBS     r5,r5,#1
000114  b236              SXTH     r6,r6
000116  4435              ADD      r5,r5,r6
000118  ea4f4729          ASR      r7,r9,#16
                  |L20.284|
00011c  a808              ADD      r0,sp,#0x20           ;189
00011e  f7fffffe          BL       WM_SetUserClipRect
000122  ab02              ADD      r3,sp,#8              ;191
000124  aa06              ADD      r2,sp,#0x18           ;191
000126  a908              ADD      r1,sp,#0x20           ;191
000128  4640              MOV      r0,r8                 ;191
00012a  f7fffffe          BL       WIDGET__FillStringInRect
00012e  8ce0              LDRH     r0,[r4,#0x26]         ;193
000130  07c0              LSLS     r0,r0,#31             ;193
000132  d005              BEQ      |L20.320|
000134  463b              MOV      r3,r7                 ;193
000136  462a              MOV      r2,r5                 ;193
000138  4651              MOV      r1,r10                ;193
00013a  4630              MOV      r0,r6                 ;193
00013c  f7fffffe          BL       GUI_InvertRect
                  |L20.320|
;;;195        }
;;;196        WM_SetUserClipRect(NULL);
000140  2000              MOVS     r0,#0
000142  f7fffffe          BL       WM_SetUserClipRect
;;;197        /* Draw the 3D effect (if configured) */
;;;198        WIDGET__EFFECT_DrawDown(&pObj->Widget);
000146  4620              MOV      r0,r4
000148  f7fffffe          BL       WIDGET__EFFECT_DrawDown
;;;199      } WM_ITERATE_END();
00014c  f7fffffe          BL       WM__GetNextIVR
000150  2800              CMP      r0,#0
000152  d1e3              BNE      |L20.284|
                  |L20.340|
;;;200    }
000154  b00a              ADD      sp,sp,#0x28
000156  e8bd87f0          POP      {r4-r10,pc}
;;;201    
                          ENDP


                          AREA ||.data||, DATA, ALIGN=2

                  EDIT__DefaultProps
                          DCD      0x0000000c
                          DCD      0x00000001
                          DCD      GUI_Fon

⌨️ 快捷键说明

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