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

📄 checkbox.txt

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