📄 slider.txt
字号:
|L11.188|
0000bc 4650 MOV r0,r10
0000be e8bd47f0 POP {r4-r10,lr}
0000c2 f7ffbffe B.W WM_NotifyParent
|L11.198|
;;;241 _SliderReleased(hObj, pObj);
;;;242 }
;;;243 }
;;;244 }
;;;245 }
0000c6 e8bd87f0 POP {r4-r10,pc}
;;;246
ENDP
AREA ||i._Paint||, CODE, READONLY, ALIGN=2
_Paint PROC
;;;121 */
;;;122 static void _Paint(SLIDER_Obj* pObj, WM_HWIN hObj) {
000000 e92d43f0 PUSH {r4-r9,lr}
000004 b089 SUB sp,sp,#0x24
000006 4689 MOV r9,r1
000008 4604 MOV r4,r0
;;;123 GUI_RECT r, rFocus, rSlider, rSlot;
;;;124 int x0, xsize, i, Range, NumTicks;
;;;125 WIDGET__GetClientRect(&pObj->Widget, &rFocus);
00000a a905 ADD r1,sp,#0x14
00000c f7fffffe BL WIDGET__GetClientRect
;;;126 GUI__ReduceRect(&r, &rFocus, 1);
000010 2201 MOVS r2,#1
000012 a905 ADD r1,sp,#0x14
000014 a807 ADD r0,sp,#0x1c
000016 f7fffffe BL GUI__ReduceRect
;;;127 NumTicks = pObj->NumTicks;
;;;128 xsize = r.x1 - r.x0 + 1 - pObj->Width;
00001a f9bd0020 LDRSH r0,[sp,#0x20]
00001e f9bd101c LDRSH r1,[sp,#0x1c]
;;;129 x0 = r.x0 + pObj->Width / 2;
;;;130 Range = pObj->Max - pObj->Min;
000022 6ca6 LDR r6,[r4,#0x48]
000024 1a42 SUBS r2,r0,r1 ;128
000026 f9b4004c LDRSH r0,[r4,#0x4c] ;128
00002a 1a12 SUBS r2,r2,r0 ;128
00002c eb0070d0 ADD r0,r0,r0,LSR #31 ;129
000030 eb010760 ADD r7,r1,r0,ASR #1 ;129
000034 e9d4100e LDRD r1,r0,[r4,#0x38]
000038 f1020801 ADD r8,r2,#1 ;128
00003c 1a45 SUBS r5,r0,r1
;;;131 if (Range == 0) {
00003e d100 BNE |L12.66|
;;;132 Range = 1;
000040 2501 MOVS r5,#1
|L12.66|
;;;133 }
;;;134 /* Fill with parents background color */
;;;135 #if !SLIDER_SUPPORT_TRANSPARENCY /* Not needed any more, since window is transparent*/
;;;136 if (pObj->aBkColor[0] == GUI_INVALID_COLOR) {
;;;137 LCD_SetBkColor(WIDGET__GetBkColor(hObj));
;;;138 } else {
;;;139 LCD_SetBkColor(pObj->aBkColor[0]);
;;;140 }
;;;141 GUI_Clear();
;;;142 #else
;;;143 if (!WM_GetHasTrans(hObj)) {
000042 4648 MOV r0,r9
000044 f7fffffe BL WM_GetHasTrans
000048 b920 CBNZ r0,|L12.84|
;;;144 LCD_SetBkColor(pObj->aBkColor[0]);
00004a 6aa0 LDR r0,[r4,#0x28]
00004c f7fffffe BL LCD_SetBkColor
;;;145 GUI_Clear();
000050 f7fffffe BL GUI_Clear
|L12.84|
;;;146 }
;;;147 #endif
;;;148 /* Calculate Slider position */
;;;149 rSlider = r;
000054 e9dd0107 LDRD r0,r1,[sp,#0x1c]
;;;150 rSlider.y0 = 5;
000058 f04f0905 MOV r9,#5
00005c e9cd0103 STRD r0,r1,[sp,#0xc]
000060 f8ad900e STRH r9,[sp,#0xe]
;;;151 rSlider.x0 = x0 + (U32)xsize * (U32)(pObj->v - pObj->Min) / Range - pObj->Width / 2;
000064 6ba2 LDR r2,[r4,#0x38]
000066 6c21 LDR r1,[r4,#0x40]
000068 f9b4004c LDRSH r0,[r4,#0x4c]
00006c 1a89 SUBS r1,r1,r2
00006e fb01f108 MUL r1,r1,r8
000072 fbb1f1f5 UDIV r1,r1,r5
000076 4439 ADD r1,r1,r7
000078 eb0072d0 ADD r2,r0,r0,LSR #31
00007c eba10162 SUB r1,r1,r2,ASR #1
;;;152 rSlider.x1 = rSlider.x0 + pObj->Width;
000080 4408 ADD r0,r0,r1
000082 f8ad0010 STRH r0,[sp,#0x10]
;;;153 /* Calculate Slot position */
;;;154 rSlot.x0 = x0;
;;;155 rSlot.x1 = x0 + xsize;
000086 eb070008 ADD r0,r7,r8
00008a f8ad0008 STRH r0,[sp,#8]
;;;156 rSlot.y0 = (rSlider.y0 + rSlider.y1) / 2 - 1;
00008e f9bd0012 LDRSH r0,[sp,#0x12]
000092 f8ad100c STRH r1,[sp,#0xc] ;151
000096 1d40 ADDS r0,r0,#5
000098 eb0070d0 ADD r0,r0,r0,LSR #31
00009c f04f31ff MOV r1,#0xffffffff
0000a0 eb010060 ADD r0,r1,r0,ASR #1
0000a4 f8ad7004 STRH r7,[sp,#4] ;154
0000a8 f8ad0006 STRH r0,[sp,#6]
;;;157 rSlot.y1 = rSlot.y0 + 3;
0000ac 1cc0 ADDS r0,r0,#3
0000ae f8ad000a STRH r0,[sp,#0xa]
;;;158 WIDGET__EFFECT_DrawDownRect(&pObj->Widget, &rSlot); /* Draw slot */
0000b2 a901 ADD r1,sp,#4
0000b4 4620 MOV r0,r4
0000b6 f7fffffe BL WIDGET__EFFECT_DrawDownRect
;;;159 /* Draw the ticks */
;;;160 if (NumTicks < 0) {
0000ba 2e00 CMP r6,#0
0000bc da06 BGE |L12.204|
;;;161 NumTicks = Range + 1;
;;;162 if (NumTicks > (xsize / 5)) {
0000be fb98f0f9 SDIV r0,r8,r9
0000c2 1c6e ADDS r6,r5,#1 ;161
0000c4 42b0 CMP r0,r6
0000c6 da01 BGE |L12.204|
;;;163 NumTicks = 11;
0000c8 260b MOVS r6,#0xb
0000ca e001 B |L12.208|
|L12.204|
;;;164 }
;;;165 }
;;;166 if (NumTicks > 1) {
0000cc 2e01 CMP r6,#1
0000ce dd14 BLE |L12.250|
|L12.208|
;;;167 LCD_SetColor(GUI_BLACK);
0000d0 2000 MOVS r0,#0
0000d2 f7fffffe BL LCD_SetColor
;;;168 for (i = 0; i < NumTicks; i++) {
0000d6 2500 MOVS r5,#0
;;;169 int x = x0 + xsize * i / (NumTicks - 1);
0000d8 f1a60901 SUB r9,r6,#1
0000dc e00b B |L12.246|
0000de bf00 NOP
|L12.224|
0000e0 fb08f005 MUL r0,r8,r5
0000e4 fb90f0f9 SDIV r0,r0,r9
0000e8 19c1 ADDS r1,r0,r7
;;;170 WIDGET__DrawVLine(&pObj->Widget, x, 1, 3);
0000ea 2303 MOVS r3,#3
0000ec 2201 MOVS r2,#1
0000ee 4620 MOV r0,r4
0000f0 f7fffffe BL WIDGET__DrawVLine
0000f4 1c6d ADDS r5,r5,#1 ;168
|L12.246|
0000f6 42b5 CMP r5,r6 ;168
0000f8 dbf2 BLT |L12.224|
|L12.250|
;;;171 }
;;;172 }
;;;173 /* Draw the slider itself */
;;;174 LCD_SetColor(pObj->aColor[0]);
0000fa 6b20 LDR r0,[r4,#0x30]
0000fc f7fffffe BL LCD_SetColor
;;;175 WIDGET__FillRectEx(&pObj->Widget, &rSlider);
000100 a903 ADD r1,sp,#0xc
000102 4620 MOV r0,r4
000104 f7fffffe BL WIDGET__FillRectEx
;;;176 LCD_SetColor(GUI_BLACK);
000108 2000 MOVS r0,#0
00010a f7fffffe BL LCD_SetColor
;;;177 WIDGET__EFFECT_DrawUpRect(&pObj->Widget, &rSlider);
00010e a903 ADD r1,sp,#0xc
000110 4620 MOV r0,r4
000112 f7fffffe BL WIDGET__EFFECT_DrawUpRect
;;;178 /* Draw focus */
;;;179 if (pObj->Widget.State & WIDGET_STATE_FOCUS) {
000116 8ce0 LDRH r0,[r4,#0x26]
000118 07c0 LSLS r0,r0,#31
00011a d007 BEQ |L12.300|
;;;180 LCD_SetColor(GUI_BLACK);
00011c 2000 MOVS r0,#0
00011e f7fffffe BL LCD_SetColor
;;;181 WIDGET__DrawFocusRect(&pObj->Widget, &rFocus, 0);
000122 2200 MOVS r2,#0
000124 a905 ADD r1,sp,#0x14
000126 4620 MOV r0,r4
000128 f7fffffe BL WIDGET__DrawFocusRect
|L12.300|
;;;182 }
;;;183 }
00012c b009 ADD sp,sp,#0x24
00012e e8bd83f0 POP {r4-r9,pc}
;;;184
ENDP
AREA ||i._SLIDER_Callback||, CODE, READONLY, ALIGN=1
_SLIDER_Callback PROC
;;;273 */
;;;274 static void _SLIDER_Callback (WM_MESSAGE *pMsg) {
000000 b570 PUSH {r4-r6,lr}
;;;275 SLIDER_Handle hObj;
;;;276 SLIDER_Obj* pObj;
;;;277 hObj = pMsg->hWin;
000002 f9b05004 LDRSH r5,[r0,#4]
000006 4604 MOV r4,r0 ;274
;;;278 pObj = SLIDER_H2P(hObj);
000008 4628 MOV r0,r5
00000a f7fffffe BL GUI_ALLOC_h2p
00000e 4606 MOV r6,r0
;;;279 /* Let widget handle the standard messages */
;;;280 if (WIDGET_HandleActive(hObj, pMsg) == 0) {
000010 4621 MOV r1,r4
000012 4628 MOV r0,r5
000014 f7fffffe BL WIDGET_HandleActive
000018 2800 CMP r0,#0
00001a d027 BEQ |L13.108|
;;;281 return;
;;;282 }
;;;283 switch (pMsg->MsgId) {
00001c 6820 LDR r0,[r4,#0]
00001e 280c CMP r0,#0xc
000020 d009 BEQ |L13.54|
000022 280e CMP r0,#0xe
000024 d00d BEQ |L13.66|
000026 280f CMP r0,#0xf
000028 d11b BNE |L13.98|
;;;284 case WM_PAINT:
;;;285 GUI_DEBUG_LOG("SLIDER: _Callback(WM_PAINT)\n");
;;;286 _Paint(pObj, hObj);
00002a 4629 MOV r1,r5
00002c 4630 MOV r0,r6
00002e e8bd4070 POP {r4-r6,lr}
000032 f7ffbffe B.W _Paint
|L13.54|
;;;287 return;
;;;288 case WM_TOUCH:
;;;289 _OnTouch(hObj, pObj, pMsg);
000036 4622 MOV r2,r4
000038 4631 MOV r1,r6
00003a 4628 MOV r0,r5
00003c f7fffffe BL _OnTouch
;;;290 break;
000040 e00f B |L13.98|
|L13.66|
000042 68a0 LDR r0,[r4,#8]
000044 e9d01000 LDRD r1,r0,[r0,#0]
000048 2800 CMP r0,#0
00004a dd0a BLE |L13.98|
00004c 2910 CMP r1,#0x10
00004e d005 BEQ |L13.92|
000050 2912 CMP r1,#0x12
000052 d106 BNE |L13.98|
000054 4628 MOV r0,r5
000056 f7fffffe BL SLIDER_Inc
00005a e002 B |L13.98|
|L13.92|
00005c 4628 MOV r0,r5
00005e f7fffffe BL SLIDER_Dec
|L13.98|
;;;291 case WM_KEY:
;;;292 _OnKey(hObj, pMsg);
;;;293 break;
;;;294 }
;;;295 WM_DefaultProc(pMsg);
000062 4620 MOV r0,r4
000064 e8bd4070 POP {r4-r6,lr}
000068 f7ffbffe B.W WM_DefaultProc
|L13.108|
;;;296 }
00006c bd70 POP {r4-r6,pc}
;;;297
ENDP
AREA ||.data||, DATA, ALIGN=2
_DefaultBkColor
DCD 0x00c0c0c0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -