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

📄 wm.txt

📁 STM32F103ZET6+UCOSII+UCGUI源码
💻 TXT
📖 第 1 页 / 共 5 页
字号:
;;;996    }
000006  4770              BX       lr
;;;997    
                          ENDP

                  |L9.8|
                          DCD      GUI_Context

                          AREA ||i.WM_Init||, CODE, READONLY, ALIGN=2

                  WM_Init PROC
;;;1694   */
;;;1695   void WM_Init(void) {
000000  b53e              PUSH     {r1-r5,lr}
;;;1696   	if (!_IsInited) {
000002  4c16              LDR      r4,|L10.92|
000004  78a0              LDRB     r0,[r4,#2]  ; _IsInited
000006  2800              CMP      r0,#0
000008  d127              BNE      |L10.90|
;;;1697   	  NextDrawWin = WM__FirstWin = WM_HWIN_NULL;
00000a  8120              STRH     r0,[r4,#8]
;;;1698   	  GUI_Context.WM__pUserClipRect = NULL;
00000c  4914              LDR      r1,|L10.96|
00000e  82a0              STRH     r0,[r4,#0x14]         ;1697
;;;1699   	  WM__NumWindows = WM__NumInvalidWindows =0;
000010  6388              STR      r0,[r1,#0x38]  ; GUI_Context
000012  80e0              STRH     r0,[r4,#6]
000014  80a0              STRH     r0,[r4,#4]
;;;1700   	  /* Make sure we have at least one window. This greatly simplifies the
;;;1701   		  drawing routines as they do not have to check if the window is valid.
;;;1702   	  */
;;;1703       #if GUI_NUM_LAYERS == 1
;;;1704         WM__ahDesktopWin[0] = WM_CreateWindow(0, 0, GUI_XMAX, GUI_YMAX, WM_CF_SHOW, cbBackWin, 0);
000016  4a13              LDR      r2,|L10.100|
000018  2102              MOVS     r1,#2
00001a  e9cd1200          STRD     r1,r2,[sp,#0]
00001e  f64072ff          MOV      r2,#0xfff
000022  9002              STR      r0,[sp,#8]
000024  4613              MOV      r3,r2
000026  4601              MOV      r1,r0
000028  f7fffffe          BL       WM_CreateWindow
00002c  f104050a          ADD      r5,r4,#0xa
000030  8028              STRH     r0,[r5,#0]
;;;1705         WM__aBkColor[0] = GUI_INVALID_COLOR;
000032  f06f4170          MVN      r1,#0xf0000000
000036  f104021c          ADD      r2,r4,#0x1c
;;;1706         WM_InvalidateWindow(WM__ahDesktopWin[0]); /* Required because a desktop window has no parent. */
00003a  6011              STR      r1,[r2,#0]  ; WM__aBkColor
00003c  f7fffffe          BL       WM_InvalidateWindow
;;;1707       #else
;;;1708       {
;;;1709         int i;
;;;1710         for (i = 0; i < GUI_NUM_LAYERS; i++) {
;;;1711           WM__ahDesktopWin[i] = WM_CreateWindowAsChild(0, 0, GUI_XMAX, GUI_YMAX, WM_UNATTACHED, WM_CF_SHOW, cbBackWin, 0);
;;;1712           WM__aBkColor[i] = GUI_INVALID_COLOR;
;;;1713           WM_InvalidateWindow(WM__ahDesktopWin[i]); /* Required because a desktop window has no parent. */
;;;1714         }
;;;1715       }
;;;1716       #endif
;;;1717       /* Register the critical handles ... Note: This could be moved into the module setting the Window handle */
;;;1718       WM__AddCriticalHandle(&WM__CHWinModal);
000040  4809              LDR      r0,|L10.104|
000042  f7fffffe          BL       WM__AddCriticalHandle
;;;1719       WM__AddCriticalHandle(&WM__CHWinLast);
000046  4809              LDR      r0,|L10.108|
000048  f7fffffe          BL       WM__AddCriticalHandle
;;;1720   
;;;1721       WM_SelectWindow(WM__ahDesktopWin[0]);
00004c  f9b50000          LDRSH    r0,[r5,#0]  ; WM__ahDesktopWin
000050  f7fffffe          BL       WM_SelectWindow
000054  2001              MOVS     r0,#1
000056  7020              STRB     r0,[r4,#0]
;;;1722   	  WM_Activate();
;;;1723       _IsInited =1;
000058  70a0              STRB     r0,[r4,#2]
                  |L10.90|
;;;1724   	}
;;;1725   }
00005a  bd3e              POP      {r1-r5,pc}
;;;1726   
                          ENDP

                  |L10.92|
                          DCD      ||.data||
                  |L10.96|
                          DCD      GUI_Context
                  |L10.100|
                          DCD      cbBackWin
                  |L10.104|
                          DCD      WM__CHWinModal
                  |L10.108|
                          DCD      WM__CHWinLast

                          AREA ||i.WM_InvalidateArea||, CODE, READONLY, ALIGN=2

                  WM_InvalidateArea PROC
;;;781    */
;;;782    void WM_InvalidateArea(const GUI_RECT* pRect) {
000000  b570              PUSH     {r4-r6,lr}
000002  4605              MOV      r5,r0
;;;783      WM_HWIN   hWin;
;;;784      WM_LOCK();
;;;785      /* Iterate over all windows */
;;;786      for (hWin = WM__FirstWin; hWin; hWin = WM_H2P(hWin)->hNextLin) {
000004  4807              LDR      r0,|L11.36|
000006  f9b04008          LDRSH    r4,[r0,#8]  ; WM__FirstWin
00000a  e008              B        |L11.30|
                  |L11.12|
;;;787        _Invalidate1Abs(hWin, pRect);
00000c  4629              MOV      r1,r5
00000e  4620              MOV      r0,r4
000010  f7fffffe          BL       _Invalidate1Abs
000014  4620              MOV      r0,r4                 ;786
000016  f7fffffe          BL       GUI_ALLOC_h2p
00001a  f9b04014          LDRSH    r4,[r0,#0x14]         ;786
                  |L11.30|
00001e  2c00              CMP      r4,#0                 ;786
000020  d1f4              BNE      |L11.12|
;;;788      }
;;;789      WM_UNLOCK();
;;;790    }
000022  bd70              POP      {r4-r6,pc}
;;;791    
                          ENDP

                  |L11.36|
                          DCD      ||.data||

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

                  WM_InvalidateRect PROC
;;;735    */
;;;736    void WM_InvalidateRect(WM_HWIN hWin, const GUI_RECT*pRect) {
000000  e92d41ff          PUSH     {r0-r8,lr}
000004  0006              MOVS     r6,r0
000006  460f              MOV      r7,r1
;;;737      GUI_RECT r;
;;;738      WM_Obj* pWin;
;;;739      int Status;
;;;740      if (hWin) {
000008  d026              BEQ      |L12.88|
;;;741        WM_LOCK();
;;;742        pWin = WM_H2P(hWin);
00000a  4630              MOV      r0,r6
00000c  f7fffffe          BL       GUI_ALLOC_h2p
;;;743        Status = pWin->Status;
000010  8b85              LDRH     r5,[r0,#0x1c]
000012  4604              MOV      r4,r0                 ;742
;;;744        if (Status & WM_SF_ISVIS) {
000014  07a8              LSLS     r0,r5,#30
000016  d51f              BPL      |L12.88|
;;;745          r = pWin->Rect;
000018  e9d40100          LDRD     r0,r1,[r4,#0]
;;;746          if (pRect) {
00001c  e9cd0102          STRD     r0,r1,[sp,#8]
000020  b167              CBZ      r7,|L12.60|
;;;747            GUI_RECT rPara;
;;;748            rPara = *pRect;
000022  2208              MOVS     r2,#8
000024  4639              MOV      r1,r7
000026  4668              MOV      r0,sp
000028  f7fffffe          BL       __aeabi_memcpy
;;;749            WM__Client2Screen(pWin, &rPara);
00002c  4669              MOV      r1,sp
00002e  4620              MOV      r0,r4
000030  f7fffffe          BL       WM__Client2Screen
;;;750            GUI__IntersectRect(&r, &rPara);
000034  4669              MOV      r1,sp
000036  a802              ADD      r0,sp,#8
000038  f7fffffe          BL       GUI__IntersectRect
                  |L12.60|
;;;751          }
;;;752          if (WM__ClipAtParentBorders(&r, hWin)) {      /* Optimization that saves invalidation if window area is not visible ... Not required */
00003c  4631              MOV      r1,r6
00003e  a802              ADD      r0,sp,#8
000040  f7fffffe          BL       WM__ClipAtParentBorders
000044  2800              CMP      r0,#0
000046  d007              BEQ      |L12.88|
;;;753            if ((Status & (WM_SF_HASTRANS | WM_SF_CONST_OUTLINE)) == WM_SF_HASTRANS) {
000048  f6400001          MOV      r0,#0x801
00004c  4005              ANDS     r5,r5,r0
00004e  2d01              CMP      r5,#1
000050  d104              BNE      |L12.92|
000052  a802              ADD      r0,sp,#8
000054  f7fffffe          BL       WM_InvalidateArea
                  |L12.88|
;;;754              WM__InvalidateAreaBelow(&r, hWin);        /* Can be optimized to spare windows above */
;;;755            } else {
;;;756              _Invalidate1Abs(hWin, &r);
;;;757            }
;;;758          }
;;;759        }
;;;760        WM_UNLOCK();
;;;761      }
;;;762    }
000058  e8bd81ff          POP      {r0-r8,pc}
                  |L12.92|
00005c  a902              ADD      r1,sp,#8              ;756
00005e  4630              MOV      r0,r6                 ;756
000060  f7fffffe          BL       _Invalidate1Abs
000064  e7f8              B        |L12.88|
;;;763    
                          ENDP


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

                  WM_InvalidateWindow PROC
;;;769    */
;;;770    void WM_InvalidateWindow(WM_HWIN hWin) {
000000  2100              MOVS     r1,#0
;;;771      WM_InvalidateRect(hWin, NULL);
000002  f7ffbffe          B.W      WM_InvalidateRect
;;;772    }
;;;773    
                          ENDP


                          AREA ||i.WM_SelectWindow||, CODE, READONLY, ALIGN=2

                  WM_SelectWindow PROC
;;;958    */
;;;959    WM_HWIN WM_SelectWindow(WM_HWIN  hWin) {
000000  b570              PUSH     {r4-r6,lr}
;;;960      WM_HWIN hWinPrev;
;;;961      WM_Obj* pObj;
;;;962    
;;;963      WM_ASSERT_NOT_IN_PAINT();
;;;964      WM_LOCK();
;;;965      hWinPrev = GUI_Context.hAWin;
000002  4c0a              LDR      r4,|L14.44|
000004  f9b4603c          LDRSH    r6,[r4,#0x3c]  ; GUI_Context
;;;966      if (hWin == 0) {
000008  b910              CBNZ     r0,|L14.16|
;;;967        hWin = WM__FirstWin;
00000a  4809              LDR      r0,|L14.48|
00000c  f9b00008          LDRSH    r0,[r0,#8]  ; WM__FirstWin
                  |L14.16|
;;;968      }
;;;969      /* Select new window */
;;;970      GUI_Context.hAWin = hWin;
000010  87a0              STRH     r0,[r4,#0x3c]
;;;971      #if GUI_NUM_LAYERS > 1
;;;972      {
;;;973        WM_HWIN hTop;
;;;974        int LayerIndex;
;;;975        hTop = _GetTopLevelWindow(hWin);
;;;976        LayerIndex = _DesktopHandle2Index(hTop);
;;;977        if (LayerIndex >= 0) {
;;;978          GUI_SelectLayer(LayerIndex);
;;;979        }
;;;980      }
;;;981      #endif
;;;982      pObj = WM_H2P(hWin);
000012  f7fffffe          BL       GUI_ALLOC_h2p
000016  4605              MOV      r5,r0
;;;983      LCD_SetClipRectMax();             /* Drawing operations will clip ... If WM is deactivated, allow all */
000018  f7fffffe          BL       LCD_SetClipRectMax
;;;984      GUI_Context.xOff = pObj->Rect.x0;
00001c  f9b50000          LDRSH    r0,[r5,#0]
;;;985      GUI_Context.yOff = pObj->Rect.y0;
000020  6420              STR      r0,[r4,#0x40]  ; GUI_Context
000022  f9b50002          LDRSH    r0,[r5,#2]
;;;986      WM_UNLOCK();
;;;987      return hWinPrev;
000026  6460              STR      r0,[r4,#0x44]  ; GUI_Context
000028  4630              MOV      r0,r6
;;;988    }
00002a  bd70              POP      {r4-r6,pc}
;;;989    
                          ENDP

                  |L14.44|
                          DCD      GUI_Context
                  |L14.48|
                          DCD      ||.data||

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

                  WM_SendMessage PROC
;;;676    */
;;;677    void WM_SendMessage(WM_HWIN hWin, WM_MESSAGE* pMsg) {
000000  b570              PUSH     {r4-r6,lr}
000002  0004              MOVS     r4,r0
000004  460d              MOV      r5,r1
;;;678      if (hWin) {
000006  d00b              BEQ      |L15.32|
;;;679        WM_Obj* pWin;
;;;680        WM_LOCK();
;;;681        pWin = WM_H2P(hWin);
000008  4620              MOV      r0,r4
00000a  f7fffffe          BL       GUI_ALLOC_h2p
;;;682        if (pWin->cb != NULL) {
00000e  6901              LDR      r1,[r0,#0x10]
000010  2900              CMP      r1,#0
000012  d005              BEQ      |L15.32|
;;;683          pMsg->hWin = hWin;
000014  80ac              STRH     r4,[r5,#4]
;;;684          (*pWin->cb)(pMsg);
000016  6901              LDR      r1,[r0,#0x10]
000018  4628              MOV      r0,r5
00001a  e8bd4070          POP      {r4-r6,lr}
00001e  4708              BX       r1
                  |L15.32|

⌨️ 快捷键说明

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