wm_resizewindow.txt
来自「STM32F103ZET6+UCOSII+UCGUI源码」· 文本 代码 · 共 123 行
TXT
123 行
; generated by ARM C/C++ Compiler with , RVCT4.0 [Build 524] for uVision
; commandline ArmCC [--split_sections --debug -c --asm --interleave -o.\Obj\wm_resizewindow.o --depend=.\Obj\wm_resizewindow.d --device=DARMSTM --apcs=interwork -O3 -I..\..\include -I..\..\..\FWLib\library\inc -I..\..\..\USBLib\library\inc -I..\..\Config -I..\..\GUI\Core -I..\..\GUI\Font -I..\..\GUI\ConvertColor -I..\..\GUI\AntiAlias -I..\..\GUI\ConvertMono -I..\..\GUI\JPEG -I..\..\GUI\MemDev -I..\..\GUI\MultiLayer -I..\..\GUI\Widget -I..\..\GUI\WM -IC:\Keil\ARM\INC\ST\STM32F10x ..\..\GUI\WM\WM_ResizeWindow.c]
THUMB
AREA ||i.WM_ResizeWindow||, CODE, READONLY, ALIGN=1
WM_ResizeWindow PROC
;;;36 */
;;;37 void WM_ResizeWindow(WM_HWIN hWin, int dx, int dy) {
000000 b5f0 PUSH {r4-r7,lr}
000002 4607 MOV r7,r0
000004 b087 SUB sp,sp,#0x1c
000006 460d MOV r5,r1
000008 4616 MOV r6,r2
;;;38 GUI_RECT rOld, rNew, rMerge;
;;;39 WM_Obj* pWin;
;;;40 if (((dx | dy) == 0) || (hWin == 0)){ /* Early out if there is nothing to do */
00000a ea510002 ORRS r0,r1,r2
00000e d05c BEQ |L1.202|
000010 2f00 CMP r7,#0
000012 d05a BEQ |L1.202|
;;;41 return;
;;;42 }
;;;43 WM_LOCK();
;;;44 pWin = WM_HANDLE2PTR(hWin);
000014 4638 MOV r0,r7
000016 f7fffffe BL GUI_ALLOC_h2p
00001a 4604 MOV r4,r0
;;;45 rOld = pWin->Rect;
00001c e9d01000 LDRD r1,r0,[r0,#0]
;;;46 rNew = rOld;
000020 e9cd1005 STRD r1,r0,[sp,#0x14]
000024 4608 MOV r0,r1
000026 9906 LDR r1,[sp,#0x18]
;;;47 if (dx) {
000028 e9cd0103 STRD r0,r1,[sp,#0xc]
00002c b17d CBZ r5,|L1.78|
;;;48 if ((pWin->Status & WM_SF_ANCHOR_RIGHT) && (!(pWin->Status & WM_SF_ANCHOR_LEFT))) {
00002e 8ba0 LDRH r0,[r4,#0x1c]
000030 0601 LSLS r1,r0,#24
000032 d507 BPL |L1.68|
000034 0580 LSLS r0,r0,#22
000036 d405 BMI |L1.68|
;;;49 rNew.x0 -= dx;
000038 f8bd000c LDRH r0,[sp,#0xc]
00003c 1b40 SUBS r0,r0,r5
00003e f8ad000c STRH r0,[sp,#0xc]
000042 e004 B |L1.78|
|L1.68|
;;;50 } else {
;;;51 rNew.x1 += dx;
000044 f8bd0010 LDRH r0,[sp,#0x10]
000048 4428 ADD r0,r0,r5
00004a f8ad0010 STRH r0,[sp,#0x10]
|L1.78|
;;;52 }
;;;53 }
;;;54 if (dy) {
00004e b17e CBZ r6,|L1.112|
;;;55 if ((pWin->Status & WM_SF_ANCHOR_BOTTOM) && (!(pWin->Status & WM_SF_ANCHOR_TOP))) {
000050 8ba0 LDRH r0,[r4,#0x1c]
000052 05c1 LSLS r1,r0,#23
000054 d507 BPL |L1.102|
000056 0540 LSLS r0,r0,#21
000058 d405 BMI |L1.102|
;;;56 rNew.y0 -= dy;
00005a f8bd000e LDRH r0,[sp,#0xe]
00005e 1b80 SUBS r0,r0,r6
000060 f8ad000e STRH r0,[sp,#0xe]
000064 e004 B |L1.112|
|L1.102|
;;;57 } else {
;;;58 rNew.y1 += dy;
000066 f8bd0012 LDRH r0,[sp,#0x12]
00006a 4430 ADD r0,r0,r6
00006c f8ad0012 STRH r0,[sp,#0x12]
|L1.112|
;;;59 }
;;;60 }
;;;61 GUI_MergeRect(&rMerge, &rOld, &rNew);
000070 aa03 ADD r2,sp,#0xc
000072 a905 ADD r1,sp,#0x14
000074 a801 ADD r0,sp,#4
000076 f7fffffe BL GUI_MergeRect
;;;62 pWin->Rect = rNew;
00007a e9dd0103 LDRD r0,r1,[sp,#0xc]
;;;63 WM_InvalidateArea(&rMerge);
00007e e9c40100 STRD r0,r1,[r4,#0]
000082 a801 ADD r0,sp,#4
000084 f7fffffe BL WM_InvalidateArea
;;;64 WM__UpdateChildPositions(pWin, rNew.x0 - rOld.x0, rNew.y0 - rOld.y0, rNew.x1 - rOld.x1, rNew.y1 - rOld.y1);
000088 f9bd0012 LDRSH r0,[sp,#0x12]
00008c f9bd101a LDRSH r1,[sp,#0x1a]
000090 1a43 SUBS r3,r0,r1
000092 f9bd0010 LDRSH r0,[sp,#0x10]
000096 f9bd1018 LDRSH r1,[sp,#0x18]
00009a 9300 STR r3,[sp,#0]
00009c 1a43 SUBS r3,r0,r1
00009e f9bd000e LDRSH r0,[sp,#0xe]
0000a2 f9bd1016 LDRSH r1,[sp,#0x16]
0000a6 1a42 SUBS r2,r0,r1
0000a8 f9bd000c LDRSH r0,[sp,#0xc]
0000ac f9bd1014 LDRSH r1,[sp,#0x14]
0000b0 1a41 SUBS r1,r0,r1
0000b2 4620 MOV r0,r4
0000b4 f7fffffe BL WM__UpdateChildPositions
;;;65 GUI__IntersectRect(&pWin->InvalidRect, &pWin->Rect); /* Make sure invalid area is not bigger than window itself */
0000b8 4621 MOV r1,r4
0000ba f1040008 ADD r0,r4,#8
0000be f7fffffe BL GUI__IntersectRect
;;;66 WM__SendMsgNoData(hWin, WM_SIZE); /* Send size message to the window */
0000c2 2105 MOVS r1,#5
0000c4 4638 MOV r0,r7
0000c6 f7fffffe BL WM__SendMsgNoData
|L1.202|
;;;67 WM_UNLOCK();
;;;68 }
0000ca b007 ADD sp,sp,#0x1c
0000cc bdf0 POP {r4-r7,pc}
;;;69
ENDP
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?