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

📄 slider.txt

📁 STM32F103ZET6+UCOSII+UCGUI源码
💻 TXT
📖 第 1 页 / 共 3 页
字号:
                  |L11.188|
0000bc  4650              MOV      r0,r10
0000be  e8bd47f0          POP      {r4-r10,lr}
0000c2  f7ffbffe          B.W      WM_NotifyParent
                  |L11.198|
;;;241            _SliderReleased(hObj, pObj);
;;;242          }
;;;243        }
;;;244      }
;;;245    }
0000c6  e8bd87f0          POP      {r4-r10,pc}
;;;246    
                          ENDP


                          AREA ||i._Paint||, CODE, READONLY, ALIGN=2

                  _Paint PROC
;;;121    */
;;;122    static void _Paint(SLIDER_Obj* pObj, WM_HWIN hObj) {
000000  e92d43f0          PUSH     {r4-r9,lr}
000004  b089              SUB      sp,sp,#0x24
000006  4689              MOV      r9,r1
000008  4604              MOV      r4,r0
;;;123      GUI_RECT r, rFocus, rSlider, rSlot;
;;;124      int x0, xsize, i, Range, NumTicks;
;;;125      WIDGET__GetClientRect(&pObj->Widget, &rFocus);
00000a  a905              ADD      r1,sp,#0x14
00000c  f7fffffe          BL       WIDGET__GetClientRect
;;;126      GUI__ReduceRect(&r, &rFocus, 1);
000010  2201              MOVS     r2,#1
000012  a905              ADD      r1,sp,#0x14
000014  a807              ADD      r0,sp,#0x1c
000016  f7fffffe          BL       GUI__ReduceRect
;;;127      NumTicks = pObj->NumTicks;
;;;128      xsize    = r.x1 - r.x0  + 1 - pObj->Width;
00001a  f9bd0020          LDRSH    r0,[sp,#0x20]
00001e  f9bd101c          LDRSH    r1,[sp,#0x1c]
;;;129      x0       = r.x0 + pObj->Width / 2;
;;;130      Range    = pObj->Max - pObj->Min;
000022  6ca6              LDR      r6,[r4,#0x48]
000024  1a42              SUBS     r2,r0,r1              ;128
000026  f9b4004c          LDRSH    r0,[r4,#0x4c]         ;128
00002a  1a12              SUBS     r2,r2,r0              ;128
00002c  eb0070d0          ADD      r0,r0,r0,LSR #31      ;129
000030  eb010760          ADD      r7,r1,r0,ASR #1       ;129
000034  e9d4100e          LDRD     r1,r0,[r4,#0x38]
000038  f1020801          ADD      r8,r2,#1              ;128
00003c  1a45              SUBS     r5,r0,r1
;;;131      if (Range == 0) {
00003e  d100              BNE      |L12.66|
;;;132        Range = 1;
000040  2501              MOVS     r5,#1
                  |L12.66|
;;;133      }
;;;134      /* Fill with parents background color */
;;;135      #if !SLIDER_SUPPORT_TRANSPARENCY   /* Not needed any more, since window is transparent*/
;;;136        if (pObj->aBkColor[0] == GUI_INVALID_COLOR) {
;;;137          LCD_SetBkColor(WIDGET__GetBkColor(hObj));
;;;138        } else {
;;;139          LCD_SetBkColor(pObj->aBkColor[0]);
;;;140        }
;;;141        GUI_Clear();
;;;142      #else
;;;143        if (!WM_GetHasTrans(hObj)) {
000042  4648              MOV      r0,r9
000044  f7fffffe          BL       WM_GetHasTrans
000048  b920              CBNZ     r0,|L12.84|
;;;144          LCD_SetBkColor(pObj->aBkColor[0]);
00004a  6aa0              LDR      r0,[r4,#0x28]
00004c  f7fffffe          BL       LCD_SetBkColor
;;;145          GUI_Clear();
000050  f7fffffe          BL       GUI_Clear
                  |L12.84|
;;;146        }
;;;147      #endif
;;;148      /* Calculate Slider position */
;;;149      rSlider    = r;
000054  e9dd0107          LDRD     r0,r1,[sp,#0x1c]
;;;150      rSlider.y0 = 5;
000058  f04f0905          MOV      r9,#5
00005c  e9cd0103          STRD     r0,r1,[sp,#0xc]
000060  f8ad900e          STRH     r9,[sp,#0xe]
;;;151      rSlider.x0 = x0 + (U32)xsize * (U32)(pObj->v - pObj->Min) / Range - pObj->Width / 2;
000064  6ba2              LDR      r2,[r4,#0x38]
000066  6c21              LDR      r1,[r4,#0x40]
000068  f9b4004c          LDRSH    r0,[r4,#0x4c]
00006c  1a89              SUBS     r1,r1,r2
00006e  fb01f108          MUL      r1,r1,r8
000072  fbb1f1f5          UDIV     r1,r1,r5
000076  4439              ADD      r1,r1,r7
000078  eb0072d0          ADD      r2,r0,r0,LSR #31
00007c  eba10162          SUB      r1,r1,r2,ASR #1
;;;152      rSlider.x1 = rSlider.x0 + pObj->Width;
000080  4408              ADD      r0,r0,r1
000082  f8ad0010          STRH     r0,[sp,#0x10]
;;;153      /* Calculate Slot position */
;;;154      rSlot.x0 = x0;
;;;155      rSlot.x1 = x0 + xsize;
000086  eb070008          ADD      r0,r7,r8
00008a  f8ad0008          STRH     r0,[sp,#8]
;;;156      rSlot.y0 = (rSlider.y0 + rSlider.y1) / 2 - 1;
00008e  f9bd0012          LDRSH    r0,[sp,#0x12]
000092  f8ad100c          STRH     r1,[sp,#0xc]          ;151
000096  1d40              ADDS     r0,r0,#5
000098  eb0070d0          ADD      r0,r0,r0,LSR #31
00009c  f04f31ff          MOV      r1,#0xffffffff
0000a0  eb010060          ADD      r0,r1,r0,ASR #1
0000a4  f8ad7004          STRH     r7,[sp,#4]            ;154
0000a8  f8ad0006          STRH     r0,[sp,#6]
;;;157      rSlot.y1 = rSlot.y0 + 3;
0000ac  1cc0              ADDS     r0,r0,#3
0000ae  f8ad000a          STRH     r0,[sp,#0xa]
;;;158      WIDGET__EFFECT_DrawDownRect(&pObj->Widget, &rSlot);        /* Draw slot */
0000b2  a901              ADD      r1,sp,#4
0000b4  4620              MOV      r0,r4
0000b6  f7fffffe          BL       WIDGET__EFFECT_DrawDownRect
;;;159      /* Draw the ticks */
;;;160      if (NumTicks < 0) {
0000ba  2e00              CMP      r6,#0
0000bc  da06              BGE      |L12.204|
;;;161        NumTicks = Range + 1;
;;;162        if (NumTicks > (xsize / 5)) {
0000be  fb98f0f9          SDIV     r0,r8,r9
0000c2  1c6e              ADDS     r6,r5,#1              ;161
0000c4  42b0              CMP      r0,r6
0000c6  da01              BGE      |L12.204|
;;;163          NumTicks = 11;
0000c8  260b              MOVS     r6,#0xb
0000ca  e001              B        |L12.208|
                  |L12.204|
;;;164        }
;;;165      }
;;;166      if (NumTicks > 1) {
0000cc  2e01              CMP      r6,#1
0000ce  dd14              BLE      |L12.250|
                  |L12.208|
;;;167        LCD_SetColor(GUI_BLACK);
0000d0  2000              MOVS     r0,#0
0000d2  f7fffffe          BL       LCD_SetColor
;;;168        for (i = 0; i < NumTicks; i++) {
0000d6  2500              MOVS     r5,#0
;;;169          int x = x0 + xsize * i / (NumTicks - 1);
0000d8  f1a60901          SUB      r9,r6,#1
0000dc  e00b              B        |L12.246|
0000de  bf00              NOP      
                  |L12.224|
0000e0  fb08f005          MUL      r0,r8,r5
0000e4  fb90f0f9          SDIV     r0,r0,r9
0000e8  19c1              ADDS     r1,r0,r7
;;;170          WIDGET__DrawVLine(&pObj->Widget, x, 1, 3);
0000ea  2303              MOVS     r3,#3
0000ec  2201              MOVS     r2,#1
0000ee  4620              MOV      r0,r4
0000f0  f7fffffe          BL       WIDGET__DrawVLine
0000f4  1c6d              ADDS     r5,r5,#1              ;168
                  |L12.246|
0000f6  42b5              CMP      r5,r6                 ;168
0000f8  dbf2              BLT      |L12.224|
                  |L12.250|
;;;171        }
;;;172      }
;;;173      /* Draw the slider itself */
;;;174      LCD_SetColor(pObj->aColor[0]);
0000fa  6b20              LDR      r0,[r4,#0x30]
0000fc  f7fffffe          BL       LCD_SetColor
;;;175      WIDGET__FillRectEx(&pObj->Widget, &rSlider);
000100  a903              ADD      r1,sp,#0xc
000102  4620              MOV      r0,r4
000104  f7fffffe          BL       WIDGET__FillRectEx
;;;176      LCD_SetColor(GUI_BLACK);
000108  2000              MOVS     r0,#0
00010a  f7fffffe          BL       LCD_SetColor
;;;177      WIDGET__EFFECT_DrawUpRect(&pObj->Widget, &rSlider);
00010e  a903              ADD      r1,sp,#0xc
000110  4620              MOV      r0,r4
000112  f7fffffe          BL       WIDGET__EFFECT_DrawUpRect
;;;178      /* Draw focus */
;;;179      if (pObj->Widget.State & WIDGET_STATE_FOCUS) {
000116  8ce0              LDRH     r0,[r4,#0x26]
000118  07c0              LSLS     r0,r0,#31
00011a  d007              BEQ      |L12.300|
;;;180        LCD_SetColor(GUI_BLACK);
00011c  2000              MOVS     r0,#0
00011e  f7fffffe          BL       LCD_SetColor
;;;181        WIDGET__DrawFocusRect(&pObj->Widget, &rFocus, 0);
000122  2200              MOVS     r2,#0
000124  a905              ADD      r1,sp,#0x14
000126  4620              MOV      r0,r4
000128  f7fffffe          BL       WIDGET__DrawFocusRect
                  |L12.300|
;;;182      }
;;;183    }
00012c  b009              ADD      sp,sp,#0x24
00012e  e8bd83f0          POP      {r4-r9,pc}
;;;184    
                          ENDP


                          AREA ||i._SLIDER_Callback||, CODE, READONLY, ALIGN=1

                  _SLIDER_Callback PROC
;;;273    */
;;;274    static void _SLIDER_Callback (WM_MESSAGE *pMsg) {
000000  b570              PUSH     {r4-r6,lr}
;;;275      SLIDER_Handle hObj;
;;;276      SLIDER_Obj* pObj;
;;;277      hObj = pMsg->hWin;
000002  f9b05004          LDRSH    r5,[r0,#4]
000006  4604              MOV      r4,r0                 ;274
;;;278      pObj = SLIDER_H2P(hObj);
000008  4628              MOV      r0,r5
00000a  f7fffffe          BL       GUI_ALLOC_h2p
00000e  4606              MOV      r6,r0
;;;279      /* Let widget handle the standard messages */
;;;280      if (WIDGET_HandleActive(hObj, pMsg) == 0) {
000010  4621              MOV      r1,r4
000012  4628              MOV      r0,r5
000014  f7fffffe          BL       WIDGET_HandleActive
000018  2800              CMP      r0,#0
00001a  d027              BEQ      |L13.108|
;;;281        return;
;;;282      }
;;;283      switch (pMsg->MsgId) {
00001c  6820              LDR      r0,[r4,#0]
00001e  280c              CMP      r0,#0xc
000020  d009              BEQ      |L13.54|
000022  280e              CMP      r0,#0xe
000024  d00d              BEQ      |L13.66|
000026  280f              CMP      r0,#0xf
000028  d11b              BNE      |L13.98|
;;;284      case WM_PAINT:
;;;285        GUI_DEBUG_LOG("SLIDER: _Callback(WM_PAINT)\n");
;;;286        _Paint(pObj, hObj);
00002a  4629              MOV      r1,r5
00002c  4630              MOV      r0,r6
00002e  e8bd4070          POP      {r4-r6,lr}
000032  f7ffbffe          B.W      _Paint
                  |L13.54|
;;;287        return;
;;;288      case WM_TOUCH:
;;;289        _OnTouch(hObj, pObj, pMsg);
000036  4622              MOV      r2,r4
000038  4631              MOV      r1,r6
00003a  4628              MOV      r0,r5
00003c  f7fffffe          BL       _OnTouch
;;;290        break;
000040  e00f              B        |L13.98|
                  |L13.66|
000042  68a0              LDR      r0,[r4,#8]
000044  e9d01000          LDRD     r1,r0,[r0,#0]
000048  2800              CMP      r0,#0
00004a  dd0a              BLE      |L13.98|
00004c  2910              CMP      r1,#0x10
00004e  d005              BEQ      |L13.92|
000050  2912              CMP      r1,#0x12
000052  d106              BNE      |L13.98|
000054  4628              MOV      r0,r5
000056  f7fffffe          BL       SLIDER_Inc
00005a  e002              B        |L13.98|
                  |L13.92|
00005c  4628              MOV      r0,r5
00005e  f7fffffe          BL       SLIDER_Dec
                  |L13.98|
;;;291      case WM_KEY:
;;;292        _OnKey(hObj, pMsg);
;;;293        break;
;;;294      }
;;;295      WM_DefaultProc(pMsg);
000062  4620              MOV      r0,r4
000064  e8bd4070          POP      {r4-r6,lr}
000068  f7ffbffe          B.W      WM_DefaultProc
                  |L13.108|
;;;296    }
00006c  bd70              POP      {r4-r6,pc}
;;;297    
                          ENDP


                          AREA ||.data||, DATA, ALIGN=2

                  _DefaultBkColor
                          DCD      0x00c0c0c0

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -