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

📄 slider.txt

📁 STM32F103ZET6+UCOSII+UCGUI源码
💻 TXT
📖 第 1 页 / 共 3 页
字号:
;;;464        SLIDER_Obj* pObj;
;;;465        WM_LOCK();
;;;466        pObj = SLIDER_H2P(hObj);
00000c  4620              MOV      r0,r4
00000e  f7fffffe          BL       GUI_ALLOC_h2p
;;;467        pObj->NumTicks = NumTicks;
;;;468        WM_InvalidateWindow(hObj);
000012  6485              STR      r5,[r0,#0x48]
000014  4620              MOV      r0,r4
000016  e8bd4070          POP      {r4-r6,lr}
00001a  f7ffbffe          B.W      WM_InvalidateWindow
                  |L7.30|
;;;469        WM_UNLOCK();
;;;470      }
;;;471    }
00001e  bd70              POP      {r4-r6,pc}
;;;472    
                          ENDP


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

                  SLIDER_SetRange PROC
;;;436    */
;;;437    void SLIDER_SetRange(SLIDER_Handle hObj, int Min, int Max) {
000000  b570              PUSH     {r4-r6,lr}
000002  0006              MOVS     r6,r0
000004  460c              MOV      r4,r1
000006  4615              MOV      r5,r2
;;;438      if (hObj) {
000008  d014              BEQ      |L8.52|
;;;439        SLIDER_Obj* pObj;
;;;440        WM_LOCK();
;;;441        pObj = SLIDER_H2P(hObj);
00000a  4630              MOV      r0,r6
00000c  f7fffffe          BL       GUI_ALLOC_h2p
;;;442        if (Max < Min) {
000010  42a5              CMP      r5,r4
000012  da00              BGE      |L8.22|
;;;443          Max = Min;
000014  4625              MOV      r5,r4
                  |L8.22|
;;;444        }
;;;445        pObj->Min = Min;
;;;446        pObj->Max = Max;
;;;447        if (pObj->v < Min) {
000016  e9c0450e          STRD     r4,r5,[r0,#0x38]
00001a  6c01              LDR      r1,[r0,#0x40]
00001c  42a1              CMP      r1,r4
00001e  da00              BGE      |L8.34|
;;;448          pObj->v = Min;
000020  6404              STR      r4,[r0,#0x40]
                  |L8.34|
;;;449        }
;;;450        if (pObj->v > Max) {
000022  6c01              LDR      r1,[r0,#0x40]
000024  42a9              CMP      r1,r5
000026  dd00              BLE      |L8.42|
;;;451          pObj->v = Max;
000028  6405              STR      r5,[r0,#0x40]
                  |L8.42|
;;;452        }
;;;453        WM_InvalidateWindow(hObj);
00002a  4630              MOV      r0,r6
00002c  e8bd4070          POP      {r4-r6,lr}
000030  f7ffbffe          B.W      WM_InvalidateWindow
                  |L8.52|
;;;454        WM_UNLOCK();
;;;455      }
;;;456    }
000034  bd70              POP      {r4-r6,pc}
;;;457    
                          ENDP


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

                  SLIDER_SetValue PROC
;;;411    */
;;;412    void SLIDER_SetValue(SLIDER_Handle hObj, int v) {
000000  b570              PUSH     {r4-r6,lr}
000002  0005              MOVS     r5,r0
000004  460c              MOV      r4,r1
;;;413      SLIDER_Obj* pObj;
;;;414      if (hObj) {
000006  d017              BEQ      |L9.56|
;;;415        WM_LOCK();
;;;416        pObj = SLIDER_H2P(hObj);
000008  4628              MOV      r0,r5
00000a  f7fffffe          BL       GUI_ALLOC_h2p
;;;417        /* Put in min/max range */
;;;418        if (v < pObj->Min) {
00000e  6b81              LDR      r1,[r0,#0x38]
000010  42a1              CMP      r1,r4
000012  dd00              BLE      |L9.22|
;;;419          v = pObj->Min;
000014  460c              MOV      r4,r1
                  |L9.22|
;;;420        }
;;;421        if (v > pObj->Max) {
000016  6bc1              LDR      r1,[r0,#0x3c]
000018  42a1              CMP      r1,r4
00001a  da00              BGE      |L9.30|
;;;422          v = pObj->Max;
00001c  460c              MOV      r4,r1
                  |L9.30|
;;;423        }
;;;424        if (pObj->v != v) {
00001e  6c01              LDR      r1,[r0,#0x40]
000020  42a1              CMP      r1,r4
000022  d009              BEQ      |L9.56|
;;;425          pObj->v = v;
;;;426          WM_InvalidateWindow(hObj);
000024  6404              STR      r4,[r0,#0x40]
000026  4628              MOV      r0,r5
000028  f7fffffe          BL       WM_InvalidateWindow
;;;427          WM_NotifyParent(hObj, WM_NOTIFICATION_VALUE_CHANGED);
00002c  4628              MOV      r0,r5
00002e  e8bd4070          POP      {r4-r6,lr}
000032  2105              MOVS     r1,#5
000034  f7ffbffe          B.W      WM_NotifyParent
                  |L9.56|
;;;428        }
;;;429        WM_UNLOCK();
;;;430      }
;;;431    }
000038  bd70              POP      {r4-r6,pc}
;;;432    
                          ENDP


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

                  SLIDER_SetWidth PROC
;;;394    */
;;;395    void SLIDER_SetWidth(SLIDER_Handle hObj, int Width) {
000000  b570              PUSH     {r4-r6,lr}
000002  0005              MOVS     r5,r0
000004  460c              MOV      r4,r1
;;;396      SLIDER_Obj* pObj;
;;;397      if (hObj) {
000006  d00d              BEQ      |L10.36|
;;;398        WM_LOCK();
;;;399        pObj = SLIDER_H2P(hObj);
000008  4628              MOV      r0,r5
00000a  f7fffffe          BL       GUI_ALLOC_h2p
;;;400        if (pObj->Width != Width) {
00000e  f9b0104c          LDRSH    r1,[r0,#0x4c]
000012  42a1              CMP      r1,r4
000014  d006              BEQ      |L10.36|
;;;401          pObj->Width = Width;
000016  f8a0404c          STRH     r4,[r0,#0x4c]
;;;402          WM_InvalidateWindow(hObj);
00001a  4628              MOV      r0,r5
00001c  e8bd4070          POP      {r4-r6,lr}
000020  f7ffbffe          B.W      WM_InvalidateWindow
                  |L10.36|
;;;403        }
;;;404        WM_UNLOCK();
;;;405      }
;;;406    }
000024  bd70              POP      {r4-r6,pc}
;;;407    
                          ENDP


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

                  _OnTouch PROC
;;;210    */
;;;211    static void _OnTouch(SLIDER_Handle hObj, SLIDER_Obj* pObj, WM_MESSAGE*pMsg) {
000000  e92d47f0          PUSH     {r4-r10,lr}
000004  4682              MOV      r10,r0
;;;212      const GUI_PID_STATE* pState = (const GUI_PID_STATE*)pMsg->Data.p;
;;;213      if (pMsg->Data.p) {  /* Something happened in our area (pressed or released) */
000006  6890              LDR      r0,[r2,#8]
000008  460c              MOV      r4,r1                 ;211
00000a  2800              CMP      r0,#0
00000c  d05b              BEQ      |L11.198|
;;;214        if (pState->Pressed) {
00000e  7a01              LDRB     r1,[r0,#8]
000010  f44f7980          MOV      r9,#0x100
000014  2900              CMP      r1,#0
000016  d046              BEQ      |L11.166|
;;;215          int x0, xsize, x, Sel, Range;
;;;216          Range = (pObj->Max - pObj->Min);
000018  e9d4210e          LDRD     r2,r1,[r4,#0x38]
00001c  1a8e              SUBS     r6,r1,r2
;;;217          x0    = 1 + pObj->Width / 2;  /* 1 pixel focus rectangle + width of actual slider */
00001e  f9b4104c          LDRSH    r1,[r4,#0x4c]
000022  f04f0801          MOV      r8,#1
000026  eb0172d1          ADD      r2,r1,r1,LSR #31
;;;218          x     = (pObj->Widget.State & WIDGET_STATE_VERTICAL) ? pState->y : pState->x;
00002a  8ce1              LDRH     r1,[r4,#0x26]
00002c  eb080762          ADD      r7,r8,r2,ASR #1       ;217
000030  0709              LSLS     r1,r1,#28
000032  d501              BPL      |L11.56|
000034  6840              LDR      r0,[r0,#4]
000036  e000              B        |L11.58|
                  |L11.56|
000038  6800              LDR      r0,[r0,#0]
                  |L11.58|
;;;219          x    -= x0;
00003a  1bc5              SUBS     r5,r0,r7
;;;220          xsize = WIDGET__GetWindowSizeX(hObj) - 2 * x0;
00003c  4650              MOV      r0,r10
00003e  f7fffffe          BL       WIDGET__GetWindowSizeX
000042  4279              RSBS     r1,r7,#0
000044  eb000041          ADD      r0,r0,r1,LSL #1
;;;221          if (x <= 0) {
000048  2d00              CMP      r5,#0
00004a  dc01              BGT      |L11.80|
;;;222            Sel = pObj->Min;
00004c  6ba5              LDR      r5,[r4,#0x38]
00004e  e00f              B        |L11.112|
                  |L11.80|
;;;223          } else if (x >= xsize) {
000050  4285              CMP      r5,r0
000052  db01              BLT      |L11.88|
;;;224            Sel = pObj->Max;
000054  6be5              LDR      r5,[r4,#0x3c]
000056  e00b              B        |L11.112|
                  |L11.88|
;;;225          } else {
;;;226            int Div;
;;;227            Div = xsize ? xsize : 1;     /* Make sure we do not divide by 0, even though xsize should never be 0 in this case anyhow */
000058  4641              MOV      r1,r8
00005a  b100              CBZ      r0,|L11.94|
00005c  4601              MOV      r1,r0
                  |L11.94|
;;;228            Sel = pObj->Min + ((U32)Range * (U32)x + Div / 2) / Div;
00005e  436e              MULS     r6,r5,r6
000060  eb0170d1          ADD      r0,r1,r1,LSR #31
000064  eb060060          ADD      r0,r6,r0,ASR #1
000068  fbb0f0f1          UDIV     r0,r0,r1
00006c  6ba1              LDR      r1,[r4,#0x38]
00006e  1845              ADDS     r5,r0,r1
                  |L11.112|
;;;229          }
;;;230          if (WM_IsFocussable(hObj)) {
000070  4650              MOV      r0,r10
000072  f7fffffe          BL       WM_IsFocussable
000076  b110              CBZ      r0,|L11.126|
;;;231            WM_SetFocus(hObj);
000078  4650              MOV      r0,r10
00007a  f7fffffe          BL       WM_SetFocus
                  |L11.126|
;;;232          }
;;;233          WM_SetCapture(hObj, 1);
00007e  2101              MOVS     r1,#1
000080  4650              MOV      r0,r10
000082  f7fffffe          BL       WM_SetCapture
;;;234          SLIDER_SetValue(hObj, Sel);
000086  4629              MOV      r1,r5
000088  4650              MOV      r0,r10
00008a  f7fffffe          BL       SLIDER_SetValue
;;;235          if ((pObj->Widget.State & SLIDER_STATE_PRESSED) == 0){   
00008e  8ce0              LDRH     r0,[r4,#0x26]
000090  05c0              LSLS     r0,r0,#23
000092  d418              BMI      |L11.198|
000094  4649              MOV      r1,r9
000096  4650              MOV      r0,r10
000098  f7fffffe          BL       WIDGET_OrState
00009c  8ba0              LDRH     r0,[r4,#0x1c]
00009e  0780              LSLS     r0,r0,#30
0000a0  d511              BPL      |L11.198|
0000a2  2101              MOVS     r1,#1
0000a4  e00a              B        |L11.188|
                  |L11.166|
;;;236            _SliderPressed(hObj, pObj);
;;;237          }
;;;238        } else {
;;;239          /* React only if button was pressed before ... avoid problems with moving / hiding windows above (such as dropdown) */
;;;240          if (pObj->Widget.State & SLIDER_STATE_PRESSED) {   
0000a6  8ce0              LDRH     r0,[r4,#0x26]
0000a8  05c0              LSLS     r0,r0,#23
0000aa  d50c              BPL      |L11.198|
0000ac  4649              MOV      r1,r9
0000ae  4650              MOV      r0,r10
0000b0  f7fffffe          BL       WIDGET_AndState
0000b4  8ba0              LDRH     r0,[r4,#0x1c]
0000b6  0780              LSLS     r0,r0,#30
0000b8  d505              BPL      |L11.198|
0000ba  2102              MOVS     r1,#2

⌨️ 快捷键说明

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