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

📄 scrollbar.txt

📁 STM32F103ZET6+UCOSII+UCGUI源码
💻 TXT
📖 第 1 页 / 共 4 页
字号:
00012c  ebaa0101          SUB      r1,r10,r1
000130  4378              MULS     r0,r7,r0
000132  f7fffffe          BL       GUI__DivideRound
000136  6869              LDR      r1,[r5,#4]
000138  1c40              ADDS     r0,r0,#1
00013a  4408              ADD      r0,r0,r1
;;;174      pPos->x1_Thumb      = pPos->x0_Thumb + ThumbSize - 1;
00013c  60a8              STR      r0,[r5,#8]
;;;175      pPos->xSizeMoveable = xSizeMoveable;
;;;176      pPos->ThumbSize     = ThumbSize;
;;;177    }
00013e  e9c57607          STRD     r7,r6,[r5,#0x1c]
000142  1e71              SUBS     r1,r6,#1              ;174
000144  4408              ADD      r0,r0,r1              ;174
000146  60e8              STR      r0,[r5,#0xc]
000148  e8bd87ff          POP      {r0-r10,pc}
;;;178    
                          ENDP


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

                  _DrawTriangle PROC
;;;182    */
;;;183    static void _DrawTriangle(WIDGET* pWidget, int x, int y, int Size, int Inc) {
000000  e92d41f0          PUSH     {r4-r8,lr}
;;;184      if (pWidget->State & WIDGET_STATE_VERTICAL) {
000004  8cc0              LDRH     r0,[r0,#0x26]
000006  9f06              LDR      r7,[sp,#0x18]
000008  460d              MOV      r5,r1                 ;183
00000a  4616              MOV      r6,r2                 ;183
00000c  461c              MOV      r4,r3                 ;183
00000e  0700              LSLS     r0,r0,#28
000010  d512              BPL      |L11.56|
000012  e006              B        |L11.34|
                  |L11.20|
;;;185        for (; Size >= 0; Size--, x += Inc) {
;;;186          GUI_DrawHLine(x, y - Size, y + Size);
000014  1932              ADDS     r2,r6,r4
000016  1b31              SUBS     r1,r6,r4
000018  4628              MOV      r0,r5
00001a  f7fffffe          BL       GUI_DrawHLine
00001e  1e64              SUBS     r4,r4,#1              ;185
000020  443d              ADD      r5,r5,r7              ;185
                  |L11.34|
000022  2c00              CMP      r4,#0                 ;185
000024  daf6              BGE      |L11.20|
                  |L11.38|
;;;187        }
;;;188      } else {
;;;189        for (; Size >= 0; Size--, x += Inc) {
;;;190          GUI_DrawVLine(x, y - Size, y + Size);
;;;191        }
;;;192      }
;;;193    }
000026  e8bd81f0          POP      {r4-r8,pc}
                  |L11.42|
00002a  1932              ADDS     r2,r6,r4              ;190
00002c  1b31              SUBS     r1,r6,r4              ;190
00002e  4628              MOV      r0,r5                 ;190
000030  f7fffffe          BL       GUI_DrawVLine
000034  1e64              SUBS     r4,r4,#1              ;189
000036  443d              ADD      r5,r5,r7              ;189
                  |L11.56|
000038  2c00              CMP      r4,#0                 ;189
00003a  daf6              BGE      |L11.42|
00003c  e7f3              B        |L11.38|
;;;194    
                          ENDP


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

                  _OnTouch PROC
;;;288    */
;;;289    static void _OnTouch(SCROLLBAR_Handle hObj, SCROLLBAR_Obj* pObj, WM_MESSAGE*pMsg) {
000000  e92d41f0          PUSH     {r4-r8,lr}
;;;290      SCROLLBAR_POSITIONS Pos;
;;;291      GUI_PID_STATE* pState = (GUI_PID_STATE*)pMsg->Data.p;
;;;292      if (pMsg->Data.p) {  /* Something happened in our area (pressed or released) */
000004  6896              LDR      r6,[r2,#8]
000006  b08a              SUB      sp,sp,#0x28           ;289
000008  4680              MOV      r8,r0                 ;289
00000a  460c              MOV      r4,r1                 ;289
00000c  2e00              CMP      r6,#0
00000e  d05f              BEQ      |L12.208|
;;;293        if (pState->Pressed) {
000010  7a30              LDRB     r0,[r6,#8]
000012  f44f7780          MOV      r7,#0x100
000016  2800              CMP      r0,#0
000018  d04c              BEQ      |L12.180|
;;;294          int Sel;
;;;295          int Range;
;;;296          int x;
;;;297          Sel = pObj->v;
;;;298          _CalcPositions(pObj, &Pos);
00001a  a901              ADD      r1,sp,#4
00001c  4620              MOV      r0,r4
00001e  6be5              LDR      r5,[r4,#0x3c]
000020  f7fffffe          BL       _CalcPositions
;;;299          Range = pObj->NumItems - pObj->PageSize;
000024  6c21              LDR      r1,[r4,#0x40]
000026  6ba0              LDR      r0,[r4,#0x38]
000028  1a42              SUBS     r2,r0,r1
;;;300          /* Swap mouse coordinates if necessary */
;;;301          if (pObj->Widget.State & WIDGET_STATE_VERTICAL) {
00002a  8ce0              LDRH     r0,[r4,#0x26]
00002c  0700              LSLS     r0,r0,#28
00002e  d503              BPL      |L12.56|
;;;302            int t = pState->x;
;;;303            pState->x = pState->y;
000030  e9d61000          LDRD     r1,r0,[r6,#0]
;;;304            pState->y = t;
000034  e9c60100          STRD     r0,r1,[r6,#0]
                  |L12.56|
;;;305          }
;;;306          x = pState->x;
;;;307          if (x <= Pos.x1_LeftArrow) {         /* left arrow (line left) */
000038  6830              LDR      r0,[r6,#0]
00003a  9902              LDR      r1,[sp,#8]
00003c  4281              CMP      r1,r0
00003e  db01              BLT      |L12.68|
;;;308            Sel--;
000040  1e6d              SUBS     r5,r5,#1
000042  e023              B        |L12.140|
                  |L12.68|
;;;309          } else if (x < Pos.x0_Thumb) {       /* left area  (page left) */
000044  9903              LDR      r1,[sp,#0xc]
000046  4281              CMP      r1,r0
000048  dd02              BLE      |L12.80|
;;;310            Sel -= pObj->PageSize;
00004a  6c20              LDR      r0,[r4,#0x40]
00004c  1a2d              SUBS     r5,r5,r0
00004e  e01d              B        |L12.140|
                  |L12.80|
;;;311          } else if (x <= Pos.x1_Thumb) {      /* Thumb area */
000050  9904              LDR      r1,[sp,#0x10]
000052  4281              CMP      r1,r0
000054  db10              BLT      |L12.120|
;;;312            if (Pos.xSizeMoveable > 0) {
000056  9908              LDR      r1,[sp,#0x20]
000058  2900              CMP      r1,#0
00005a  dd17              BLE      |L12.140|
;;;313              x = x - Pos.ThumbSize/2 - Pos.x1_LeftArrow-1;
00005c  9909              LDR      r1,[sp,#0x24]
00005e  eb0171d1          ADD      r1,r1,r1,LSR #31
000062  eba00061          SUB      r0,r0,r1,ASR #1
000066  9902              LDR      r1,[sp,#8]
000068  1a40              SUBS     r0,r0,r1
00006a  1e40              SUBS     r0,r0,#1
;;;314              Sel = GUI__DivideRound(Range * x, Pos.xSizeMoveable);
00006c  4350              MULS     r0,r2,r0
00006e  9908              LDR      r1,[sp,#0x20]
000070  f7fffffe          BL       GUI__DivideRound
000074  4605              MOV      r5,r0
000076  e009              B        |L12.140|
                  |L12.120|
;;;315            }
;;;316          } else if (x < Pos.x0_RightArrow) {  /* right area (page right) */
000078  9905              LDR      r1,[sp,#0x14]
00007a  4281              CMP      r1,r0
00007c  dd02              BLE      |L12.132|
;;;317            Sel += pObj->PageSize;
00007e  6c20              LDR      r0,[r4,#0x40]
000080  4405              ADD      r5,r5,r0
000082  e003              B        |L12.140|
                  |L12.132|
;;;318          } else  if (x <= Pos.x1_RightArrow) {
000084  9906              LDR      r1,[sp,#0x18]
000086  4281              CMP      r1,r0
000088  db00              BLT      |L12.140|
;;;319            Sel++;
00008a  1c6d              ADDS     r5,r5,#1
                  |L12.140|
;;;320          }
;;;321          /* WM_SetFocus(hObj); */
;;;322          WM_SetCapture(hObj, 1);
00008c  2101              MOVS     r1,#1
00008e  4640              MOV      r0,r8
000090  f7fffffe          BL       WM_SetCapture
;;;323          SCROLLBAR_SetValue(hObj, Sel);
000094  4629              MOV      r1,r5
000096  4640              MOV      r0,r8
000098  f7fffffe          BL       SCROLLBAR_SetValue
;;;324          if ((pObj->Widget.State & SCROLLBAR_STATE_PRESSED) == 0){   
00009c  8ce0              LDRH     r0,[r4,#0x26]
00009e  05c0              LSLS     r0,r0,#23
0000a0  d416              BMI      |L12.208|
0000a2  4639              MOV      r1,r7
0000a4  4640              MOV      r0,r8
0000a6  f7fffffe          BL       WIDGET_OrState
0000aa  8ba0              LDRH     r0,[r4,#0x1c]
0000ac  0780              LSLS     r0,r0,#30
0000ae  d50f              BPL      |L12.208|
0000b0  2101              MOVS     r1,#1
0000b2  e00a              B        |L12.202|
                  |L12.180|
;;;325            _ScrollbarPressed(hObj, pObj);
;;;326          }
;;;327        } else {
;;;328          /* React only if button was pressed before ... avoid problems with moving / hiding windows above (such as dropdown) */
;;;329          if (pObj->Widget.State & SCROLLBAR_STATE_PRESSED) {   
0000b4  8ce0              LDRH     r0,[r4,#0x26]
0000b6  05c0              LSLS     r0,r0,#23
0000b8  d50a              BPL      |L12.208|
0000ba  4639              MOV      r1,r7
0000bc  4640              MOV      r0,r8
0000be  f7fffffe          BL       WIDGET_AndState
0000c2  8ba0              LDRH     r0,[r4,#0x1c]
0000c4  0780              LSLS     r0,r0,#30
0000c6  d503              BPL      |L12.208|
0000c8  2102              MOVS     r1,#2
                  |L12.202|
0000ca  4640              MOV      r0,r8
0000cc  f7fffffe          BL       WM_NotifyParent
                  |L12.208|
;;;330            _ScrollbarReleased(hObj, pObj);
;;;331          }
;;;332        }
;;;333      }
;;;334    }
0000d0  b00a              ADD      sp,sp,#0x28
0000d2  e8bd81f0          POP      {r4-r8,pc}
;;;335    
                          ENDP


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

                  _Paint PROC
;;;198    */
;;;199    static void _Paint(SCROLLBAR_Obj* pObj) {
000000  b570              PUSH     {r4-r6,lr}
000002  b08e              SUB      sp,sp,#0x38
000004  4604              MOV      r4,r0
;;;200      int ArrowSize, ArrowOff;
;;;201      SCROLLBAR_POSITIONS Pos;
;;;202      GUI_RECT r, rClient;
;;;203      /*
;;;204        Get / calc position info
;;;205      */
;;;206      _CalcPositions(pObj, &Pos);
000006  a905              ADD      r1,sp,#0x14
000008  f7fffffe          BL       _CalcPositions
;;;207      WIDGET__GetClientRect(&pObj->Widget, &rClient);
00000c  a901              ADD      r1,sp,#4
00000e  4620              MOV      r0,r4
000010  f7fffffe          BL       WIDGET__GetClientRect
;;;208      r = rClient;
000014  e9dd0101          LDRD     r0,r1,[sp,#4]
;;;209      ArrowSize = ((r.y1 - r.y0) /3) - 1;
000018  e9cd0103          STRD     r0,r1,[sp,#0xc]
00001c  f9bd0012          LDRSH    r0,[sp,#0x12]
000020  f9bd100e          LDRSH    r1,[sp,#0xe]
000024  1a41              SUBS     r1,r0,r1
000026  2003              MOVS     r0,#3
000028  fb91f5f0          SDIV     r5,r1,r0
00002c  1e6d              SUBS     r5,r5,#1
;;;210      ArrowOff = 3 + ArrowSize+ ArrowSize/3;
00002e  fb95f0f0          SDIV     r0,r5,r0
000032  1946              ADDS     r6,r0,r5
000034  1cf6              ADDS     r6,r6,#3
;;;211      /*
;;;212        Draw left Arrow
;;;213      */
;;;214      LCD_SetColor(pObj->aColor[0]);
000036  6b20              LDR      r0,[r4,#0x30]
000038  f7fffffe          BL       LCD_SetColor
;;;215      r = rClient;
00003c  e9dd0101          LDRD     r0,r1,[sp,#4]
;;;216      r.x0 = Pos.x0_LeftArrow;
000040  e9cd0103          STRD     r0,r1,[sp,#0xc]
000044  9805              LDR      r0,[sp,#0x14]
000046  f8ad000c          STRH     r0,[sp,#0xc]
;;;217      r.x1 = Pos.x1_LeftArrow;
00004a  9806              LDR      r0,[sp,#0x18]
00004c  f8ad0010          STRH     r0,[sp,#0x10]
;;;218      WIDGET__FillRectEx(&pObj->Widget, &r);
000050  a903              ADD      r1,sp,#0xc
000052  4620              MOV      r0,r4
000054  f7fffffe          BL       WIDGET__FillRectEx
;;;219      LCD_SetColor(pObj->aBkColor[1]);
000058  6ae0              LDR      r0,[r4,#0x2c]
00005a  f7fffffe          BL       LCD_SetColor
;;;220      _DrawTriangle(&pObj->Widget, r.x0 + ArrowOff, (r.y1 - r.y0) >> 1, ArrowSize, -1);
00005e  f9bd0012          LDRSH    r0,[sp,#0x12]
000062  f9bd100e          LDRSH    r1,[sp,#0xe]

⌨️ 快捷键说明

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