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

📄 wmtouch.txt

📁 STM32F103ZET6+UCOSII+UCGUI源码
💻 TXT
📖 第 1 页 / 共 2 页
字号:
; generated by ARM C/C++ Compiler with , RVCT4.0 [Build 524] for uVision
; commandline ArmCC [--split_sections --debug -c --asm --interleave -o.\Obj\wmtouch.o --depend=.\Obj\wmtouch.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\WMTouch.c]
                          THUMB

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

                  WM_HandlePID PROC
;;;132    */
;;;133    int WM_HandlePID(void) {
000000  e92d43f0          PUSH     {r4-r9,lr}
000004  b08f              SUB      sp,sp,#0x3c
;;;134      int r = 0;
000006  2700              MOVS     r7,#0
;;;135      WM_MESSAGE Msg;
;;;136      WM_CRITICAL_HANDLE CHWin;
;;;137      GUI_PID_STATE State, StateNew;
;;;138      GUI_PID_GetState(&StateNew);
000008  a804              ADD      r0,sp,#0x10
00000a  f7fffffe          BL       GUI_PID_GetState
;;;139      WM_LOCK();
;;;140      WM__AddCriticalHandle(&CHWin);
00000e  a80a              ADD      r0,sp,#0x28
000010  f7fffffe          BL       WM__AddCriticalHandle
;;;141      if ((WM_PID__StateLast.x != StateNew.x) || (WM_PID__StateLast.y != StateNew.y) || (WM_PID__StateLast.Pressed != StateNew.Pressed)) {
000014  4c47              LDR      r4,|L1.308|
000016  9904              LDR      r1,[sp,#0x10]
000018  6820              LDR      r0,[r4,#0]  ; WM_PID__StateLast
00001a  4288              CMP      r0,r1
00001c  d108              BNE      |L1.48|
00001e  6860              LDR      r0,[r4,#4]  ; WM_PID__StateLast
000020  9905              LDR      r1,[sp,#0x14]
000022  4288              CMP      r0,r1
000024  d104              BNE      |L1.48|
000026  7a20              LDRB     r0,[r4,#8]  ; WM_PID__StateLast
000028  f89d1018          LDRB     r1,[sp,#0x18]
00002c  4288              CMP      r0,r1
00002e  d07a              BEQ      |L1.294|
                  |L1.48|
000030  4841              LDR      r0,|L1.312|
000032  f9b00000          LDRSH    r0,[r0,#0]  ; WM__hCapture
000036  b918              CBNZ     r0,|L1.64|
000038  e9dd0104          LDRD     r0,r1,[sp,#0x10]
00003c  f7fffffe          BL       WM_Screen2hWin
                  |L1.64|
;;;142        #if GUI_SUPPORT_CURSOR
;;;143          GUI_CURSOR_SetPosition(StateNew.x, StateNew.y);
;;;144        #endif
;;;145        CHWin.hWin = _Screen2Win(&StateNew);
000040  f8ad002c          STRH     r0,[sp,#0x2c]
;;;146        if (WM__IsInModalArea(CHWin.hWin)) {
000044  f9bd002c          LDRSH    r0,[sp,#0x2c]
000048  f7fffffe          BL       WM__IsInModalArea
00004c  f10d0910          ADD      r9,sp,#0x10           ;137
000050  2800              CMP      r0,#0
000052  d065              BEQ      |L1.288|
;;;147          /*
;;;148           * Send WM_PID_STATE_CHANGED message if state has changed (just pressed or just released)
;;;149           */
;;;150          if ((WM_PID__StateLast.Pressed != StateNew.Pressed) && CHWin.hWin) {
000054  7a21              LDRB     r1,[r4,#8]  ; WM_PID__StateLast
000056  f89d0018          LDRB     r0,[sp,#0x18]
00005a  4281              CMP      r1,r0
00005c  d020              BEQ      |L1.160|
00005e  f8bd002c          LDRH     r0,[sp,#0x2c]
000062  b1e8              CBZ      r0,|L1.160|
;;;151            WM_PID_STATE_CHANGED_INFO Info;
;;;152            WM_Obj* pWin;
;;;153            pWin = WM_H2P(CHWin.hWin);
000064  f9bd002c          LDRSH    r0,[sp,#0x2c]
000068  f7fffffe          BL       GUI_ALLOC_h2p
;;;154            Info.State     = StateNew.Pressed;
00006c  f89d1018          LDRB     r1,[sp,#0x18]
000070  f88d100c          STRB     r1,[sp,#0xc]
;;;155            Info.StatePrev = WM_PID__StateLast.Pressed;
000074  7a21              LDRB     r1,[r4,#8]  ; WM_PID__StateLast
000076  f88d100d          STRB     r1,[sp,#0xd]
;;;156            Info.x         = StateNew.x - pWin->Rect.x0;
00007a  f9b02000          LDRSH    r2,[r0,#0]
00007e  9904              LDR      r1,[sp,#0x10]
000080  1a89              SUBS     r1,r1,r2
;;;157            Info.y         = StateNew.y - pWin->Rect.y0;
000082  9101              STR      r1,[sp,#4]
000084  f9b00002          LDRSH    r0,[r0,#2]
000088  9905              LDR      r1,[sp,#0x14]
00008a  1a08              SUBS     r0,r1,r0
;;;158            Msg.Data.p = &Info;
00008c  9002              STR      r0,[sp,#8]
00008e  a801              ADD      r0,sp,#4
;;;159            Msg.MsgId  = WM_PID_STATE_CHANGED;
000090  900e              STR      r0,[sp,#0x38]
000092  2011              MOVS     r0,#0x11
;;;160            WM__SendMessageIfEnabled(CHWin.hWin, &Msg);
000094  900c              STR      r0,[sp,#0x30]
000096  f9bd002c          LDRSH    r0,[sp,#0x2c]
00009a  a90c              ADD      r1,sp,#0x30
00009c  f7fffffe          BL       WM__SendMessageIfEnabled
                  |L1.160|
;;;161          }
;;;162          /*
;;;163           * Send WM_TOUCH message(s)
;;;164           * Note that we may have to send 2 touch messages.
;;;165           */
;;;166          if (WM_PID__StateLast.Pressed | StateNew.Pressed) {    /* Only if pressed or just released */
0000a0  7a21              LDRB     r1,[r4,#8]  ; WM_PID__StateLast
0000a2  f89d0018          LDRB     r0,[sp,#0x18]
0000a6  4301              ORRS     r1,r1,r0
0000a8  d03a              BEQ      |L1.288|
;;;167            Msg.MsgId = WM_TOUCH;
0000aa  210c              MOVS     r1,#0xc
;;;168            r = 1;
;;;169            /*
;;;170             * Tell window if it is no longer pressed
;;;171             * This happens for 2 possible reasons:
;;;172             * a) PID is released
;;;173             * b) PID is moved out
;;;174             */
;;;175            if (WM__CHWinLast.hWin != CHWin.hWin) {
0000ac  4d23              LDR      r5,|L1.316|
0000ae  910c              STR      r1,[sp,#0x30]
0000b0  f9b51004          LDRSH    r1,[r5,#4]  ; WM__CHWinLast
0000b4  2701              MOVS     r7,#1                 ;168
0000b6  f9bd202c          LDRSH    r2,[sp,#0x2c]
0000ba  2600              MOVS     r6,#0                 ;134
0000bc  f10d081c          ADD      r8,sp,#0x1c           ;137
0000c0  4291              CMP      r1,r2
0000c2  d012              BEQ      |L1.234|
;;;176              if (WM__CHWinLast.hWin != 0) {
0000c4  88a9              LDRH     r1,[r5,#4]  ; WM__CHWinLast
0000c6  b181              CBZ      r1,|L1.234|
;;;177                if (StateNew.Pressed) {
0000c8  b108              CBZ      r0,|L1.206|
;;;178                  /* Moved out -> no longer in this window
;;;179                   * Send a NULL pointer as data
;;;180                   */
;;;181                  Msg.Data.p = NULL;
0000ca  960e              STR      r6,[sp,#0x38]
0000cc  e007              B        |L1.222|
                  |L1.206|
;;;182                } else {
;;;183                  /* Last window needs to know that it has been "Released"
;;;184                   * Send last coordinates 
;;;185                   */
;;;186                  State.x       = WM_PID__StateLast.x;
0000ce  6820              LDR      r0,[r4,#0]  ; WM_PID__StateLast
;;;187                  State.y       = WM_PID__StateLast.y;
0000d0  9007              STR      r0,[sp,#0x1c]
0000d2  6860              LDR      r0,[r4,#4]  ; WM_PID__StateLast
;;;188                  State.Pressed = 0;
0000d4  f88d6024          STRB     r6,[sp,#0x24]
0000d8  9008              STR      r0,[sp,#0x20]
;;;189                  Msg.Data.p = (void*)&State;
0000da  f8cd8038          STR      r8,[sp,#0x38]
                  |L1.222|
;;;190                }
;;;191                GUI_DEBUG_LOG1 ("\nSending WM_Touch to LastWindow %d (out of area)", WM__CHWinLast.hWin);
;;;192                WM__SendTouchMessage(WM__CHWinLast.hWin, &Msg);
0000de  f9b50004          LDRSH    r0,[r5,#4]  ; WM__CHWinLast
0000e2  a90c              ADD      r1,sp,#0x30
0000e4  f7fffffe          BL       WM__SendTouchMessage
;;;193                WM__CHWinLast.hWin = 0;
0000e8  80ae              STRH     r6,[r5,#4]
                  |L1.234|
;;;194              }
;;;195            }
;;;196            /* Sending WM_Touch to current window */
;;;197            if (CHWin.hWin) {
0000ea  f8bd002c          LDRH     r0,[sp,#0x2c]
0000ee  b1b8              CBZ      r0,|L1.288|
;;;198              /* convert screen into window coordinates */
;;;199              State = StateNew;
0000f0  4649              MOV      r1,r9
0000f2  c90e              LDM      r1,{r1-r3}
0000f4  4640              MOV      r0,r8
0000f6  c00e              STM      r0!,{r1-r3}
;;;200              /* Remember window */
;;;201              if (State.Pressed) {
0000f8  f89d0024          LDRB     r0,[sp,#0x24]
0000fc  b118              CBZ      r0,|L1.262|
;;;202                WM__CHWinLast.hWin = CHWin.hWin;
0000fe  f8bd002c          LDRH     r0,[sp,#0x2c]
000102  80a8              STRH     r0,[r5,#4]
000104  e005              B        |L1.274|
                  |L1.262|
;;;203              } else {
;;;204                /* Handle automatic capture release */
;;;205                if (WM__CaptureReleaseAuto) {
000106  480e              LDR      r0,|L1.320|
000108  7800              LDRB     r0,[r0,#0]  ; WM__CaptureReleaseAuto
00010a  b108              CBZ      r0,|L1.272|
;;;206                  WM_ReleaseCapture();
00010c  f7fffffe          BL       WM_ReleaseCapture
                  |L1.272|
;;;207                }
;;;208                WM__CHWinLast.hWin = 0;

⌨️ 快捷键说明

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