📄 gui_drawbitmapex.txt
字号:
; 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 + -