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

📄 scrollbar.txt

📁 STM32F103ZET6+UCOSII+UCGUI源码
💻 TXT
📖 第 1 页 / 共 4 页
字号:
                          ENDP


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

                  SCROLLBAR_SetState PROC
;;;598    */
;;;599    void  SCROLLBAR_SetState   (SCROLLBAR_Handle hObj, const WM_SCROLL_STATE* pState) {
000000  b570              PUSH     {r4-r6,lr}
000002  0005              MOVS     r5,r0
000004  460c              MOV      r4,r1
;;;600      if (hObj) {
000006  d00d              BEQ      |L7.36|
;;;601        SCROLLBAR_SetPageSize(hObj, pState->PageSize);
000008  4628              MOV      r0,r5
00000a  68a1              LDR      r1,[r4,#8]
00000c  f7fffffe          BL       SCROLLBAR_SetPageSize
;;;602        SCROLLBAR_SetNumItems(hObj, pState->NumItems);
000010  4628              MOV      r0,r5
000012  6821              LDR      r1,[r4,#0]
000014  f7fffffe          BL       SCROLLBAR_SetNumItems
;;;603        SCROLLBAR_SetValue   (hObj, pState->v);
000018  4628              MOV      r0,r5
00001a  6861              LDR      r1,[r4,#4]
00001c  e8bd4070          POP      {r4-r6,lr}
000020  f7ffbffe          B.W      SCROLLBAR_SetValue
                  |L7.36|
;;;604      }
;;;605    }
000024  bd70              POP      {r4-r6,pc}
;;;606    
                          ENDP


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

                  SCROLLBAR_SetValue PROC
;;;535    */
;;;536    void SCROLLBAR_SetValue(SCROLLBAR_Handle hObj, int v) {
000000  b570              PUSH     {r4-r6,lr}
000002  0005              MOVS     r5,r0
000004  460c              MOV      r4,r1
;;;537      SCROLLBAR_Obj* pObj;
;;;538      int Max;
;;;539      if (hObj) {
000006  d01a              BEQ      |L8.62|
;;;540        WM_LOCK();
;;;541        pObj = SCROLLBAR_H2P(hObj);
000008  4628              MOV      r0,r5
00000a  f7fffffe          BL       GUI_ALLOC_h2p
;;;542        Max = pObj->NumItems - pObj->PageSize;
00000e  6c02              LDR      r2,[r0,#0x40]
000010  6b81              LDR      r1,[r0,#0x38]
000012  1a89              SUBS     r1,r1,r2
;;;543        if (Max < 0)
000014  d500              BPL      |L8.24|
;;;544          Max =0;
000016  2100              MOVS     r1,#0
                  |L8.24|
;;;545        /* Put in min/max range */
;;;546        if (v < 0) {
000018  2c00              CMP      r4,#0
00001a  da00              BGE      |L8.30|
;;;547          v = 0;
00001c  2400              MOVS     r4,#0
                  |L8.30|
;;;548        }
;;;549        if (v > Max) {
00001e  428c              CMP      r4,r1
000020  dd00              BLE      |L8.36|
;;;550          v = Max;
000022  460c              MOV      r4,r1
                  |L8.36|
;;;551        }
;;;552        if (pObj->v != v) {
000024  6bc1              LDR      r1,[r0,#0x3c]
000026  42a1              CMP      r1,r4
000028  d009              BEQ      |L8.62|
;;;553          pObj->v = v;
;;;554          WM_InvalidateWindow(hObj);
00002a  63c4              STR      r4,[r0,#0x3c]
00002c  4628              MOV      r0,r5
00002e  f7fffffe          BL       WM_InvalidateWindow
;;;555          WM_NotifyParent(hObj, WM_NOTIFICATION_VALUE_CHANGED);
000032  4628              MOV      r0,r5
000034  e8bd4070          POP      {r4-r6,lr}
000038  2105              MOVS     r1,#5
00003a  f7ffbffe          B.W      WM_NotifyParent
                  |L8.62|
;;;556        }
;;;557        WM_UNLOCK();
;;;558      }
;;;559    }
00003e  bd70              POP      {r4-r6,pc}
;;;560    
                          ENDP


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

                  SCROLLBAR__InvalidatePartner PROC
;;;380    */
;;;381    void SCROLLBAR__InvalidatePartner(SCROLLBAR_Handle hObj) {     /* Invalidate the partner, since it is also affected */
000000  b510              PUSH     {r4,lr}
000002  4604              MOV      r4,r0
;;;382      WM_InvalidateWindow(WM_GetScrollPartner(hObj));
000004  f7fffffe          BL       WM_GetScrollPartner
000008  f7fffffe          BL       WM_InvalidateWindow
;;;383      WM_SendMessageNoPara(WM_GetParent(hObj), WM_NOTIFY_CLIENTCHANGE);   /* Client area may have changed */
00000c  4620              MOV      r0,r4
00000e  f7fffffe          BL       WM_GetParent
000012  e8bd4010          POP      {r4,lr}
000016  2125              MOVS     r1,#0x25
000018  f7ffbffe          B.W      WM_SendMessageNoPara
;;;384    }
;;;385    
                          ENDP


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

                  _CalcPositions PROC
;;;124    */
;;;125    static void _CalcPositions(SCROLLBAR_Obj* pObj, SCROLLBAR_POSITIONS* pPos) {
000000  e92d47ff          PUSH     {r0-r10,lr}
000004  4604              MOV      r4,r0
000006  460d              MOV      r5,r1
;;;126      int xSizeArrow, xSize, xSizeMoveable, ThumbSize, NumItems, xSizeThumbArea;
;;;127      WM_HWIN hWin;
;;;128      GUI_RECT r, rSub;
;;;129      int x0, y0;
;;;130      r = pObj->Widget.Win.Rect;
000008  6861              LDR      r1,[r4,#4]
00000a  6800              LDR      r0,[r0,#0]
;;;131      x0 = r.x0;
00000c  e9cd0102          STRD     r0,r1,[sp,#8]
;;;132      y0 = r.y0;
;;;133      pPos->x1  = (pObj->Widget.State & WIDGET_STATE_VERTICAL) ? r.y1 : r.x1;
000010  8ce1              LDRH     r1,[r4,#0x26]
000012  f9bd6008          LDRSH    r6,[sp,#8]            ;131
000016  f9bd700a          LDRSH    r7,[sp,#0xa]          ;132
00001a  f9bd000e          LDRSH    r0,[sp,#0xe]
00001e  0709              LSLS     r1,r1,#28
000020  d401              BMI      |L10.38|
000022  f9bd000c          LDRSH    r0,[sp,#0xc]
                  |L10.38|
;;;134      /* Subtract the rectangle of the other scrollbar (if existing and visible) */
;;;135      if (pObj->Widget.Id == GUI_ID_HSCROLL) {
000026  61a8              STR      r0,[r5,#0x18]
000028  8ca0              LDRH     r0,[r4,#0x24]
00002a  28ff              CMP      r0,#0xff
00002c  d112              BNE      |L10.84|
;;;136        hWin = WM_GetScrollbarV(pObj->Widget.Win.hParent);
00002e  f9b40016          LDRSH    r0,[r4,#0x16]
000032  f7fffffe          BL       WM_GetScrollbarV
;;;137        if (hWin) {
000036  b168              CBZ      r0,|L10.84|
;;;138          WM_GetWindowRectEx(hWin, &rSub);
000038  4669              MOV      r1,sp
00003a  f7fffffe          BL       WM_GetWindowRectEx
;;;139          if (r.x1 == rSub.x1) {
00003e  f9bd000c          LDRSH    r0,[sp,#0xc]
000042  f9bd1004          LDRSH    r1,[sp,#4]
000046  4288              CMP      r0,r1
000048  d104              BNE      |L10.84|
;;;140            r.x1 = rSub.x0 -1;
00004a  f8bd0000          LDRH     r0,[sp,#0]
00004e  1e40              SUBS     r0,r0,#1
000050  f8ad000c          STRH     r0,[sp,#0xc]
                  |L10.84|
;;;141          }
;;;142        }
;;;143      }
;;;144      if (pObj->Widget.Id == GUI_ID_VSCROLL) {
000054  8ca0              LDRH     r0,[r4,#0x24]
000056  28fe              CMP      r0,#0xfe
000058  d112              BNE      |L10.128|
;;;145        hWin = WM_GetScrollbarH(pObj->Widget.Win.hParent);
00005a  f9b40016          LDRSH    r0,[r4,#0x16]
00005e  f7fffffe          BL       WM_GetScrollbarH
;;;146        if (hWin) {
000062  b168              CBZ      r0,|L10.128|
;;;147          WM_GetWindowRectEx(hWin, &rSub);
000064  4669              MOV      r1,sp
000066  f7fffffe          BL       WM_GetWindowRectEx
;;;148          if (r.y1 == rSub.y1) {
00006a  f9bd000e          LDRSH    r0,[sp,#0xe]
00006e  f9bd1006          LDRSH    r1,[sp,#6]
000072  4288              CMP      r0,r1
000074  d104              BNE      |L10.128|
;;;149            r.y1 = rSub.y0 -1;
000076  f8bd0002          LDRH     r0,[sp,#2]
00007a  1e40              SUBS     r0,r0,#1
00007c  f8ad000e          STRH     r0,[sp,#0xe]
                  |L10.128|
;;;150          }
;;;151        }
;;;152      }
;;;153      /* Convert coordinates of this window */
;;;154      GUI_MoveRect(&r, -x0, -y0);
000080  427a              RSBS     r2,r7,#0
000082  4271              RSBS     r1,r6,#0
000084  a802              ADD      r0,sp,#8
000086  f7fffffe          BL       GUI_MoveRect
00008a  8ce0              LDRH     r0,[r4,#0x26]
00008c  0700              LSLS     r0,r0,#28
00008e  d517              BPL      |L10.192|
000090  88a0              LDRH     r0,[r4,#4]
000092  8823              LDRH     r3,[r4,#0]
000094  f8bd1008          LDRH     r1,[sp,#8]
000098  1ac0              SUBS     r0,r0,r3
00009a  1c40              ADDS     r0,r0,#1
00009c  f8bd200c          LDRH     r2,[sp,#0xc]
0000a0  f8bd300a          LDRH     r3,[sp,#0xa]
0000a4  1a41              SUBS     r1,r0,r1
0000a6  f8ad3008          STRH     r3,[sp,#8]
0000aa  1e49              SUBS     r1,r1,#1
0000ac  f8bd300e          LDRH     r3,[sp,#0xe]
0000b0  1a80              SUBS     r0,r0,r2
0000b2  f8ad300c          STRH     r3,[sp,#0xc]
0000b6  1e40              SUBS     r0,r0,#1
0000b8  f8ad100e          STRH     r1,[sp,#0xe]
0000bc  f8ad000a          STRH     r0,[sp,#0xa]
                  |L10.192|
;;;155      /* Convert real into virtual coordinates */
;;;156      _WIDGET__RECT2VRECT(&pObj->Widget, &r);
;;;157      NumItems      = pObj->NumItems;
;;;158      xSize         = r.x1 - r.x0 + 1;
0000c0  f9bd000c          LDRSH    r0,[sp,#0xc]
0000c4  f9bd1008          LDRSH    r1,[sp,#8]
0000c8  f8d4a038          LDR      r10,[r4,#0x38]
0000cc  1a40              SUBS     r0,r0,r1
0000ce  f1000901          ADD      r9,r0,#1
0000d2  4620              MOV      r0,r4
0000d4  f7fffffe          BL       WIDGET__GetXSize
0000d8  4607              MOV      r7,r0
0000da  4620              MOV      r0,r4
0000dc  f7fffffe          BL       WIDGET__GetYSize
0000e0  2105              MOVS     r1,#5
0000e2  eb010650          ADD      r6,r1,r0,LSR #1
0000e6  1f78              SUBS     r0,r7,#5
0000e8  4286              CMP      r6,r0
0000ea  d900              BLS      |L10.238|
0000ec  1f7e              SUBS     r6,r7,#5
                  |L10.238|
;;;159      xSizeArrow    = _GetArrowSize(pObj);
;;;160      xSizeThumbArea= xSize - 2 * xSizeArrow;     /* Number of pixels available for thumb and movement */
0000ee  4271              RSBS     r1,r6,#0
0000f0  eb090741          ADD      r7,r9,r1,LSL #1
;;;161      ThumbSize     = GUI__DivideRound(xSizeThumbArea * pObj->PageSize, NumItems);
0000f4  6c20              LDR      r0,[r4,#0x40]
0000f6  46b0              MOV      r8,r6                 ;159
0000f8  4378              MULS     r0,r7,r0
0000fa  4651              MOV      r1,r10
0000fc  f7fffffe          BL       GUI__DivideRound
000100  4606              MOV      r6,r0
;;;162      if (ThumbSize < 4) {
000102  2804              CMP      r0,#4
000104  da00              BGE      |L10.264|
;;;163        ThumbSize = 4;
000106  2604              MOVS     r6,#4
                  |L10.264|
;;;164      }
;;;165      if (ThumbSize > xSizeThumbArea) {
000108  42be              CMP      r6,r7
00010a  dd00              BLE      |L10.270|
;;;166        ThumbSize = xSizeThumbArea;
00010c  463e              MOV      r6,r7
                  |L10.270|
;;;167      }
;;;168      xSizeMoveable = xSizeThumbArea - ThumbSize;
;;;169      pPos->x0_LeftArrow  = r.x0;
00010e  f9bd0008          LDRSH    r0,[sp,#8]
;;;170      pPos->x1_LeftArrow  = xSizeArrow - 1;
000112  6028              STR      r0,[r5,#0]
000114  f1a80001          SUB      r0,r8,#1
;;;171      pPos->x1_RightArrow = xSize - 1;
000118  6068              STR      r0,[r5,#4]
00011a  f1a90001          SUB      r0,r9,#1
;;;172      pPos->x0_RightArrow = xSize - xSizeArrow;
00011e  6168              STR      r0,[r5,#0x14]
000120  eba90008          SUB      r0,r9,r8
;;;173      pPos->x0_Thumb      = pPos->x1_LeftArrow + 1+ GUI__DivideRound(xSizeMoveable * pObj->v, NumItems - pObj->PageSize);
000124  6128              STR      r0,[r5,#0x10]
000126  6c21              LDR      r1,[r4,#0x40]
000128  6be0              LDR      r0,[r4,#0x3c]
00012a  1bbf              SUBS     r7,r7,r6              ;168

⌨️ 快捷键说明

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