📄 lcd_rotatecw.txt
字号:
|L2.176|
;;;208 }
;;;209 if (xsize <= 0) {
0000b0 980b LDR r0,[sp,#0x2c]
0000b2 2800 CMP r0,#0
0000b4 dd16 BLE |L2.228|
0000b6 e9dd7909 LDRD r7,r9,[sp,#0x24]
;;;210 return;
;;;211 }
;;;212 _DrawBitmap(x0, y0, xsize, ysize, BitsPerPixel, BytesPerLine, pPixel, Diff, pTrans);
0000ba 4646 MOV r6,r8
0000bc 2400 MOVS r4,#0
0000be e00f B |L2.224|
|L2.192|
0000c0 f1ba0f01 CMP r10,#1
0000c4 d109 BNE |L2.218|
0000c6 9b1b LDR r3,[sp,#0x6c]
0000c8 9a0b LDR r2,[sp,#0x2c]
0000ca e9cd2300 STRD r2,r3,[sp,#0]
0000ce 1b38 SUBS r0,r7,r4
0000d0 462b MOV r3,r5
0000d2 4632 MOV r2,r6
0000d4 4649 MOV r1,r9
0000d6 f7fffffe BL _DrawBitLine1BPP
|L2.218|
0000da 9819 LDR r0,[sp,#0x64]
0000dc 1c64 ADDS r4,r4,#1
0000de 4406 ADD r6,r6,r0
|L2.224|
0000e0 455c CMP r4,r11
0000e2 dbed BLT |L2.192|
|L2.228|
;;;213 } else {
;;;214 /* Handle BITMAP with magnification */
;;;215 int x, y, xi, yi;
;;;216 int Shift = 8 - BitsPerPixel;
;;;217 for (x = x0, xi = 0; xi < ysize; xi++, x -= yMul, pPixel += BytesPerLine) {
;;;218 int xMax = x - yMul + 1;
;;;219 if ((xMax >= GUI_Context.ClipRect.x0) && (x <= GUI_Context.ClipRect.x1)) {
;;;220 int BitsLeft = 0;
;;;221 const U8 GUI_UNI_PTR * pDataLine = pPixel;
;;;222 for (y = y0, yi = 0; yi < xsize; yi++, y += xMul) {
;;;223 U8 Index;
;;;224 if (!BitsLeft) {
;;;225 Data = *pDataLine++;
;;;226 BitsLeft =8;
;;;227 }
;;;228 Index = Data >> Shift;
;;;229 Data <<= BitsPerPixel;
;;;230 BitsLeft -= BitsPerPixel;
;;;231 if (Index || ((GUI_Context.DrawMode & LCD_DRAWMODE_TRANS) == 0)) {
;;;232 LCD_PIXELINDEX OldColor = LCD_COLORINDEX;
;;;233 if (pTrans) {
;;;234 LCD_COLORINDEX = *(pTrans + Index);
;;;235 } else {
;;;236 LCD_COLORINDEX = Index;
;;;237 }
;;;238 LCD_FillRect(xMax, y, x, y + xMul - 1);
;;;239 LCD_COLORINDEX = OldColor;
;;;240 }
;;;241 }
;;;242 }
;;;243 }
;;;244 }
;;;245 }
0000e4 b00d ADD sp,sp,#0x34
0000e6 e8bd8ff0 POP {r4-r11,pc}
|L2.234|
0000ea f1ca0008 RSB r0,r10,#8 ;216
0000ee 9003 STR r0,[sp,#0xc] ;217
0000f0 9809 LDR r0,[sp,#0x24] ;217
0000f2 9005 STR r0,[sp,#0x14] ;217
0000f4 2000 MOVS r0,#0 ;217
0000f6 9004 STR r0,[sp,#0x10] ;217
0000f8 e04a B |L2.400|
|L2.250|
0000fa 9917 LDR r1,[sp,#0x5c] ;218
0000fc 9805 LDR r0,[sp,#0x14] ;218
0000fe 4a26 LDR r2,|L2.408|
000100 1a40 SUBS r0,r0,r1 ;218
000102 9008 STR r0,[sp,#0x20] ;218
000104 1c40 ADDS r0,r0,#1 ;218
000106 9002 STR r0,[sp,#8] ;219
000108 f9b21004 LDRSH r1,[r2,#4] ;219 ; GUI_Context
00010c 4281 CMP r1,r0 ;219
00010e dc37 BGT |L2.384|
000110 4610 MOV r0,r2 ;219
000112 f9b00008 LDRSH r0,[r0,#8] ;219 ; GUI_Context
000116 9905 LDR r1,[sp,#0x14] ;219
000118 4288 CMP r0,r1 ;219
00011a db31 BLT |L2.384|
00011c 2400 MOVS r4,#0 ;220
00011e 4647 MOV r7,r8 ;221
000120 4626 MOV r6,r4 ;222
000122 f8dd9028 LDR r9,[sp,#0x28] ;222
000126 e028 B |L2.378|
|L2.296|
000128 b914 CBNZ r4,|L2.304|
00012a f8175b01 LDRB r5,[r7],#1 ;225
00012e 2408 MOVS r4,#8 ;226
|L2.304|
000130 9903 LDR r1,[sp,#0xc] ;228
000132 eba4040a SUB r4,r4,r10 ;230
000136 fa35f001 LSRS r0,r5,r1 ;228
00013a fa05f50a LSL r5,r5,r10 ;229
00013e b2ed UXTB r5,r5 ;229
000140 d103 BNE |L2.330|
000142 4915 LDR r1,|L2.408|
000144 7b09 LDRB r1,[r1,#0xc] ;231 ; GUI_Context
000146 0789 LSLS r1,r1,#30 ;231
000148 d414 BMI |L2.372|
|L2.330|
00014a 4913 LDR r1,|L2.408|
00014c 9a1b LDR r2,[sp,#0x6c] ;232
00014e 8849 LDRH r1,[r1,#2] ;232 ; GUI_Context
000150 9101 STR r1,[sp,#4] ;233
000152 b10a CBZ r2,|L2.344|
000154 f8320010 LDRH r0,[r2,r0,LSL #1] ;234
|L2.344|
000158 490f LDR r1,|L2.408|
00015a 8048 STRH r0,[r1,#2] ;236
00015c 9916 LDR r1,[sp,#0x58] ;238
00015e 9a05 LDR r2,[sp,#0x14] ;238
000160 eb090301 ADD r3,r9,r1 ;238
000164 1e5b SUBS r3,r3,#1 ;238
000166 4649 MOV r1,r9 ;238
000168 9802 LDR r0,[sp,#8] ;238
00016a f7fffffe BL LCD_FillRect
00016e 490a LDR r1,|L2.408|
000170 9801 LDR r0,[sp,#4] ;239
000172 8048 STRH r0,[r1,#2] ;239
|L2.372|
000174 9916 LDR r1,[sp,#0x58] ;222
000176 1c76 ADDS r6,r6,#1 ;222
000178 4489 ADD r9,r9,r1 ;222
|L2.378|
00017a 980b LDR r0,[sp,#0x2c] ;222
00017c 4286 CMP r6,r0 ;222
00017e dbd3 BLT |L2.296|
|L2.384|
000180 9804 LDR r0,[sp,#0x10] ;217
000182 1c40 ADDS r0,r0,#1 ;217
000184 9004 STR r0,[sp,#0x10] ;217
000186 9808 LDR r0,[sp,#0x20] ;217
000188 9005 STR r0,[sp,#0x14] ;217
00018a 9919 LDR r1,[sp,#0x64] ;217
00018c 9804 LDR r0,[sp,#0x10] ;217
00018e 4488 ADD r8,r8,r1 ;217
|L2.400|
000190 4558 CMP r0,r11 ;217
000192 dbb2 BLT |L2.250|
000194 e7a6 B |L2.228|
;;;246
ENDP
000196 0000 DCW 0x0000
|L2.408|
DCD GUI_Context
AREA ||i._Rect2TextRect||, CODE, READONLY, ALIGN=1
_Rect2TextRect PROC
;;;113 */
;;;114 static void _Rect2TextRect(GUI_RECT * pRect) {
000000 b510 PUSH {r4,lr}
;;;115 int x1, y1;
;;;116 x1 = pRect->x1;
;;;117 y1 = pRect->y1;
000002 88c3 LDRH r3,[r0,#6]
;;;118 pRect->x1 = pRect->x0 + (y1 - pRect->y0);
000004 8842 LDRH r2,[r0,#2]
000006 8801 LDRH r1,[r0,#0]
000008 1a9b SUBS r3,r3,r2
00000a 8884 LDRH r4,[r0,#4] ;116
00000c 440b ADD r3,r3,r1
;;;119 pRect->y1 = pRect->y0 + (x1 - pRect->x0);
00000e 1a61 SUBS r1,r4,r1
000010 8083 STRH r3,[r0,#4] ;118
000012 4411 ADD r1,r1,r2
000014 80c1 STRH r1,[r0,#6]
;;;120 }
000016 bd10 POP {r4,pc}
;;;121
ENDP
AREA ||i._TransformPointCW||, CODE, READONLY, ALIGN=2
_TransformPointCW PROC
;;;130 */
;;;131 static void _TransformPointCW(int * pXPos, int * pYPos) {
000000 b57c PUSH {r2-r6,lr}
000002 460d MOV r5,r1
000004 4604 MOV r4,r0
;;;132 GUI_RECT ClientRect = {0};
000006 2100 MOVS r1,#0
000008 4668 MOV r0,sp
00000a 460a MOV r2,r1
00000c c006 STM r0!,{r1,r2}
;;;133 int xPos, yPos, xNumPixel, yNumPixel;
;;;134 /* Get the client rectangle */
;;;135 #if GUI_WINSUPPORT
;;;136 WM_GetWindowRect(&ClientRect);
00000e 4668 MOV r0,sp
000010 f7fffffe BL WM_GetWindowRect
;;;137 #else
;;;138 GUI_GetClientRect(&ClientRect);
;;;139 #endif
;;;140 xNumPixel = LCD_GetXSize() - 1;
000014 f7fffffe BL LCD_GetXSize
000018 1e46 SUBS r6,r0,#1
;;;141 yNumPixel = LCD_GetYSize() - 1;
00001a f7fffffe BL LCD_GetYSize
;;;142 if (ClientRect.x1 > xNumPixel) {
00001e f9bd2004 LDRSH r2,[sp,#4]
000022 1e41 SUBS r1,r0,#1 ;141
000024 42b2 CMP r2,r6
000026 dd01 BLE |L4.44|
;;;143 ClientRect.x1 = xNumPixel;
000028 f8ad6004 STRH r6,[sp,#4]
|L4.44|
;;;144 }
;;;145 if (ClientRect.y1 > yNumPixel) {
00002c f9bd0006 LDRSH r0,[sp,#6]
000030 4288 CMP r0,r1
000032 dd01 BLE |L4.56|
;;;146 ClientRect.y1 = yNumPixel;
000034 f8ad1006 STRH r1,[sp,#6]
|L4.56|
;;;147 }
;;;148 /* Save old positions */
;;;149 xPos = *pXPos;
;;;150 yPos = *pYPos;
;;;151 /* Rotate and add window origin */
;;;152 *pXPos = ClientRect.x0 - yPos;
000038 f9bd2000 LDRSH r2,[sp,#0]
00003c 6829 LDR r1,[r5,#0]
00003e 6820 LDR r0,[r4,#0] ;150
000040 1a51 SUBS r1,r2,r1
;;;153 *pYPos = ClientRect.y0 + xPos;
000042 6021 STR r1,[r4,#0]
000044 f9bd1002 LDRSH r1,[sp,#2]
000048 4408 ADD r0,r0,r1
;;;154 /* Handle rotation of text rectangle */
;;;155 *pXPos = *pXPos + GUI_RectDispString.x1 + GUI_RectDispString.y0;
00004a 6028 STR r0,[r5,#0]
00004c 4808 LDR r0,|L4.112|
00004e 6821 LDR r1,[r4,#0]
000050 f9b03004 LDRSH r3,[r0,#4] ; GUI_RectDispString
000054 f9b02002 LDRSH r2,[r0,#2] ; GUI_RectDispString
000058 4419 ADD r1,r1,r3
00005a 4411 ADD r1,r1,r2
;;;156 *pYPos = *pYPos + GUI_RectDispString.y0 - GUI_RectDispString.x0;
00005c 6021 STR r1,[r4,#0]
00005e f9b02002 LDRSH r2,[r0,#2] ; GUI_RectDispString
000062 6829 LDR r1,[r5,#0]
000064 f9b00000 LDRSH r0,[r0,#0] ; GUI_RectDispString
000068 4411 ADD r1,r1,r2
00006a 1a08 SUBS r0,r1,r0
;;;157 }
00006c 6028 STR r0,[r5,#0]
00006e bd7c POP {r2-r6,pc}
;;;158
ENDP
|L4.112|
DCD GUI_RectDispString
AREA ||.data||, DATA, ALIGN=2
LCD_APIListCW
DCD _DrawBitmapCW
DCD _Rect2TextRect
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -