📄 checkbox.txt
字号:
;;;113 */
;;;114 static void _Paint(CHECKBOX_Obj* pObj, CHECKBOX_Handle hObj) {
000000 b5f0 PUSH {r4-r7,lr}
000002 460f MOV r7,r1
000004 b087 SUB sp,sp,#0x1c
000006 4604 MOV r4,r0
;;;115 GUI_RECT RectBox = {0};
000008 2100 MOVS r1,#0
00000a a805 ADD r0,sp,#0x14
00000c 460a MOV r2,r1
00000e c006 STM r0!,{r1,r2}
;;;116 int ColorIndex, EffectSize;
;;;117 EffectSize = pObj->Widget.pEffect->EffectSize;
000010 6a20 LDR r0,[r4,#0x20]
;;;118 ColorIndex = WM__IsEnabled(hObj);
000012 6946 LDR r6,[r0,#0x14]
000014 4638 MOV r0,r7
000016 f7fffffe BL WM__IsEnabled
00001a 4605 MOV r5,r0
;;;119 /* Clear inside ... Just in case */
;;;120 /* Fill with parents background color */
;;;121 #if WM_SUPPORT_TRANSPARENCY
;;;122 if (!WM_GetHasTrans(hObj))
00001c 4638 MOV r0,r7
00001e f7fffffe BL WM_GetHasTrans
000022 b958 CBNZ r0,|L3.60|
;;;123 #endif
;;;124 {
;;;125 if (pObj->Props.BkColor == GUI_INVALID_COLOR) {
000024 6b60 LDR r0,[r4,#0x34]
000026 f06f4170 MVN r1,#0xf0000000
00002a 4288 CMP r0,r1
00002c d102 BNE |L3.52|
;;;126 LCD_SetBkColor(WIDGET__GetBkColor(hObj));
00002e 4638 MOV r0,r7
000030 f7fffffe BL WIDGET__GetBkColor
|L3.52|
;;;127 } else {
;;;128 LCD_SetBkColor(pObj->Props.BkColor);
000034 f7fffffe BL LCD_SetBkColor
;;;129 }
;;;130 GUI_Clear();
000038 f7fffffe BL GUI_Clear
|L3.60|
;;;131 }
;;;132 /* Get size from bitmap */
;;;133 RectBox.x1 = pObj->Props.apBm[0]->XSize - 1 + 2 * EffectSize;
00003c 6c20 LDR r0,[r4,#0x40]
00003e 8801 LDRH r1,[r0,#0]
000040 f04f30ff MOV r0,#0xffffffff
000044 eb000046 ADD r0,r0,r6,LSL #1
000048 4401 ADD r1,r1,r0
00004a f8ad1018 STRH r1,[sp,#0x18]
;;;134 RectBox.y1 = pObj->Props.apBm[0]->YSize - 1 + 2 * EffectSize;
00004e 6c21 LDR r1,[r4,#0x40]
000050 8849 LDRH r1,[r1,#2]
000052 4408 ADD r0,r0,r1
000054 f8ad001a STRH r0,[sp,#0x1a]
;;;135 WM_SetUserClipRect(&RectBox);
000058 a805 ADD r0,sp,#0x14
00005a f7fffffe BL WM_SetUserClipRect
;;;136 /* Clear inside ... Just in case */
;;;137 LCD_SetBkColor(pObj->Props.aBkColorBox[ColorIndex]);
00005e eb040085 ADD r0,r4,r5,LSL #2
000062 6ac0 LDR r0,[r0,#0x2c]
000064 f7fffffe BL LCD_SetBkColor
;;;138 GUI_Clear();
000068 f7fffffe BL GUI_Clear
;;;139 if (pObj->CurrentState) {
00006c f8940051 LDRB r0,[r4,#0x51]
000070 b148 CBZ r0,|L3.134|
;;;140 int Index = (pObj->CurrentState - 1) * 2 + ColorIndex;
000072 0040 LSLS r0,r0,#1
000074 1e80 SUBS r0,r0,#2
000076 4428 ADD r0,r0,r5
;;;141 GUI_DrawBitmap(pObj->Props.apBm[Index], EffectSize, EffectSize);
000078 eb040080 ADD r0,r4,r0,LSL #2
00007c 6c00 LDR r0,[r0,#0x40]
00007e 4632 MOV r2,r6
000080 4631 MOV r1,r6
000082 f7fffffe BL GUI_DrawBitmap
|L3.134|
;;;142 }
;;;143 /* Draw the effect arround the box */
;;;144 WIDGET__EFFECT_DrawDownRect(&pObj->Widget, &RectBox);
000086 a905 ADD r1,sp,#0x14
000088 4620 MOV r0,r4
00008a f7fffffe BL WIDGET__EFFECT_DrawDownRect
;;;145 WM_SetUserClipRect(NULL);
00008e 2000 MOVS r0,#0
000090 f7fffffe BL WM_SetUserClipRect
;;;146 /* Draw text if needed */
;;;147 if (pObj->hpText) {
000094 f9b40052 LDRSH r0,[r4,#0x52]
000098 2800 CMP r0,#0
00009a d072 BEQ |L3.386|
;;;148 const char * s;
;;;149 GUI_RECT RectText;
;;;150 /* Draw the text */
;;;151 s = (const char *) GUI_ALLOC_h2p(pObj->hpText);
00009c f7fffffe BL GUI_ALLOC_h2p
0000a0 4605 MOV r5,r0
;;;152 WM_GetClientRect(&RectText);
0000a2 a803 ADD r0,sp,#0xc
0000a4 f7fffffe BL WM_GetClientRect
;;;153 RectText.x0 += RectBox.x1 + 1 + pObj->Props.Spacing;
0000a8 f8bd000c LDRH r0,[sp,#0xc]
0000ac f8bd1018 LDRH r1,[sp,#0x18]
0000b0 4401 ADD r1,r1,r0
0000b2 f894003e LDRB r0,[r4,#0x3e]
0000b6 1c40 ADDS r0,r0,#1
0000b8 4408 ADD r0,r0,r1
0000ba f8ad000c STRH r0,[sp,#0xc]
;;;154 GUI_SetTextMode(GUI_TM_TRANS);
0000be 2002 MOVS r0,#2
0000c0 f7fffffe BL GUI_SetTextMode
;;;155 LCD_SetColor(pObj->Props.TextColor);
0000c4 6ba0 LDR r0,[r4,#0x38]
0000c6 f7fffffe BL LCD_SetColor
;;;156 GUI_SetFont(pObj->Props.pFont);
0000ca 6aa0 LDR r0,[r4,#0x28]
0000cc f7fffffe BL GUI_SetFont
;;;157 GUI_DispStringInRect(s, &RectText, pObj->Props.Align);
0000d0 f9b4203c LDRSH r2,[r4,#0x3c]
0000d4 a903 ADD r1,sp,#0xc
0000d6 4628 MOV r0,r5
0000d8 f7fffffe BL GUI_DispStringInRect
;;;158 /* Draw focus rectangle */
;;;159 if (pObj->Widget.State & WIDGET_STATE_FOCUS) {
0000dc 8ce0 LDRH r0,[r4,#0x26]
0000de 07c0 LSLS r0,r0,#31
0000e0 d04f BEQ |L3.386|
;;;160 int xSizeText = GUI_GetStringDistX(s);
0000e2 4628 MOV r0,r5
0000e4 f7fffffe BL GUI_GetStringDistX
0000e8 4605 MOV r5,r0
;;;161 int ySizeText = GUI_GetFontSizeY();
0000ea f7fffffe BL GUI_GetFontSizeY
;;;162 GUI_RECT RectFocus = RectText;
0000ee e9dd1203 LDRD r1,r2,[sp,#0xc]
;;;163 switch (pObj->Props.Align & ~(GUI_TA_HORIZONTAL)) {
0000f2 e9cd1201 STRD r1,r2,[sp,#4]
0000f6 f9b4103c LDRSH r1,[r4,#0x3c]
0000fa f0210103 BIC r1,r1,#3
0000fe 2904 CMP r1,#4
000100 d008 BEQ |L3.276|
000102 290c CMP r1,#0xc
000104 d10b BNE |L3.286|
;;;164 case GUI_TA_VCENTER:
;;;165 RectFocus.y0 = (RectText.y1 - ySizeText) / 2;
000106 f9bd1012 LDRSH r1,[sp,#0x12]
00010a 1a09 SUBS r1,r1,r0
00010c eb0171d1 ADD r1,r1,r1,LSR #31
000110 1049 ASRS r1,r1,#1
;;;166 break;
000112 e002 B |L3.282|
|L3.276|
;;;167 case GUI_TA_BOTTOM:
;;;168 RectFocus.y0 = RectText.y1 - ySizeText;
000114 f8bd1012 LDRH r1,[sp,#0x12]
000118 1a09 SUBS r1,r1,r0
|L3.282|
00011a f8ad1006 STRH r1,[sp,#6] ;165
|L3.286|
;;;169 break;
;;;170 }
;;;171 switch (pObj->Props.Align & ~(GUI_TA_VERTICAL)) {
00011e f9b4103c LDRSH r1,[r4,#0x3c]
000122 f021010c BIC r1,r1,#0xc
000126 2901 CMP r1,#1
000128 d00e BEQ |L3.328|
00012a 2902 CMP r1,#2
00012c d117 BNE |L3.350|
;;;172 case GUI_TA_HCENTER:
;;;173 RectFocus.x0 += ((RectText.x1 - RectText.x0) - xSizeText) / 2;
00012e f9bd1010 LDRSH r1,[sp,#0x10]
000132 f9bd200c LDRSH r2,[sp,#0xc]
000136 1a89 SUBS r1,r1,r2
000138 1b49 SUBS r1,r1,r5
00013a f8bd2004 LDRH r2,[sp,#4]
00013e eb0171d1 ADD r1,r1,r1,LSR #31
000142 eb020161 ADD r1,r2,r1,ASR #1
;;;174 break;
000146 e008 B |L3.346|
|L3.328|
;;;175 case GUI_TA_RIGHT:
;;;176 RectFocus.x0 += (RectText.x1 - RectText.x0) - xSizeText;
000148 f8bd1010 LDRH r1,[sp,#0x10]
00014c f8bd200c LDRH r2,[sp,#0xc]
000150 1a89 SUBS r1,r1,r2
000152 f8bd2004 LDRH r2,[sp,#4]
000156 1b49 SUBS r1,r1,r5
000158 4411 ADD r1,r1,r2
|L3.346|
00015a f8ad1004 STRH r1,[sp,#4] ;173
|L3.350|
;;;177 break;
;;;178 }
;;;179 RectFocus.x1 = RectFocus.x0 + xSizeText;
00015e f8bd1004 LDRH r1,[sp,#4]
000162 4429 ADD r1,r1,r5
000164 f8ad1008 STRH r1,[sp,#8]
;;;180 RectFocus.y1 = RectFocus.y0 + ySizeText;
000168 f8bd1006 LDRH r1,[sp,#6]
00016c 4408 ADD r0,r0,r1
00016e f8ad000a STRH r0,[sp,#0xa]
;;;181 LCD_SetColor(GUI_BLACK);
000172 2000 MOVS r0,#0
000174 f7fffffe BL LCD_SetColor
;;;182 WIDGET__DrawFocusRect(&pObj->Widget, &RectFocus, 0);
000178 2200 MOVS r2,#0
00017a a901 ADD r1,sp,#4
00017c 4620 MOV r0,r4
00017e f7fffffe BL WIDGET__DrawFocusRect
|L3.386|
;;;183 }
;;;184 }
;;;185 }
000182 b007 ADD sp,sp,#0x1c
000184 bdf0 POP {r4-r7,pc}
;;;186
ENDP
AREA ||.data||, DATA, ALIGN=2
CHECKBOX__DefaultProps
DCD GUI_Font13_1
DCD 0x00808080
DCD 0x00ffffff
DCD 0x00c0c0c0
DCD 0x00000000
000014 000c DCW 0x000c
000016 0400 DCB 0x04,0x00
DCD CHECKBOX__abmCheck
DCD CHECKBOX__abmCheck+0x14
% 8
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -