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