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

📄 gui_fillpolygon.txt

📁 STM32F103ZET6+UCOSII+UCGUI源码
💻 TXT
📖 第 1 页 / 共 2 页
字号:
; generated by ARM C/C++ Compiler with , RVCT4.0 [Build 524] for uVision
; commandline ArmCC [--split_sections --debug -c --asm --interleave -o.\Obj\gui_fillpolygon.o --depend=.\Obj\gui_fillpolygon.d --device=DARMSTM --apcs=interwork -O3 -I..\..\include -I..\..\..\FWLib\library\inc -I..\..\..\USBLib\library\inc -I..\..\Config -I..\..\GUI\Core -I..\..\GUI\Font -I..\..\GUI\ConvertColor -I..\..\GUI\AntiAlias -I..\..\GUI\ConvertMono -I..\..\GUI\JPEG -I..\..\GUI\MemDev -I..\..\GUI\MultiLayer -I..\..\GUI\Widget -I..\..\GUI\WM -IC:\Keil\ARM\INC\ST\STM32F10x ..\..\GUI\Core\GUI_FillPolygon.c]
                          THUMB

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

                  GL_FillPolygon PROC
;;;207    */
;;;208    void GL_FillPolygon  (const GUI_POINT*paPoint, int NumPoints, int xOff, int yOff) {
000000  e92d4ffe          PUSH     {r1-r11,lr}
000004  4606              MOV      r6,r0
;;;209      int i, y;
;;;210      int yMin = GUI_YMAX;
000006  f64074ff          MOV      r4,#0xfff
;;;211      int yMax = GUI_YMIN;
00000a  4260              RSBS     r0,r4,#0
00000c  4689              MOV      r9,r1                 ;208
00000e  4617              MOV      r7,r2                 ;208
000010  469a              MOV      r10,r3                ;208
;;;212    /* First step : find uppermost and lowermost coordinates */
;;;213      for (i=0; i<NumPoints; i++) {
000012  2100              MOVS     r1,#0
000014  9001              STR      r0,[sp,#4]
000016  e00b              B        |L1.48|
                  |L1.24|
;;;214        y = (paPoint + i)->y;
000018  eb060081          ADD      r0,r6,r1,LSL #2
00001c  f9b00002          LDRSH    r0,[r0,#2]
;;;215        if (y < yMin)
000020  42a0              CMP      r0,r4
000022  da00              BGE      |L1.38|
;;;216          yMin = y;
000024  4604              MOV      r4,r0
                  |L1.38|
;;;217        if (y > yMax)
000026  9a01              LDR      r2,[sp,#4]
000028  4290              CMP      r0,r2
00002a  dd00              BLE      |L1.46|
;;;218          yMax = y;
00002c  9001              STR      r0,[sp,#4]
                  |L1.46|
00002e  1c49              ADDS     r1,r1,#1              ;213
                  |L1.48|
000030  4549              CMP      r1,r9                 ;213
000032  dbf1              BLT      |L1.24|
;;;219      }
;;;220    /* Use Clipping rect to reduce calculation (if possible) */
;;;221      if (GUI_Context.pClipRect_HL) {
000034  4861              LDR      r0,|L1.444|
000036  6900              LDR      r0,[r0,#0x10]  ; GUI_Context
000038  b170              CBZ      r0,|L1.88|
;;;222        if (yMax > (GUI_Context.pClipRect_HL->y1 - yOff))
00003a  f9b02006          LDRSH    r2,[r0,#6]
00003e  eba2010a          SUB      r1,r2,r10
000042  9a01              LDR      r2,[sp,#4]
000044  4291              CMP      r1,r2
000046  da00              BGE      |L1.74|
;;;223          yMax = (GUI_Context.pClipRect_HL->y1 - yOff);
000048  9101              STR      r1,[sp,#4]
                  |L1.74|
;;;224        if (yMin < (GUI_Context.pClipRect_HL->y0 - yOff))
00004a  f9b01002          LDRSH    r1,[r0,#2]
00004e  eba1000a          SUB      r0,r1,r10
000052  42a0              CMP      r0,r4
000054  dd00              BLE      |L1.88|
;;;225          yMin = (GUI_Context.pClipRect_HL->y0 - yOff);
000056  4604              MOV      r4,r0
                  |L1.88|
;;;226      }
;;;227    /* Second step: Calculate and draw horizontal lines */
;;;228      for (y=yMin; y<=yMax; y++) {
;;;229        _Init();
;;;230        /* find next intersection and count lines*/
;;;231        for (i=0; i<NumPoints; i++) {
;;;232          int i1 = (i < (NumPoints - 1)) ? i + 1 : 0;
000058  f1a90001          SUB      r0,r9,#1
00005c  9002              STR      r0,[sp,#8]            ;228
00005e  e0a7              B        |L1.432|
                  |L1.96|
000060  f04f0800          MOV      r8,#0                 ;228
000064  f8dfb158          LDR      r11,|L1.448|
000068  4645              MOV      r5,r8                 ;231
00006a  f8cb8000          STR      r8,[r11,#0]           ;231  ; GL_FP_Cnt
00006e  e07e              B        |L1.366|
                  |L1.112|
000070  9902              LDR      r1,[sp,#8]
000072  4640              MOV      r0,r8
000074  428d              CMP      r5,r1
000076  da00              BGE      |L1.122|
000078  1c68              ADDS     r0,r5,#1
                  |L1.122|
;;;233          int y0 = (paPoint + i )->y;
00007a  eb060185          ADD      r1,r6,r5,LSL #2
00007e  f9b13002          LDRSH    r3,[r1,#2]
000082  468c              MOV      r12,r1
;;;234          int y1 = (paPoint + i1)->y;
000084  eb060e80          ADD      lr,r6,r0,LSL #2
000088  f9be1002          LDRSH    r1,[lr,#2]
;;;235          /* Check if starting point is on line */
;;;236          if (y0 == y) {
00008c  42a3              CMP      r3,r4
00008e  460a              MOV      r2,r1                 ;234
000090  d138              BNE      |L1.260|
;;;237            if (y1 == y) {  /* Add the entire line */
000092  42a1              CMP      r1,r4
000094  d112              BNE      |L1.188|
000096  4a49              LDR      r2,|L1.444|
;;;238              _DrawHLine((paPoint + i )->x + xOff , y + yOff, (paPoint + i1)->x + xOff);
000098  f9361025          LDRSH    r1,[r6,r5,LSL #2]
00009c  f9360020          LDRSH    r0,[r6,r0,LSL #2]
0000a0  6d92              LDR      r2,[r2,#0x58]  ; GUI_Context
0000a2  eb010c07          ADD      r12,r1,r7
0000a6  4438              ADD      r0,r0,r7
0000a8  6813              LDR      r3,[r2,#0]
0000aa  eb04010a          ADD      r1,r4,r10
0000ae  4584              CMP      r12,r0
0000b0  da02              BGE      |L1.184|
0000b2  4602              MOV      r2,r0
0000b4  4660              MOV      r0,r12
0000b6  e023              B        |L1.256|
                  |L1.184|
0000b8  4662              MOV      r2,r12
0000ba  e021              B        |L1.256|
                  |L1.188|
;;;239            } else {        /* Add only one point */
;;;240              int yPrev = _GetPrevPointDiffy(paPoint, i, NumPoints, y);
0000bc  4628              MOV      r0,r5
0000be  2200              MOVS     r2,#0
0000c0  e00b              B        |L1.218|
                  |L1.194|
0000c2  1e43              SUBS     r3,r0,#1
0000c4  b908              CBNZ     r0,|L1.202|
0000c6  f1a90301          SUB      r3,r9,#1
                  |L1.202|
0000ca  4618              MOV      r0,r3
0000cc  eb060383          ADD      r3,r6,r3,LSL #2
0000d0  f9b33002          LDRSH    r3,[r3,#2]
0000d4  42a3              CMP      r3,r4
0000d6  d104              BNE      |L1.226|
0000d8  1c52              ADDS     r2,r2,#1
                  |L1.218|
0000da  9b02              LDR      r3,[sp,#8]
0000dc  429a              CMP      r2,r3
0000de  dbf0              BLT      |L1.194|
0000e0  4623              MOV      r3,r4
                  |L1.226|
;;;241              if (yPrev != y) {
0000e2  42a3              CMP      r3,r4
0000e4  d042              BEQ      |L1.364|
;;;242                _AddPoint((paPoint + i)->x, y, yPrev - y, y1 - y, xOff, yOff);
0000e6  1b1a              SUBS     r2,r3,r4
0000e8  f9360025          LDRSH    r0,[r6,r5,LSL #2]
0000ec  1b09              SUBS     r1,r1,r4
0000ee  404a              EORS     r2,r2,r1
0000f0  d43a              BMI      |L1.360|
0000f2  4a32              LDR      r2,|L1.444|
0000f4  4438              ADD      r0,r0,r7
0000f6  6d92              LDR      r2,[r2,#0x58]  ; GUI_Context
0000f8  eb04010a          ADD      r1,r4,r10
0000fc  6813              LDR      r3,[r2,#0]
0000fe  4602              MOV      r2,r0
                  |L1.256|
000100  4798              BLX      r3
000102  e033              B        |L1.364|
                  |L1.260|
;;;243              } 
;;;244            }
;;;245          } else if (y1 != y) {  /* Ignore if end-point is on the line */
000104  42a1              CMP      r1,r4
000106  d031              BEQ      |L1.364|
;;;246            if (((y1 >= y) && (y0 <= y)) || ((y0 >= y) && (y1 <= y))) {
000108  db01              BLT      |L1.270|
00010a  42a3              CMP      r3,r4
00010c  dd03              BLE      |L1.278|
                  |L1.270|
00010e  42a3              CMP      r3,r4
000110  db2c              BLT      |L1.364|
000112  42a1              CMP      r1,r4
000114  dc2a              BGT      |L1.364|
                  |L1.278|
000116  4661              MOV      r1,r12
000118  4293              CMP      r3,r2
00011a  dc09              BGT      |L1.304|
00011c  4618              MOV      r0,r3
00011e  42a3              CMP      r3,r4
000120  dc24              BGT      |L1.364|
000122  42a2              CMP      r2,r4
000124  db22              BLT      |L1.364|
000126  f9b1c000          LDRSH    r12,[r1,#0]
00012a  f9be1000          LDRSH    r1,[lr,#0]

⌨️ 快捷键说明

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