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

📄 gui_drawbitmapex.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_drawbitmapex.o --depend=.\Obj\gui_drawbitmapex.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_DrawBitmapEx.c]
                          THUMB

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

                  GL_DrawBitmapEx PROC
;;;32     */
;;;33     static void GL_DrawBitmapEx(const GUI_BITMAP GUI_UNI_PTR * pBitmap, int x0, int y0,
000000  e92d4fff          PUSH     {r0-r11,lr}
;;;34                                 int xCenter, int yCenter, int xMag, int yMag) {
000004  b08b              SUB      sp,sp,#0x2c
;;;35       LCD_PIXELINDEX Index, IndexPrev = 0;
000006  2000              MOVS     r0,#0
;;;36       LCD_COLOR Color;
;;;37       int x, y, xi, yi, xSize, ySize, xAct, xStart, xMagAbs, xiMag, yMin, yMax, yEnd, yPrev, yStep;
;;;38       char Cached, HasTrans = 0;
000008  900a              STR      r0,[sp,#0x28]
;;;39       /* Use clipping rect to reduce calculation */
;;;40       yMin = GUI_Context.ClipRect.y0;
00000a  9000              STR      r0,[sp,#0]
00000c  486a              LDR      r0,|L1.440|
00000e  f9b02006          LDRSH    r2,[r0,#6]  ; GUI_Context
;;;41       yMax = GUI_Context.ClipRect.y1;
000012  f9b0000a          LDRSH    r0,[r0,#0xa]  ; GUI_Context
;;;42       /* Init some values */
;;;43       xSize    = pBitmap->XSize;
000016  9205              STR      r2,[sp,#0x14]
000018  9a0b              LDR      r2,[sp,#0x2c]
00001a  8814              LDRH     r4,[r2,#0]
;;;44       ySize    = pBitmap->YSize;
00001c  8852              LDRH     r2,[r2,#2]
;;;45       xMagAbs  = ((xMag < 0) ? -xMag : xMag);
00001e  9004              STR      r0,[sp,#0x10]
000020  9819              LDR      r0,[sp,#0x64]
000022  e9cd2407          STRD     r2,r4,[sp,#0x1c]
000026  9a19              LDR      r2,[sp,#0x64]
000028  4240              RSBS     r0,r0,#0
00002a  2a00              CMP      r2,#0
00002c  db00              BLT      |L1.48|
00002e  4610              MOV      r0,r2
                  |L1.48|
;;;46       x0      -= (I32)((xMag < 0) ? xSize - xCenter - 1 : xCenter) * (I32)(xMagAbs) / (I32)(1000);
000030  9006              STR      r0,[sp,#0x18]
000032  da04              BGE      |L1.62|
000034  eba40303          SUB      r3,r4,r3
000038  9806              LDR      r0,[sp,#0x18]
00003a  f1a30301          SUB      r3,r3,#1
                  |L1.62|
00003e  4343              MULS     r3,r0,r3
000040  f44f727a          MOV      r2,#0x3e8
000044  fb93f0f2          SDIV     r0,r3,r2
000048  eba10900          SUB      r9,r1,r0
;;;47       yEnd     = y0 + GUI__DivideRound32(((I32)(-yCenter) * (I32)(yMag)), 1000);
00004c  9818              LDR      r0,[sp,#0x60]
00004e  991a              LDR      r1,[sp,#0x68]
000050  4240              RSBS     r0,r0,#0
000052  4348              MULS     r0,r1,r0
000054  4611              MOV      r1,r2
000056  f7fffffe          BL       GUI__DivideRound32
00005a  990d              LDR      r1,[sp,#0x34]
00005c  4408              ADD      r0,r0,r1
;;;48       yPrev    = yEnd + 1;
00005e  9003              STR      r0,[sp,#0xc]
000060  1c40              ADDS     r0,r0,#1
;;;49       yStep = (yMag < 0) ? -1 : 1;
000062  991a              LDR      r1,[sp,#0x68]
000064  9002              STR      r0,[sp,#8]
000066  f04f30ff          MOV      r0,#0xffffffff
00006a  2900              CMP      r1,#0
00006c  db00              BLT      |L1.112|
00006e  2001              MOVS     r0,#1
                  |L1.112|
;;;50       if (pBitmap->pPal) {
000070  9001              STR      r0,[sp,#4]
000072  980b              LDR      r0,[sp,#0x2c]
000074  68c0              LDR      r0,[r0,#0xc]
000076  b118              CBZ      r0,|L1.128|
;;;51         if (pBitmap->pPal->HasTrans) {
000078  7900              LDRB     r0,[r0,#4]
00007a  b108              CBZ      r0,|L1.128|
;;;52           HasTrans = 1;
00007c  2001              MOVS     r0,#1
00007e  9000              STR      r0,[sp,#0]
                  |L1.128|
;;;53         }
;;;54       }
;;;55       for (yi = 0; yi < ySize; yi++) {
000080  2000              MOVS     r0,#0
000082  e091              B        |L1.424|
                  |L1.132|
;;;56         y = yEnd;
;;;57         yEnd = y0 + GUI__DivideRound32(((I32)(yi + 1 - yCenter) * (I32)(yMag)), 1000);
000084  9918              LDR      r1,[sp,#0x60]
000086  9f03              LDR      r7,[sp,#0xc]
000088  1a40              SUBS     r0,r0,r1
00008a  991a              LDR      r1,[sp,#0x68]
00008c  1c40              ADDS     r0,r0,#1
00008e  4348              MULS     r0,r1,r0
000090  f44f717a          MOV      r1,#0x3e8
000094  f7fffffe          BL       GUI__DivideRound32
000098  990d              LDR      r1,[sp,#0x34]
00009a  4408              ADD      r0,r0,r1
;;;58         if (y != yPrev) {
00009c  9003              STR      r0,[sp,#0xc]
00009e  9802              LDR      r0,[sp,#8]
0000a0  4287              CMP      r7,r0
0000a2  d07f              BEQ      |L1.420|
;;;59           yPrev = y;
0000a4  9702              STR      r7,[sp,#8]
                  |L1.166|
;;;60           do {
;;;61             if ((y >= yMin) && (y <= yMax)) {
0000a6  9805              LDR      r0,[sp,#0x14]
0000a8  4287              CMP      r7,r0
0000aa  db70              BLT      |L1.398|
0000ac  9804              LDR      r0,[sp,#0x10]
0000ae  4287              CMP      r7,r0
0000b0  dc6d              BGT      |L1.398|
;;;62               xStart = -1;
;;;63               x      =  0;
0000b2  2500              MOVS     r5,#0
0000b4  f04f36ff          MOV      r6,#0xffffffff        ;62
;;;64               xiMag  =  0;
0000b8  462c              MOV      r4,r5
;;;65               Cached =  0;
0000ba  46aa              MOV      r10,r5
;;;66               for (xi = 0; xi < xSize; xi++) {
0000bc  4628              MOV      r0,r5
0000be  e057              B        |L1.368|
                  |L1.192|
;;;67                 xiMag += xMagAbs;
0000c0  9806              LDR      r0,[sp,#0x18]
0000c2  4404              ADD      r4,r4,r0
;;;68                 if (xiMag >= 1000) {
0000c4  f5b47f7a          CMP      r4,#0x3e8
0000c8  db50              BLT      |L1.364|
;;;69                   xAct  = (xMag > 0) ? xi : xSize - xi - 1;
0000ca  9819              LDR      r0,[sp,#0x64]
0000cc  4641              MOV      r1,r8
0000ce  2800              CMP      r0,#0
0000d0  dc03              BGT      |L1.218|
0000d2  9808              LDR      r0,[sp,#0x20]
0000d4  eba00108          SUB      r1,r0,r8
0000d8  1e49              SUBS     r1,r1,#1
                  |L1.218|
;;;70                   Index = GUI_GetBitmapPixelIndex(pBitmap, xAct, yi);
0000da  9a09              LDR      r2,[sp,#0x24]
0000dc  980b              LDR      r0,[sp,#0x2c]
0000de  f7fffffe          BL       GUI_GetBitmapPixelIndex
;;;71                   if (Index != IndexPrev || xStart == -1) {
0000e2  990a              LDR      r1,[sp,#0x28]
0000e4  fa1ffb80          UXTH     r11,r0                ;70
0000e8  458b              CMP      r11,r1
0000ea  d101              BNE      |L1.240|
0000ec  1c70              ADDS     r0,r6,#1
0000ee  d136              BNE      |L1.350|
                  |L1.240|
;;;72                     if ((Index == 0) && HasTrans) {
0000f0  f1bb0f00          CMP      r11,#0
0000f4  d10f              BNE      |L1.278|
0000f6  9800              LDR      r0,[sp,#0]
0000f8  b168              CBZ      r0,|L1.278|
;;;73                       /* Transparent color ... clear cache */
;;;74                       if (Cached) {
0000fa  f1ba0f00          CMP      r10,#0
0000fe  d02c              BEQ      |L1.346|
;;;75                         LCD_DrawHLine(x0 + xStart, y, x0 + x - 1);
000100  eb090205          ADD      r2,r9,r5
000104  1e52              SUBS     r2,r2,#1
000106  eb090006          ADD      r0,r9,r6
00010a  4639              MOV      r1,r7
00010c  f7fffffe          BL       LCD_DrawHLine
;;;76                         Cached = 0;
000110  f04f0a00          MOV      r10,#0
000114  e021              B        |L1.346|
                  |L1.278|
;;;77                       }
;;;78                     } else {
;;;79                       /* Another color ... draw contents of cache */
;;;80                       if (Cached && xStart != -1) {
000116  f1ba0f00          CMP      r10,#0
00011a  d009              BEQ      |L1.304|
00011c  1c70              ADDS     r0,r6,#1
00011e  d007              BEQ      |L1.304|
;;;81                         LCD_DrawHLine(x0 + xStart, y, x0 + x - 1);
000120  eb090205          ADD      r2,r9,r5
000124  1e52              SUBS     r2,r2,#1
000126  eb090006          ADD      r0,r9,r6
00012a  4639              MOV      r1,r7
00012c  f7fffffe          BL       LCD_DrawHLine
                  |L1.304|
;;;82                       }
;;;83                       xStart    = x;
;;;84                       Cached    = 1;
;;;85                       if (pBitmap->pMethods) {
000130  980b              LDR      r0,[sp,#0x2c]
000132  462e              MOV      r6,r5                 ;83
000134  6900              LDR      r0,[r0,#0x10]
000136  f04f0a01          MOV      r10,#1                ;84
00013a  b118              CBZ      r0,|L1.324|
;;;86                         Color = pBitmap->pMethods->pfIndex2Color(Index);
00013c  6841              LDR      r1,[r0,#4]
00013e  4658              MOV      r0,r11
000140  4788              BLX      r1
000142  e004              B        |L1.334|
                  |L1.324|
;;;87                       } else {
;;;88                         Color = pBitmap->pPal->pPalEntries[Index];
000144  980b              LDR      r0,[sp,#0x2c]
000146  68c0              LDR      r0,[r0,#0xc]
000148  6880              LDR      r0,[r0,#8]
00014a  f850002b          LDR      r0,[r0,r11,LSL #2]
                  |L1.334|
;;;89                       }
;;;90                       LCD_SetColorIndex(LCDDEV_L0_Color2Index(Color));

⌨️ 快捷键说明

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