📄 gui_drawbitmapex.txt
字号:
00014e 491a LDR r1,|L1.440|
000150 6c89 LDR r1,[r1,#0x48] ; GUI_Context
000152 6809 LDR r1,[r1,#0]
000154 4788 BLX r1
000156 f7fffffe BL LCD_SetColorIndex
|L1.346|
;;;91 }
;;;92 IndexPrev = Index;
00015a f8cdb028 STR r11,[sp,#0x28]
|L1.350|
00015e f44f707a MOV r0,#0x3e8 ;46
|L1.354|
;;;93 }
;;;94 do {
;;;95 x++;
000162 1c6d ADDS r5,r5,#1
;;;96 xiMag -= 1000;
000164 f5a4747a SUB r4,r4,#0x3e8
;;;97 } while (xiMag >= 1000);
000168 4284 CMP r4,r0
00016a dafa BGE |L1.354|
|L1.364|
00016c f1080001 ADD r0,r8,#1 ;66
|L1.368|
000170 9908 LDR r1,[sp,#0x20] ;66
000172 4680 MOV r8,r0 ;66
000174 4288 CMP r0,r1 ;66
000176 dba3 BLT |L1.192|
;;;98 }
;;;99 }
;;;100 /* Clear cache */
;;;101 if (Cached) {
000178 f1ba0f00 CMP r10,#0
00017c d007 BEQ |L1.398|
;;;102 LCD_DrawHLine(x0 + xStart, y, x0 + x - 1);
00017e eb090205 ADD r2,r9,r5
000182 1e52 SUBS r2,r2,#1
000184 eb090006 ADD r0,r9,r6
000188 4639 MOV r1,r7
00018a f7fffffe BL LCD_DrawHLine
|L1.398|
;;;103 }
;;;104 }
;;;105 y += yStep;
00018e 9801 LDR r0,[sp,#4]
000190 4407 ADD r7,r7,r0
;;;106 } while ((yMag < 0) ? (y > yEnd) : (y < yEnd));
000192 981a LDR r0,[sp,#0x68]
000194 2800 CMP r0,#0
000196 9803 LDR r0,[sp,#0xc]
000198 da02 BGE |L1.416|
00019a 4287 CMP r7,r0
00019c dc83 BGT |L1.166|
00019e e001 B |L1.420|
|L1.416|
0001a0 4287 CMP r7,r0
0001a2 db80 BLT |L1.166|
|L1.420|
0001a4 9809 LDR r0,[sp,#0x24] ;55
0001a6 1c40 ADDS r0,r0,#1 ;55
|L1.424|
0001a8 9907 LDR r1,[sp,#0x1c] ;55
0001aa 9009 STR r0,[sp,#0x24] ;55
0001ac 4288 CMP r0,r1 ;55
0001ae f6ffaf69 BLT |L1.132|
;;;107 }
;;;108 }
;;;109 }
0001b2 b00f ADD sp,sp,#0x3c
0001b4 e8bd8ff0 POP {r4-r11,pc}
;;;110
ENDP
|L1.440|
DCD GUI_Context
AREA ||i.GUI_DrawBitmapEx||, CODE, READONLY, ALIGN=2
GUI_DrawBitmapEx PROC
;;;120 */
;;;121 void GUI_DrawBitmapEx(const GUI_BITMAP GUI_UNI_PTR * pBitmap, int x0, int y0,
000000 e92d4ff0 PUSH {r4-r11,lr}
;;;122 int xCenter, int yCenter, int xMag, int yMag) {
000004 b087 SUB sp,sp,#0x1c
;;;123 GUI_COLOR OldColor;
;;;124 #if (GUI_WINSUPPORT)
;;;125 GUI_RECT r;
;;;126 #endif
;;;127 GUI_LOCK();
;;;128 OldColor = GUI_GetColor();
000006 e9dda710 LDRD r10,r7,[sp,#0x40]
00000a 4606 MOV r6,r0 ;122
00000c 460c MOV r4,r1 ;122
00000e 4615 MOV r5,r2 ;122
000010 4699 MOV r9,r3 ;122
000012 f8dd8048 LDR r8,[sp,#0x48]
000016 f7fffffe BL GUI_GetColor
;;;129 #if (GUI_WINSUPPORT)
;;;130 WM_ADDORG(x0, y0);
00001a 9006 STR r0,[sp,#0x18]
00001c 4838 LDR r0,|L2.256|
;;;131 if (xMag >= 0) {
;;;132 r.x0 = x0 + GUI__DivideRound32(((I32)(-xCenter) * (I32)(xMag)), 1000);
00001e f44f7b7a MOV r11,#0x3e8
000022 6c01 LDR r1,[r0,#0x40] ;130 ; GUI_Context
000024 6c40 LDR r0,[r0,#0x44] ;130 ; GUI_Context
000026 440c ADD r4,r4,r1 ;130
000028 4405 ADD r5,r5,r0 ;130
00002a f1c90000 RSB r0,r9,#0
00002e 4378 MULS r0,r7,r0
000030 2f00 CMP r7,#0 ;131
000032 4659 MOV r1,r11
000034 db10 BLT |L2.88|
000036 f7fffffe BL GUI__DivideRound32
00003a 4420 ADD r0,r0,r4
00003c f8ad0010 STRH r0,[sp,#0x10]
;;;133 r.x1 = x0 + GUI__DivideRound32(((I32)(pBitmap->XSize - xCenter - 1) * (I32)(xMag)), 1000);
000040 8831 LDRH r1,[r6,#0]
000042 eba10009 SUB r0,r1,r9
000046 1e40 SUBS r0,r0,#1
000048 4378 MULS r0,r7,r0
00004a 4659 MOV r1,r11
00004c f7fffffe BL GUI__DivideRound32
000050 4420 ADD r0,r0,r4
000052 f8ad0014 STRH r0,[sp,#0x14]
000056 e00f B |L2.120|
|L2.88|
;;;134 } else {
;;;135 r.x1 = x0 + GUI__DivideRound32(((I32)(-xCenter) * (I32)(xMag)), 1000);
000058 f7fffffe BL GUI__DivideRound32
00005c 4420 ADD r0,r0,r4
00005e f8ad0014 STRH r0,[sp,#0x14]
;;;136 r.x0 = x0 + GUI__DivideRound32(((I32)(pBitmap->XSize - xCenter - 1) * (I32)(xMag)), 1000);
000062 8831 LDRH r1,[r6,#0]
000064 eba10009 SUB r0,r1,r9
000068 1e40 SUBS r0,r0,#1
00006a 4378 MULS r0,r7,r0
00006c 4659 MOV r1,r11
00006e f7fffffe BL GUI__DivideRound32
000072 4420 ADD r0,r0,r4
000074 f8ad0010 STRH r0,[sp,#0x10]
|L2.120|
;;;137 }
;;;138 if (yMag >= 0) {
;;;139 r.y0 = y0 + GUI__DivideRound32(((I32)(-yCenter) * (I32)(yMag)), 1000);
000078 f1ca0000 RSB r0,r10,#0
00007c fb00f008 MUL r0,r0,r8
000080 f1b80f00 CMP r8,#0 ;138
000084 4659 MOV r1,r11
000086 db11 BLT |L2.172|
000088 f7fffffe BL GUI__DivideRound32
00008c 4428 ADD r0,r0,r5
00008e f8ad0012 STRH r0,[sp,#0x12]
;;;140 r.y1 = y0 + GUI__DivideRound32(((I32)(pBitmap->YSize - yCenter - 1) * (I32)(yMag)), 1000);
000092 8871 LDRH r1,[r6,#2]
000094 eba1000a SUB r0,r1,r10
000098 1e40 SUBS r0,r0,#1
00009a fb00f008 MUL r0,r0,r8
00009e 4659 MOV r1,r11
0000a0 f7fffffe BL GUI__DivideRound32
0000a4 4428 ADD r0,r0,r5
0000a6 f8ad0016 STRH r0,[sp,#0x16]
0000aa e010 B |L2.206|
|L2.172|
;;;141 } else {
;;;142 r.y1 = y0 + GUI__DivideRound32(((I32)(-yCenter) * (I32)(yMag)), 1000);
0000ac f7fffffe BL GUI__DivideRound32
0000b0 4428 ADD r0,r0,r5
0000b2 f8ad0016 STRH r0,[sp,#0x16]
;;;143 r.y0 = y0 + GUI__DivideRound32(((I32)(pBitmap->YSize - yCenter - 1) * (I32)(yMag)), 1000);
0000b6 8871 LDRH r1,[r6,#2]
0000b8 eba1000a SUB r0,r1,r10
0000bc 1e40 SUBS r0,r0,#1
0000be fb00f008 MUL r0,r0,r8
0000c2 4659 MOV r1,r11
0000c4 f7fffffe BL GUI__DivideRound32
0000c8 4428 ADD r0,r0,r5
0000ca f8ad0012 STRH r0,[sp,#0x12]
|L2.206|
;;;144 }
;;;145 WM_ITERATE_START(&r) {
0000ce a804 ADD r0,sp,#0x10
0000d0 f7fffffe BL WM__InitIVRSearch
0000d4 e00b B |L2.238|
|L2.214|
;;;146 #endif
;;;147 GL_DrawBitmapEx(pBitmap, x0, y0, xCenter, yCenter, xMag, yMag);
0000d6 e9cda700 STRD r10,r7,[sp,#0]
0000da 464b MOV r3,r9
0000dc 462a MOV r2,r5
0000de 4621 MOV r1,r4
0000e0 4630 MOV r0,r6
0000e2 f8cd8008 STR r8,[sp,#8]
0000e6 f7fffffe BL GL_DrawBitmapEx
;;;148 #if (GUI_WINSUPPORT)
;;;149 } WM_ITERATE_END();
0000ea f7fffffe BL WM__GetNextIVR
|L2.238|
0000ee 2800 CMP r0,#0
0000f0 d1f1 BNE |L2.214|
;;;150 #endif
;;;151 GUI_SetColor(OldColor);
0000f2 9806 LDR r0,[sp,#0x18]
0000f4 f7fffffe BL GUI_SetColor
;;;152 GUI_UNLOCK();
;;;153 }
0000f8 b007 ADD sp,sp,#0x1c
0000fa e8bd8ff0 POP {r4-r11,pc}
;;;154
ENDP
0000fe 0000 DCW 0x0000
|L2.256|
DCD GUI_Context
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -