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 + -
显示快捷键?