⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 radio.txt

📁 STM32F103ZET6+UCOSII+UCGUI源码
💻 TXT
📖 第 1 页 / 共 3 页
字号:
;;;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 + -