📄 wmtouch.txt
字号:
; 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 + -