📄 radio.txt
字号:
;;;427 WM_LOCK();
;;;428 pObj = RADIO_H2P(hObj);
000008 4628 MOV r0,r5
00000a f7fffffe BL GUI_ALLOC_h2p
;;;429 if (pObj->GroupId && RADIO__pfHandleSetValue) {
00000e f8901040 LDRB r1,[r0,#0x40]
000012 b141 CBZ r1,|L6.38|
000014 4909 LDR r1,|L6.60|
000016 68cb LDR r3,[r1,#0xc] ; RADIO__pfHandleSetValue
000018 b12b CBZ r3,|L6.38|
;;;430 (*RADIO__pfHandleSetValue)(hObj, pObj, v);
00001a 4601 MOV r1,r0
00001c 4622 MOV r2,r4
00001e 4628 MOV r0,r5
000020 e8bd4070 POP {r4-r6,lr}
000024 4718 BX r3
|L6.38|
;;;431 } else {
;;;432 if (v < 0) {
000026 2c00 CMP r4,#0
000028 da00 BGE |L6.44|
;;;433 v = 0;
00002a 2400 MOVS r4,#0
|L6.44|
;;;434 }
;;;435 RADIO__SetValue(hObj, pObj, v);
00002c 4601 MOV r1,r0
00002e 4622 MOV r2,r4
000030 4628 MOV r0,r5
000032 e8bd4070 POP {r4-r6,lr}
000036 f7ffbffe B.W RADIO__SetValue
|L6.58|
;;;436 }
;;;437 WM_UNLOCK();
;;;438 }
;;;439 }
00003a bd70 POP {r4-r6,pc}
;;;440
ENDP
|L6.60|
DCD ||.data||
AREA ||i.RADIO__SetValue||, CODE, READONLY, ALIGN=1
RADIO__SetValue PROC
;;;308 */
;;;309 void RADIO__SetValue(RADIO_Handle hObj, RADIO_Obj* pObj, int v) {
000000 b510 PUSH {r4,lr}
000002 4604 MOV r4,r0
;;;310 if (v >= pObj->NumItems) {
000004 8fc8 LDRH r0,[r1,#0x3e]
000006 4290 CMP r0,r2
000008 dc00 BGT |L7.12|
;;;311 v = (int)pObj->NumItems - 1;
00000a 1e42 SUBS r2,r0,#1
|L7.12|
;;;312 }
;;;313 if (v != pObj->Sel) {
00000c f9b10038 LDRSH r0,[r1,#0x38]
000010 4290 CMP r0,r2
000012 d009 BEQ |L7.40|
;;;314 pObj->Sel = v;
000014 870a STRH r2,[r1,#0x38]
;;;315 WM_InvalidateWindow(hObj);
000016 4620 MOV r0,r4
000018 f7fffffe BL WM_InvalidateWindow
;;;316 WM_NotifyParent(hObj, WM_NOTIFICATION_VALUE_CHANGED);
00001c 4620 MOV r0,r4
00001e e8bd4010 POP {r4,lr}
000022 2105 MOVS r1,#5
000024 f7ffbffe B.W WM_NotifyParent
|L7.40|
;;;317 }
;;;318 }
000028 bd10 POP {r4,pc}
;;;319
ENDP
AREA ||i._OnPaint||, CODE, READONLY, ALIGN=2
_OnPaint PROC
;;;124 */
;;;125 static void _OnPaint(RADIO_Handle hObj, RADIO_Obj* pObj) {
000000 e92d4ff0 PUSH {r4-r11,lr}
000004 460c MOV r4,r1
000006 b089 SUB sp,sp,#0x24
000008 4607 MOV r7,r0
;;;126 const GUI_BITMAP* pBmRadio;
;;;127 const GUI_BITMAP* pBmCheck;
;;;128 const char* pText;
;;;129 GUI_FONTINFO FontInfo;
;;;130 GUI_RECT Rect, r, rFocus = {0};
00000a 2100 MOVS r1,#0
00000c a801 ADD r0,sp,#4
00000e 460a MOV r2,r1
000010 c006 STM r0!,{r1,r2}
;;;131 int i, y, HasFocus, FontDistY;
;;;132 U8 SpaceAbove, CHeight, FocusBorder;
;;;133
;;;134 /* Init some data */
;;;135 WIDGET__GetClientRect(&pObj->Widget, &rFocus);
000012 a901 ADD r1,sp,#4
000014 4620 MOV r0,r4
000016 f7fffffe BL WIDGET__GetClientRect
;;;136 HasFocus = (pObj->Widget.State & WIDGET_STATE_FOCUS) ? 1 : 0;
00001a 8ce0 LDRH r0,[r4,#0x26]
00001c f0000b01 AND r11,r0,#1
;;;137 pBmRadio = pObj->apBmRadio[WM__IsEnabled(hObj)];
000020 4638 MOV r0,r7
000022 f7fffffe BL WM__IsEnabled
000026 eb040080 ADD r0,r4,r0,LSL #2
;;;138 pBmCheck = pObj->pBmCheck;
00002a f8d08028 LDR r8,[r0,#0x28]
;;;139 rFocus.x1 = pBmRadio->XSize + RADIO_BORDER * 2 - 1;
00002e f8d4a030 LDR r10,[r4,#0x30]
000032 f8b80000 LDRH r0,[r8,#0]
000036 1cc0 ADDS r0,r0,#3
000038 f8ad0008 STRH r0,[sp,#8]
;;;140 rFocus.y1 = pObj->Height + ((pObj->NumItems - 1) * pObj->Spacing) - 1;
00003c 8fe0 LDRH r0,[r4,#0x3e]
00003e 8fa1 LDRH r1,[r4,#0x3c]
000040 8f62 LDRH r2,[r4,#0x3a]
000042 1e40 SUBS r0,r0,#1
000044 fb001002 MLA r0,r0,r2,r1
000048 1e40 SUBS r0,r0,#1
00004a f8ad000a STRH r0,[sp,#0xa]
;;;141
;;;142 /* Select font and text color */
;;;143 LCD_SetColor(pObj->TextColor);
00004e 6ca0 LDR r0,[r4,#0x48]
000050 f7fffffe BL LCD_SetColor
;;;144 GUI_SetFont(pObj->pFont);
000054 6ce0 LDR r0,[r4,#0x4c]
000056 f7fffffe BL GUI_SetFont
;;;145 GUI_SetTextMode(GUI_TM_TRANS);
00005a 2002 MOVS r0,#2
00005c f7fffffe BL GUI_SetTextMode
;;;146
;;;147 /* Get font infos */
;;;148 GUI_GetFontInfo(pObj->pFont, &FontInfo);
000060 a907 ADD r1,sp,#0x1c
000062 6ce0 LDR r0,[r4,#0x4c]
000064 f7fffffe BL GUI_GetFontInfo
;;;149 FontDistY = GUI_GetFontDistY();
000068 f7fffffe BL GUI_GetFontDistY
;;;150 CHeight = FontInfo.CHeight;
00006c f89d1020 LDRB r1,[sp,#0x20]
;;;151 SpaceAbove = FontInfo.Baseline - CHeight;
000070 f89d201e LDRB r2,[sp,#0x1e]
000074 1a52 SUBS r2,r2,r1
000076 b2d2 UXTB r2,r2
;;;152 Rect.x0 = pBmRadio->XSize + RADIO_BORDER * 2 + 2;
000078 9200 STR r2,[sp,#0]
00007a f8b82000 LDRH r2,[r8,#0]
;;;153 Rect.y0 = (CHeight <= pObj->Height) ? ((pObj->Height - CHeight) / 2) : 0;
00007e 8fa3 LDRH r3,[r4,#0x3c]
000080 1d92 ADDS r2,r2,#6 ;152
000082 f362050f BFI r5,r2,#0,#16 ;152
000086 2200 MOVS r2,#0
000088 428b CMP r3,r1
00008a d303 BCC |L8.148|
00008c 1a5a SUBS r2,r3,r1
00008e eb0272d2 ADD r2,r2,r2,LSR #31
000092 1052 ASRS r2,r2,#1
|L8.148|
000094 b212 SXTH r2,r2
;;;154 Rect.y1 = Rect.y0 + CHeight - 1;
000096 1e49 SUBS r1,r1,#1
000098 4411 ADD r1,r1,r2
00009a f362451f BFI r5,r2,#16,#16 ;153
00009e f361461f BFI r6,r1,#16,#16
;;;155 FocusBorder = (FontDistY <= 12) ? 2 : 3;
0000a2 e9cd5605 STRD r5,r6,[sp,#0x14]
0000a6 2602 MOVS r6,#2
0000a8 280c CMP r0,#0xc
0000aa dd00 BLE |L8.174|
0000ac 2603 MOVS r6,#3
|L8.174|
;;;156 if (Rect.y0 < FocusBorder) {
0000ae 42b2 CMP r2,r6
0000b0 da00 BGE |L8.180|
;;;157 FocusBorder = Rect.y0;
0000b2 b2d6 UXTB r6,r2
|L8.180|
;;;158 }
;;;159
;;;160 /* Clear inside ... Just in case */
;;;161 /* Fill with parents background color */
;;;162 #if WM_SUPPORT_TRANSPARENCY
;;;163 if (!WM_GetHasTrans(hObj))
0000b4 4638 MOV r0,r7
0000b6 f7fffffe BL WM_GetHasTrans
0000ba b948 CBNZ r0,|L8.208|
;;;164 #endif
;;;165 {
;;;166 if (pObj->BkColor != GUI_INVALID_COLOR) {
0000bc 6c60 LDR r0,[r4,#0x44]
0000be f06f4170 MVN r1,#0xf0000000
0000c2 4288 CMP r0,r1
0000c4 d100 BNE |L8.200|
;;;167 LCD_SetBkColor(pObj->BkColor);
;;;168 } else {
;;;169 LCD_SetBkColor(RADIO_DEFAULT_BKCOLOR);
0000c6 483e LDR r0,|L8.448|
|L8.200|
0000c8 f7fffffe BL LCD_SetBkColor
;;;170 }
;;;171 GUI_Clear();
0000cc f7fffffe BL GUI_Clear
|L8.208|
;;;172 }
;;;173
;;;174 /* Iterate over all items */
;;;175 for (i = 0; i < pObj->NumItems; i++) {
0000d0 2500 MOVS r5,#0
0000d2 e063 B |L8.412|
|L8.212|
;;;176 y = i * pObj->Spacing;
0000d4 8f62 LDRH r2,[r4,#0x3a]
;;;177 /* Draw the radio button bitmap */
;;;178 GUI_DrawBitmap(pBmRadio, RADIO_BORDER, RADIO_BORDER + y);
0000d6 2102 MOVS r1,#2
0000d8 fb02f905 MUL r9,r2,r5 ;176
0000dc f1090202 ADD r2,r9,#2
0000e0 4640 MOV r0,r8
0000e2 f7fffffe BL GUI_DrawBitmap
;;;179 /* Draw the check bitmap */
;;;180 if (pObj->Sel == i) {
0000e6 f9b40038 LDRSH r0,[r4,#0x38]
0000ea 42a8 CMP r0,r5
0000ec d116 BNE |L8.284|
;;;181 GUI_DrawBitmap(pBmCheck, RADIO_BORDER + (pBmRadio->XSize - pBmCheck->XSize) / 2,
0000ee f8b80000 LDRH r0,[r8,#0]
0000f2 f8ba1000 LDRH r1,[r10,#0]
0000f6 f8ba2002 LDRH r2,[r10,#2]
0000fa 1a40 SUBS r0,r0,r1
0000fc f8b81002 LDRH r1,[r8,#2]
000100 eb0070d0 ADD r0,r0,r0,LSR #31
000104 1a89 SUBS r1,r1,r2
000106 eb0172d1 ADD r2,r1,r1,LSR #31
00010a 2102 MOVS r1,#2
00010c eb090262 ADD r2,r9,r2,ASR #1
000110 eb010160 ADD r1,r1,r0,ASR #1
000114 1c92 ADDS r2,r2,#2
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -