📄 progbar.txt
字号:
000034 2100 MOVS r1,#0
000036 9001 STR r0,[sp,#4]
000038 7001 STRB r1,[r0,#0]
|L11.58|
;;;172 }
;;;173 return (const char*)pText;
00003a 4620 MOV r0,r4
;;;174 }
00003c bd1c POP {r2-r4,pc}
;;;175
ENDP
AREA ||i._GetTextRect||, CODE, READONLY, ALIGN=1
_GetTextRect PROC
;;;179 */
;;;180 static void _GetTextRect(const PROGBAR_Obj* pObj, GUI_RECT* pRect, const char* pText) {
000000 e92d41f0 PUSH {r4-r8,lr}
000004 4605 MOV r5,r0
000006 460c MOV r4,r1
000008 4610 MOV r0,r2
;;;181 int xSize = pObj->Widget.Win.Rect.x1 - pObj->Widget.Win.Rect.x0 + 1;
00000a f9b51004 LDRSH r1,[r5,#4]
00000e f9b52000 LDRSH r2,[r5,#0]
000012 1a8f SUBS r7,r1,r2
;;;182 int ySize = pObj->Widget.Win.Rect.y1 - pObj->Widget.Win.Rect.y0 + 1;
000014 f9b51006 LDRSH r1,[r5,#6]
000018 f9b52002 LDRSH r2,[r5,#2]
00001c 1c7f ADDS r7,r7,#1 ;181
00001e 1a89 SUBS r1,r1,r2
000020 f1010801 ADD r8,r1,#1
;;;183 int TextWidth = GUI_GetStringDistX(pText);
000024 f7fffffe BL GUI_GetStringDistX
000028 4606 MOV r6,r0
;;;184 int TextHeight = GUI_GetFontSizeY();
00002a f7fffffe BL GUI_GetFontSizeY
;;;185 int EffectSize = pObj->Widget.pEffect->EffectSize;
00002e 6a29 LDR r1,[r5,#0x20]
;;;186 switch (pObj->TextAlign & GUI_TA_HORIZONTAL) {
000030 f8b52046 LDRH r2,[r5,#0x46]
000034 6949 LDR r1,[r1,#0x14] ;185
000036 f0020203 AND r2,r2,#3
00003a 2a01 CMP r2,#1
00003c d006 BEQ |L12.76|
00003e 2a02 CMP r2,#2
000040 d107 BNE |L12.82|
;;;187 case GUI_TA_CENTER:
;;;188 pRect->x0 = (xSize - TextWidth) / 2;
000042 1bb9 SUBS r1,r7,r6
000044 eb0171d1 ADD r1,r1,r1,LSR #31
000048 1049 ASRS r1,r1,#1
;;;189 break;
00004a e002 B |L12.82|
|L12.76|
;;;190 case GUI_TA_RIGHT:
;;;191 pRect->x0 = xSize - TextWidth - 1 - EffectSize;
00004c 1bba SUBS r2,r7,r6
00004e 1a51 SUBS r1,r2,r1
000050 1e49 SUBS r1,r1,#1
|L12.82|
000052 8021 STRH r1,[r4,#0] ;188
;;;192 break;
;;;193 default:
;;;194 pRect->x0 = EffectSize;
;;;195 }
;;;196 pRect->y0 = (ySize - TextHeight) / 2;
000054 eba80100 SUB r1,r8,r0
000058 eb0171d1 ADD r1,r1,r1,LSR #31
00005c 104a ASRS r2,r1,#1
00005e 8062 STRH r2,[r4,#2]
;;;197 pRect->x0 += pObj->XOff;
000060 8821 LDRH r1,[r4,#0]
000062 f8353f42 LDRH r3,[r5,#0x42]!
;;;198 pRect->y0 += pObj->YOff;
;;;199 pRect->x1 = pRect->x0 + TextWidth - 1;
000066 1e76 SUBS r6,r6,#1
000068 4419 ADD r1,r1,r3 ;197
00006a 8021 STRH r1,[r4,#0] ;197
00006c 886b LDRH r3,[r5,#2] ;198
00006e 4431 ADD r1,r1,r6
000070 441a ADD r2,r2,r3 ;198
000072 8062 STRH r2,[r4,#2] ;198
;;;200 pRect->y1 = pRect->y0 + TextHeight - 1;
000074 1e40 SUBS r0,r0,#1
000076 80a1 STRH r1,[r4,#4] ;199
000078 4410 ADD r0,r0,r2
00007a 80e0 STRH r0,[r4,#6]
;;;201 }
00007c e8bd81f0 POP {r4-r8,pc}
;;;202
ENDP
AREA ||i._PROGBAR_Callback||, CODE, READONLY, ALIGN=1
_PROGBAR_Callback PROC
;;;248 */
;;;249 static void _PROGBAR_Callback(WM_MESSAGE*pMsg) {
000000 b570 PUSH {r4-r6,lr}
;;;250 PROGBAR_Handle hObj = (PROGBAR_Handle)pMsg->hWin;
000002 f9b05004 LDRSH r5,[r0,#4]
000006 4604 MOV r4,r0 ;249
;;;251 /* Let widget handle the standard messages */
;;;252 if (WIDGET_HandleActive(hObj, pMsg) == 0) {
000008 4601 MOV r1,r0
00000a 4628 MOV r0,r5
00000c f7fffffe BL WIDGET_HandleActive
000010 2800 CMP r0,#0
000012 d014 BEQ |L13.62|
;;;253 return;
;;;254 }
;;;255 switch (pMsg->MsgId) {
000014 6820 LDR r0,[r4,#0]
000016 280b CMP r0,#0xb
000018 d006 BEQ |L13.40|
00001a 280f CMP r0,#0xf
00001c d10a BNE |L13.52|
;;;256 case WM_PAINT:
;;;257 _Paint(hObj);
00001e 4628 MOV r0,r5
000020 e8bd4070 POP {r4-r6,lr}
000024 f7ffbffe B.W _Paint
|L13.40|
000028 4628 MOV r0,r5
00002a f7fffffe BL GUI_ALLOC_h2p
00002e 3040 ADDS r0,r0,#0x40
000030 f7fffffe BL GUI_ALLOC_FreePtr
|L13.52|
;;;258 return;
;;;259 case WM_DELETE:
;;;260 _Delete(hObj);
;;;261 break;
;;;262 }
;;;263 WM_DefaultProc(pMsg);
000034 4620 MOV r0,r4
000036 e8bd4070 POP {r4-r6,lr}
00003a f7ffbffe B.W WM_DefaultProc
|L13.62|
;;;264 }
00003e bd70 POP {r4-r6,pc}
;;;265
ENDP
AREA ||i._Paint||, CODE, READONLY, ALIGN=1
_Paint PROC
;;;206 */
;;;207 static void _Paint(PROGBAR_Handle hObj) {
000000 b5f0 PUSH {r4-r7,lr}
000002 b08b SUB sp,sp,#0x2c
;;;208 PROGBAR_Obj* pObj;
;;;209 GUI_RECT r, rInside, rClient, rText;
;;;210 const char* pText;
;;;211 char ac[5];
;;;212 int tm, xPos;
;;;213 pObj = PROGBAR_H2P(hObj);
000004 f7fffffe BL GUI_ALLOC_h2p
000008 4604 MOV r4,r0
;;;214 WM_GetClientRect(&rClient);
00000a a805 ADD r0,sp,#0x14
00000c f7fffffe BL WM_GetClientRect
;;;215 GUI__ReduceRect(&rInside, &rClient, pObj->Widget.pEffect->EffectSize);
000010 6a20 LDR r0,[r4,#0x20]
000012 a905 ADD r1,sp,#0x14
000014 6942 LDR r2,[r0,#0x14]
000016 a807 ADD r0,sp,#0x1c
000018 f7fffffe BL GUI__ReduceRect
;;;216 xPos = _Value2X(pObj, pObj->v);
00001c 4620 MOV r0,r4
00001e 6aa1 LDR r1,[r4,#0x28]
000020 f7fffffe BL _Value2X
000024 4605 MOV r5,r0
;;;217 pText = _GetText(pObj, ac);
000026 a901 ADD r1,sp,#4
000028 4620 MOV r0,r4
00002a f7fffffe BL _GetText
00002e 4606 MOV r6,r0
;;;218 GUI_SetFont(pObj->pFont);
000030 6ae0 LDR r0,[r4,#0x2c]
000032 f7fffffe BL GUI_SetFont
;;;219 _GetTextRect(pObj, &rText, pText);
000036 4632 MOV r2,r6
000038 a903 ADD r1,sp,#0xc
00003a 4620 MOV r0,r4
00003c f7fffffe BL _GetTextRect
;;;220 tm = GUI_SetTextMode(GUI_TM_TRANS);
000040 2002 MOVS r0,#2
000042 f7fffffe BL GUI_SetTextMode
000046 4607 MOV r7,r0
;;;221 /* Draw left bar */
;;;222 r = rInside;
000048 e9dd0107 LDRD r0,r1,[sp,#0x1c]
;;;223 r.x1 = xPos - 1;
00004c e9cd0109 STRD r0,r1,[sp,#0x24]
000050 1e68 SUBS r0,r5,#1
000052 f8ad0028 STRH r0,[sp,#0x28]
;;;224 WM_SetUserClipArea(&r);
000056 a809 ADD r0,sp,#0x24
000058 f7fffffe BL WM_SetUserClipRect
;;;225 _DrawPart(pObj, 0, rText.x0, rText.y0, pText);
00005c 9600 STR r6,[sp,#0]
00005e f9bd300e LDRSH r3,[sp,#0xe]
000062 f9bd200c LDRSH r2,[sp,#0xc]
000066 2100 MOVS r1,#0
000068 4620 MOV r0,r4
00006a f7fffffe BL _DrawPart
;;;226 /* Draw right bar */
;;;227 r = rInside;
00006e e9dd0107 LDRD r0,r1,[sp,#0x1c]
;;;228 r.x0 = xPos;
000072 e9cd0109 STRD r0,r1,[sp,#0x24]
000076 f8ad5024 STRH r5,[sp,#0x24]
;;;229 WM_SetUserClipArea(&r);
00007a a809 ADD r0,sp,#0x24
00007c f7fffffe BL WM_SetUserClipRect
;;;230 _DrawPart(pObj, 1, rText.x0, rText.y0, pText);
000080 9600 STR r6,[sp,#0]
000082 f9bd300e LDRSH r3,[sp,#0xe]
000086 f9bd200c LDRSH r2,[sp,#0xc]
00008a 2101 MOVS r1,#1
00008c 4620 MOV r0,r4
00008e f7fffffe BL _DrawPart
;;;231 WM_SetUserClipArea(NULL);
000092 2000 MOVS r0,#0
000094 f7fffffe BL WM_SetUserClipRect
;;;232 GUI_SetTextMode(tm);
000098 4638 MOV r0,r7
00009a f7fffffe BL GUI_SetTextMode
;;;233 WIDGET__EFFECT_DrawDownRect(&pObj->Widget, &rClient);
00009e a905 ADD r1,sp,#0x14
0000a0 4620 MOV r0,r4
0000a2 f7fffffe BL WIDGET__EFFECT_DrawDownRect
;;;234 }
0000a6 b00b ADD sp,sp,#0x2c
0000a8 bdf0 POP {r4-r7,pc}
;;;235
ENDP
AREA ||i._Value2X||, CODE, READONLY, ALIGN=1
_Value2X PROC
;;;131 */
;;;132 static int _Value2X(const PROGBAR_Obj* pObj, int v) {
000000 b530 PUSH {r4,r5,lr}
;;;133 int EffectSize = pObj->Widget.pEffect->EffectSize;
;;;134 int xSize = pObj->Widget.Win.Rect.x1 - pObj->Widget.Win.Rect.x0 + 1;
000002 f9b04004 LDRSH r4,[r0,#4]
000006 f9b05000 LDRSH r5,[r0,#0]
00000a 6a02 LDR r2,[r0,#0x20] ;133
00000c 1b64 SUBS r4,r4,r5
;;;135 int Min = pObj->Min;
00000e 6953 LDR r3,[r2,#0x14]
;;;136 int Max = pObj->Max;
000010 e9d02012 LDRD r2,r0,[r0,#0x48]
000014 1c64 ADDS r4,r4,#1 ;134
;;;137 if (v < Min) {
000016 4291 CMP r1,r2
000018 da00 BGE |L15.28|
;;;138 v = Min;
00001a 4611 MOV r1,r2
|L15.28|
;;;139 }
;;;140 if (v > Max) {
00001c 4281 CMP r1,r0
00001e dd00 BLE |L15.34|
;;;141 v = Max;
000020 4601 MOV r1,r0
|L15.34|
;;;142 }
;;;143 return EffectSize + ((xSize - 2 * EffectSize) * (I32)(v - Min)) / (Max - Min);
000022 425d RSBS r5,r3,#0
000024 eb040445 ADD r4,r4,r5,LSL #1
000028 1a89 SUBS r1,r1,r2
00002a 434c MULS r4,r1,r4
00002c 1a80 SUBS r0,r0,r2
00002e fb94f0f0 SDIV r0,r4,r0
000032 4418 ADD r0,r0,r3
;;;144 }
000034 bd30 POP {r4,r5,pc}
;;;145
ENDP
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -