📄 scrollbar.txt
字号:
00012c ebaa0101 SUB r1,r10,r1
000130 4378 MULS r0,r7,r0
000132 f7fffffe BL GUI__DivideRound
000136 6869 LDR r1,[r5,#4]
000138 1c40 ADDS r0,r0,#1
00013a 4408 ADD r0,r0,r1
;;;174 pPos->x1_Thumb = pPos->x0_Thumb + ThumbSize - 1;
00013c 60a8 STR r0,[r5,#8]
;;;175 pPos->xSizeMoveable = xSizeMoveable;
;;;176 pPos->ThumbSize = ThumbSize;
;;;177 }
00013e e9c57607 STRD r7,r6,[r5,#0x1c]
000142 1e71 SUBS r1,r6,#1 ;174
000144 4408 ADD r0,r0,r1 ;174
000146 60e8 STR r0,[r5,#0xc]
000148 e8bd87ff POP {r0-r10,pc}
;;;178
ENDP
AREA ||i._DrawTriangle||, CODE, READONLY, ALIGN=1
_DrawTriangle PROC
;;;182 */
;;;183 static void _DrawTriangle(WIDGET* pWidget, int x, int y, int Size, int Inc) {
000000 e92d41f0 PUSH {r4-r8,lr}
;;;184 if (pWidget->State & WIDGET_STATE_VERTICAL) {
000004 8cc0 LDRH r0,[r0,#0x26]
000006 9f06 LDR r7,[sp,#0x18]
000008 460d MOV r5,r1 ;183
00000a 4616 MOV r6,r2 ;183
00000c 461c MOV r4,r3 ;183
00000e 0700 LSLS r0,r0,#28
000010 d512 BPL |L11.56|
000012 e006 B |L11.34|
|L11.20|
;;;185 for (; Size >= 0; Size--, x += Inc) {
;;;186 GUI_DrawHLine(x, y - Size, y + Size);
000014 1932 ADDS r2,r6,r4
000016 1b31 SUBS r1,r6,r4
000018 4628 MOV r0,r5
00001a f7fffffe BL GUI_DrawHLine
00001e 1e64 SUBS r4,r4,#1 ;185
000020 443d ADD r5,r5,r7 ;185
|L11.34|
000022 2c00 CMP r4,#0 ;185
000024 daf6 BGE |L11.20|
|L11.38|
;;;187 }
;;;188 } else {
;;;189 for (; Size >= 0; Size--, x += Inc) {
;;;190 GUI_DrawVLine(x, y - Size, y + Size);
;;;191 }
;;;192 }
;;;193 }
000026 e8bd81f0 POP {r4-r8,pc}
|L11.42|
00002a 1932 ADDS r2,r6,r4 ;190
00002c 1b31 SUBS r1,r6,r4 ;190
00002e 4628 MOV r0,r5 ;190
000030 f7fffffe BL GUI_DrawVLine
000034 1e64 SUBS r4,r4,#1 ;189
000036 443d ADD r5,r5,r7 ;189
|L11.56|
000038 2c00 CMP r4,#0 ;189
00003a daf6 BGE |L11.42|
00003c e7f3 B |L11.38|
;;;194
ENDP
AREA ||i._OnTouch||, CODE, READONLY, ALIGN=1
_OnTouch PROC
;;;288 */
;;;289 static void _OnTouch(SCROLLBAR_Handle hObj, SCROLLBAR_Obj* pObj, WM_MESSAGE*pMsg) {
000000 e92d41f0 PUSH {r4-r8,lr}
;;;290 SCROLLBAR_POSITIONS Pos;
;;;291 GUI_PID_STATE* pState = (GUI_PID_STATE*)pMsg->Data.p;
;;;292 if (pMsg->Data.p) { /* Something happened in our area (pressed or released) */
000004 6896 LDR r6,[r2,#8]
000006 b08a SUB sp,sp,#0x28 ;289
000008 4680 MOV r8,r0 ;289
00000a 460c MOV r4,r1 ;289
00000c 2e00 CMP r6,#0
00000e d05f BEQ |L12.208|
;;;293 if (pState->Pressed) {
000010 7a30 LDRB r0,[r6,#8]
000012 f44f7780 MOV r7,#0x100
000016 2800 CMP r0,#0
000018 d04c BEQ |L12.180|
;;;294 int Sel;
;;;295 int Range;
;;;296 int x;
;;;297 Sel = pObj->v;
;;;298 _CalcPositions(pObj, &Pos);
00001a a901 ADD r1,sp,#4
00001c 4620 MOV r0,r4
00001e 6be5 LDR r5,[r4,#0x3c]
000020 f7fffffe BL _CalcPositions
;;;299 Range = pObj->NumItems - pObj->PageSize;
000024 6c21 LDR r1,[r4,#0x40]
000026 6ba0 LDR r0,[r4,#0x38]
000028 1a42 SUBS r2,r0,r1
;;;300 /* Swap mouse coordinates if necessary */
;;;301 if (pObj->Widget.State & WIDGET_STATE_VERTICAL) {
00002a 8ce0 LDRH r0,[r4,#0x26]
00002c 0700 LSLS r0,r0,#28
00002e d503 BPL |L12.56|
;;;302 int t = pState->x;
;;;303 pState->x = pState->y;
000030 e9d61000 LDRD r1,r0,[r6,#0]
;;;304 pState->y = t;
000034 e9c60100 STRD r0,r1,[r6,#0]
|L12.56|
;;;305 }
;;;306 x = pState->x;
;;;307 if (x <= Pos.x1_LeftArrow) { /* left arrow (line left) */
000038 6830 LDR r0,[r6,#0]
00003a 9902 LDR r1,[sp,#8]
00003c 4281 CMP r1,r0
00003e db01 BLT |L12.68|
;;;308 Sel--;
000040 1e6d SUBS r5,r5,#1
000042 e023 B |L12.140|
|L12.68|
;;;309 } else if (x < Pos.x0_Thumb) { /* left area (page left) */
000044 9903 LDR r1,[sp,#0xc]
000046 4281 CMP r1,r0
000048 dd02 BLE |L12.80|
;;;310 Sel -= pObj->PageSize;
00004a 6c20 LDR r0,[r4,#0x40]
00004c 1a2d SUBS r5,r5,r0
00004e e01d B |L12.140|
|L12.80|
;;;311 } else if (x <= Pos.x1_Thumb) { /* Thumb area */
000050 9904 LDR r1,[sp,#0x10]
000052 4281 CMP r1,r0
000054 db10 BLT |L12.120|
;;;312 if (Pos.xSizeMoveable > 0) {
000056 9908 LDR r1,[sp,#0x20]
000058 2900 CMP r1,#0
00005a dd17 BLE |L12.140|
;;;313 x = x - Pos.ThumbSize/2 - Pos.x1_LeftArrow-1;
00005c 9909 LDR r1,[sp,#0x24]
00005e eb0171d1 ADD r1,r1,r1,LSR #31
000062 eba00061 SUB r0,r0,r1,ASR #1
000066 9902 LDR r1,[sp,#8]
000068 1a40 SUBS r0,r0,r1
00006a 1e40 SUBS r0,r0,#1
;;;314 Sel = GUI__DivideRound(Range * x, Pos.xSizeMoveable);
00006c 4350 MULS r0,r2,r0
00006e 9908 LDR r1,[sp,#0x20]
000070 f7fffffe BL GUI__DivideRound
000074 4605 MOV r5,r0
000076 e009 B |L12.140|
|L12.120|
;;;315 }
;;;316 } else if (x < Pos.x0_RightArrow) { /* right area (page right) */
000078 9905 LDR r1,[sp,#0x14]
00007a 4281 CMP r1,r0
00007c dd02 BLE |L12.132|
;;;317 Sel += pObj->PageSize;
00007e 6c20 LDR r0,[r4,#0x40]
000080 4405 ADD r5,r5,r0
000082 e003 B |L12.140|
|L12.132|
;;;318 } else if (x <= Pos.x1_RightArrow) {
000084 9906 LDR r1,[sp,#0x18]
000086 4281 CMP r1,r0
000088 db00 BLT |L12.140|
;;;319 Sel++;
00008a 1c6d ADDS r5,r5,#1
|L12.140|
;;;320 }
;;;321 /* WM_SetFocus(hObj); */
;;;322 WM_SetCapture(hObj, 1);
00008c 2101 MOVS r1,#1
00008e 4640 MOV r0,r8
000090 f7fffffe BL WM_SetCapture
;;;323 SCROLLBAR_SetValue(hObj, Sel);
000094 4629 MOV r1,r5
000096 4640 MOV r0,r8
000098 f7fffffe BL SCROLLBAR_SetValue
;;;324 if ((pObj->Widget.State & SCROLLBAR_STATE_PRESSED) == 0){
00009c 8ce0 LDRH r0,[r4,#0x26]
00009e 05c0 LSLS r0,r0,#23
0000a0 d416 BMI |L12.208|
0000a2 4639 MOV r1,r7
0000a4 4640 MOV r0,r8
0000a6 f7fffffe BL WIDGET_OrState
0000aa 8ba0 LDRH r0,[r4,#0x1c]
0000ac 0780 LSLS r0,r0,#30
0000ae d50f BPL |L12.208|
0000b0 2101 MOVS r1,#1
0000b2 e00a B |L12.202|
|L12.180|
;;;325 _ScrollbarPressed(hObj, pObj);
;;;326 }
;;;327 } else {
;;;328 /* React only if button was pressed before ... avoid problems with moving / hiding windows above (such as dropdown) */
;;;329 if (pObj->Widget.State & SCROLLBAR_STATE_PRESSED) {
0000b4 8ce0 LDRH r0,[r4,#0x26]
0000b6 05c0 LSLS r0,r0,#23
0000b8 d50a BPL |L12.208|
0000ba 4639 MOV r1,r7
0000bc 4640 MOV r0,r8
0000be f7fffffe BL WIDGET_AndState
0000c2 8ba0 LDRH r0,[r4,#0x1c]
0000c4 0780 LSLS r0,r0,#30
0000c6 d503 BPL |L12.208|
0000c8 2102 MOVS r1,#2
|L12.202|
0000ca 4640 MOV r0,r8
0000cc f7fffffe BL WM_NotifyParent
|L12.208|
;;;330 _ScrollbarReleased(hObj, pObj);
;;;331 }
;;;332 }
;;;333 }
;;;334 }
0000d0 b00a ADD sp,sp,#0x28
0000d2 e8bd81f0 POP {r4-r8,pc}
;;;335
ENDP
AREA ||i._Paint||, CODE, READONLY, ALIGN=1
_Paint PROC
;;;198 */
;;;199 static void _Paint(SCROLLBAR_Obj* pObj) {
000000 b570 PUSH {r4-r6,lr}
000002 b08e SUB sp,sp,#0x38
000004 4604 MOV r4,r0
;;;200 int ArrowSize, ArrowOff;
;;;201 SCROLLBAR_POSITIONS Pos;
;;;202 GUI_RECT r, rClient;
;;;203 /*
;;;204 Get / calc position info
;;;205 */
;;;206 _CalcPositions(pObj, &Pos);
000006 a905 ADD r1,sp,#0x14
000008 f7fffffe BL _CalcPositions
;;;207 WIDGET__GetClientRect(&pObj->Widget, &rClient);
00000c a901 ADD r1,sp,#4
00000e 4620 MOV r0,r4
000010 f7fffffe BL WIDGET__GetClientRect
;;;208 r = rClient;
000014 e9dd0101 LDRD r0,r1,[sp,#4]
;;;209 ArrowSize = ((r.y1 - r.y0) /3) - 1;
000018 e9cd0103 STRD r0,r1,[sp,#0xc]
00001c f9bd0012 LDRSH r0,[sp,#0x12]
000020 f9bd100e LDRSH r1,[sp,#0xe]
000024 1a41 SUBS r1,r0,r1
000026 2003 MOVS r0,#3
000028 fb91f5f0 SDIV r5,r1,r0
00002c 1e6d SUBS r5,r5,#1
;;;210 ArrowOff = 3 + ArrowSize+ ArrowSize/3;
00002e fb95f0f0 SDIV r0,r5,r0
000032 1946 ADDS r6,r0,r5
000034 1cf6 ADDS r6,r6,#3
;;;211 /*
;;;212 Draw left Arrow
;;;213 */
;;;214 LCD_SetColor(pObj->aColor[0]);
000036 6b20 LDR r0,[r4,#0x30]
000038 f7fffffe BL LCD_SetColor
;;;215 r = rClient;
00003c e9dd0101 LDRD r0,r1,[sp,#4]
;;;216 r.x0 = Pos.x0_LeftArrow;
000040 e9cd0103 STRD r0,r1,[sp,#0xc]
000044 9805 LDR r0,[sp,#0x14]
000046 f8ad000c STRH r0,[sp,#0xc]
;;;217 r.x1 = Pos.x1_LeftArrow;
00004a 9806 LDR r0,[sp,#0x18]
00004c f8ad0010 STRH r0,[sp,#0x10]
;;;218 WIDGET__FillRectEx(&pObj->Widget, &r);
000050 a903 ADD r1,sp,#0xc
000052 4620 MOV r0,r4
000054 f7fffffe BL WIDGET__FillRectEx
;;;219 LCD_SetColor(pObj->aBkColor[1]);
000058 6ae0 LDR r0,[r4,#0x2c]
00005a f7fffffe BL LCD_SetColor
;;;220 _DrawTriangle(&pObj->Widget, r.x0 + ArrowOff, (r.y1 - r.y0) >> 1, ArrowSize, -1);
00005e f9bd0012 LDRSH r0,[sp,#0x12]
000062 f9bd100e LDRSH r1,[sp,#0xe]
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -