📄 widget.txt
字号:
000004 460c MOV r4,r1 ;120
000006 0700 LSLS r0,r0,#28
000008 d50f BPL |L15.42|
;;;122 GUI_RECT Rect;
;;;123 WM_GetClientRect(&Rect);
00000a 4668 MOV r0,sp
00000c f7fffffe BL WM_GetClientRect
;;;124 pRect->x0 = Rect.y0;
000010 f8bd0002 LDRH r0,[sp,#2]
000014 8020 STRH r0,[r4,#0]
;;;125 pRect->x1 = Rect.y1;
000016 f8bd0006 LDRH r0,[sp,#6]
00001a 80a0 STRH r0,[r4,#4]
;;;126 pRect->y0 = Rect.x0;
00001c f8bd0000 LDRH r0,[sp,#0]
000020 8060 STRH r0,[r4,#2]
;;;127 pRect->y1 = Rect.x1;
000022 f8bd0004 LDRH r0,[sp,#4]
000026 80e0 STRH r0,[r4,#6]
;;;128 } else {
;;;129 WM_GetClientRect(pRect);
;;;130 }
;;;131 }
000028 bd1c POP {r2-r4,pc}
|L15.42|
00002a 4620 MOV r0,r4 ;129
00002c e8bd401c POP {r2-r4,lr} ;129
000030 f7ffbffe B.W WM_GetClientRect
;;;132
ENDP
AREA ||i.WIDGET__GetInsideRect||, CODE, READONLY, ALIGN=1
WIDGET__GetInsideRect PROC
;;;148 */
;;;149 void WIDGET__GetInsideRect(WIDGET* pWidget, GUI_RECT* pRect) {
000000 b570 PUSH {r4-r6,lr}
000002 4605 MOV r5,r0
000004 460c MOV r4,r1
;;;150 WM__GetClientRectWin(&pWidget->Win, pRect);
000006 f7fffffe BL WM__GetClientRectWin
;;;151 GUI__ReduceRect(pRect, pRect, pWidget->pEffect->EffectSize);
00000a 6a28 LDR r0,[r5,#0x20]
00000c 4621 MOV r1,r4
00000e 6942 LDR r2,[r0,#0x14]
000010 4620 MOV r0,r4
000012 e8bd4070 POP {r4-r6,lr}
000016 f7ffbffe B.W GUI__ReduceRect
;;;152 }
;;;153
ENDP
AREA ||i.WIDGET__GetWindowSizeX||, CODE, READONLY, ALIGN=1
WIDGET__GetWindowSizeX PROC
;;;187 */
;;;188 int WIDGET__GetWindowSizeX(WM_HWIN hWin) {
000000 b510 PUSH {r4,lr}
000002 4604 MOV r4,r0
;;;189 WIDGET* pWidget = WIDGET_H2P(hWin);
000004 f7fffffe BL GUI_ALLOC_h2p
;;;190 if (pWidget->State & WIDGET_STATE_VERTICAL) {
000008 8cc0 LDRH r0,[r0,#0x26]
00000a 0700 LSLS r0,r0,#28
;;;191 return WM_GetWindowSizeY(hWin);
00000c 4620 MOV r0,r4
00000e d503 BPL |L17.24|
000010 e8bd4010 POP {r4,lr}
000014 f7ffbffe B.W WM_GetWindowSizeY
|L17.24|
;;;192 } else {
;;;193 return WM_GetWindowSizeX(hWin);
000018 e8bd4010 POP {r4,lr}
00001c f7ffbffe B.W WM_GetWindowSizeX
;;;194 }
;;;195 }
;;;196
ENDP
AREA ||i.WIDGET__GetXSize||, CODE, READONLY, ALIGN=1
WIDGET__GetXSize PROC
;;;157 */
;;;158 int WIDGET__GetXSize(const WIDGET* pWidget) {
000000 8cc1 LDRH r1,[r0,#0x26]
;;;159 int r;
;;;160 if (pWidget->State & WIDGET_STATE_VERTICAL) {
000002 0709 LSLS r1,r1,#28
000004 d504 BPL |L18.16|
;;;161 r = pWidget->Win.Rect.y1 - pWidget->Win.Rect.y0;
000006 f9b01006 LDRSH r1,[r0,#6]
00000a f9b00002 LDRSH r0,[r0,#2]
00000e e003 B |L18.24|
|L18.16|
;;;162 } else {
;;;163 r = pWidget->Win.Rect.x1 - pWidget->Win.Rect.x0;
000010 f9b01004 LDRSH r1,[r0,#4]
000014 f9b00000 LDRSH r0,[r0,#0]
|L18.24|
000018 1a08 SUBS r0,r1,r0
;;;164 }
;;;165 return r + 1;
00001a 1c40 ADDS r0,r0,#1
;;;166 }
00001c 4770 BX lr
;;;167
ENDP
AREA ||i.WIDGET__GetYSize||, CODE, READONLY, ALIGN=1
WIDGET__GetYSize PROC
;;;171 */
;;;172 int WIDGET__GetYSize(const WIDGET* pWidget) {
000000 8cc1 LDRH r1,[r0,#0x26]
;;;173 int r;
;;;174 if (pWidget->State & WIDGET_STATE_VERTICAL) {
000002 0709 LSLS r1,r1,#28
000004 d504 BPL |L19.16|
;;;175 r = pWidget->Win.Rect.x1 - pWidget->Win.Rect.x0;
000006 f9b01004 LDRSH r1,[r0,#4]
00000a f9b00000 LDRSH r0,[r0,#0]
00000e e003 B |L19.24|
|L19.16|
;;;176 } else {
;;;177 r = pWidget->Win.Rect.y1 - pWidget->Win.Rect.y0;
000010 f9b01006 LDRSH r1,[r0,#6]
000014 f9b00002 LDRSH r0,[r0,#2]
|L19.24|
000018 1a08 SUBS r0,r1,r0
;;;178 }
;;;179 return r + 1;
00001a 1c40 ADDS r0,r0,#1
;;;180 }
00001c 4770 BX lr
;;;181
ENDP
AREA ||i.WIDGET__Init||, CODE, READONLY, ALIGN=2
WIDGET__Init PROC
;;;274 */
;;;275 void WIDGET__Init(WIDGET* pWidget, int Id, U16 State) {
000000 4b02 LDR r3,|L20.12|
;;;276 pWidget->pEffect = _pEffectDefault;
000002 681b LDR r3,[r3,#0] ; _pEffectDefault
;;;277 pWidget->State = State;
000004 6203 STR r3,[r0,#0x20]
000006 84c2 STRH r2,[r0,#0x26]
;;;278 pWidget->Id = Id;
000008 8481 STRH r1,[r0,#0x24]
;;;279 }
00000a 4770 BX lr
;;;280
ENDP
|L20.12|
DCD ||.data||
AREA ||i.WIDGET__RotateRect90||, CODE, READONLY, ALIGN=1
WIDGET__RotateRect90 PROC
;;;99 */
;;;100 void WIDGET__RotateRect90(WIDGET* pWidget, GUI_RECT* pDest, const GUI_RECT* pRect) {
000000 b570 PUSH {r4-r6,lr}
;;;101 int x0, x1, XSize;
;;;102 x0 = pRect->x0;
;;;103 x1 = pRect->x1;
;;;104 XSize = pWidget->Win.Rect.x1 - pWidget->Win.Rect.x0;
000002 8885 LDRH r5,[r0,#4]
000004 8800 LDRH r0,[r0,#0]
;;;105 pDest->x0 = XSize - pRect->y1;
000006 88d6 LDRH r6,[r2,#6]
000008 1a28 SUBS r0,r5,r0 ;104
00000a 8813 LDRH r3,[r2,#0] ;102
00000c 8894 LDRH r4,[r2,#4] ;103
00000e 1b85 SUBS r5,r0,r6
000010 800d STRH r5,[r1,#0]
;;;106 pDest->x1 = XSize - pRect->y0;
000012 8852 LDRH r2,[r2,#2]
000014 1a80 SUBS r0,r0,r2
000016 8088 STRH r0,[r1,#4]
;;;107 pDest->y0 = x0;
000018 804b STRH r3,[r1,#2]
;;;108 pDest->y1 = x1;
00001a 80cc STRH r4,[r1,#6]
;;;109
;;;110 }
00001c bd70 POP {r4-r6,pc}
;;;111
ENDP
AREA ||i.WIDGET__SetScrollState||, CODE, READONLY, ALIGN=1
WIDGET__SetScrollState PROC
;;;352 */
;;;353 void WIDGET__SetScrollState(WM_HWIN hWin, const WM_SCROLL_STATE* pVState, const WM_SCROLL_STATE* pHState) {
000000 b570 PUSH {r4-r6,lr}
000002 460e MOV r6,r1
000004 4605 MOV r5,r0
000006 4614 MOV r4,r2
;;;354 WM_HWIN hScroll;
;;;355 /* vertical scrollbar */
;;;356 hScroll = WM_GetDialogItem(hWin, GUI_ID_VSCROLL);
000008 21fe MOVS r1,#0xfe
00000a f7fffffe BL WM_GetDialogItem
;;;357 WM_SetScrollState(hScroll, pVState);
00000e 4631 MOV r1,r6
000010 f7fffffe BL WM_SetScrollState
;;;358 /* horizontal scrollbar */
;;;359 hScroll = WM_GetDialogItem(hWin, GUI_ID_HSCROLL);
000014 21ff MOVS r1,#0xff
000016 4628 MOV r0,r5
000018 f7fffffe BL WM_GetDialogItem
;;;360 WM_SetScrollState(hScroll, pHState);
00001c 4621 MOV r1,r4
00001e e8bd4070 POP {r4-r6,lr}
000022 f7ffbffe B.W WM_SetScrollState
;;;361 }
;;;362
ENDP
AREA ||i._EffectRequiresRedraw||, CODE, READONLY, ALIGN=1
_EffectRequiresRedraw PROC
;;;67 */
;;;68 static int _EffectRequiresRedraw(const WIDGET* pWidget, const GUI_RECT * pRect) {
000000 b57c PUSH {r2-r6,lr}
000002 460d MOV r5,r1
;;;69 int EffectSize = pWidget->pEffect->EffectSize;
000004 6a01 LDR r1,[r0,#0x20]
;;;70 GUI_RECT InvalidRect;
;;;71 InvalidRect = pWidget->Win.InvalidRect;
000006 694c LDR r4,[r1,#0x14]
000008 e9d01202 LDRD r1,r2,[r0,#8]
;;;72 WM__Client2Screen(&pWidget->Win, &InvalidRect);
00000c e9cd1200 STRD r1,r2,[sp,#0]
000010 4669 MOV r1,sp
000012 f7fffffe BL WM__Client2Screen
;;;73 /* Check if there a part of the effect is inside the invalid rectangle */
;;;74 if ((pRect->x0 + EffectSize) > InvalidRect.x0) {
000016 f9b50000 LDRSH r0,[r5,#0]
00001a f9bd1000 LDRSH r1,[sp,#0]
00001e 4420 ADD r0,r0,r4
000020 4288 CMP r0,r1
000022 dc14 BGT |L23.78|
;;;75 return 1; /* Overlap ... Drawing required */
;;;76 }
;;;77 if ((pRect->x1 - EffectSize) < InvalidRect.x1) {
000024 f9b50004 LDRSH r0,[r5,#4]
000028 f9bd1004 LDRSH r1,[sp,#4]
00002c 1b00 SUBS r0,r0,r4
00002e 4288 CMP r0,r1
000030 db0d BLT |L23.78|
;;;78 return 1; /* Overlap ... Drawing required */
;;;79 }
;;;80 if ((pRect->y0 + EffectSize) > InvalidRect.y0) {
000032 f9b50002 LDRSH r0,[r5,#2]
000036 f9bd1002 LDRSH r1,[sp,#2]
00003a 4420 ADD r0,r0,r4
00003c 4288 CMP r0,r1
00003e dc06 BGT |L23.78|
;;;81 return 1; /* Overlap ... Drawing required */
;;;82 }
;;;83 if ((pRect->y1 - EffectSize) < InvalidRect.y1) {
000040 f9b50006 LDRSH r0,[r5,#6]
000044 f9bd1006 LDRSH r1,[sp,#6]
000048 1b00 SUBS r0,r0,r4
00004a 4288 CMP r0,r1
00004c da01 BGE |L23.82|
|L23.78|
;;;84 return 1; /* Overlap ... Drawing required */
00004e 2001 MOVS r0,#1
;;;85 }
;;;86 return 0; /* No overlap ! */
;;;87 }
000050 bd7c POP {r2-r6,pc}
|L23.82|
000052 2000 MOVS r0,#0 ;86
000054 bd7c POP {r2-r6,pc}
;;;88
ENDP
AREA ||.data||, DATA, ALIGN=2
_pEffectDefault
DCD WIDGET_Effect_3D
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -