📄 lcd_rotate180.txt
字号:
;;;198 pPixel += (Diff >> 3); x0 += (Diff >> 3) << 3; Diff &= 7;
00009a f0250107 BIC r1,r5,#7
00009e eb0606e5 ADD r6,r6,r5,ASR #3
0000a2 4408 ADD r0,r0,r1
0000a4 f0050507 AND r5,r5,#7
0000a8 9007 STR r0,[sp,#0x1c]
|L2.170|
;;;199 break;
;;;200 }
;;;201 }
;;;202 if (xsize <= 0) {
0000aa 9809 LDR r0,[sp,#0x24]
0000ac 2800 CMP r0,#0
0000ae dd15 BLE |L2.220|
0000b0 e9dd8707 LDRD r8,r7,[sp,#0x1c]
0000b4 2400 MOVS r4,#0
0000b6 e00f B |L2.216|
|L2.184|
0000b8 f1bb0f01 CMP r11,#1
0000bc d109 BNE |L2.210|
0000be 9b19 LDR r3,[sp,#0x64]
0000c0 9a09 LDR r2,[sp,#0x24]
0000c2 e9cd2300 STRD r2,r3,[sp,#0]
0000c6 1b39 SUBS r1,r7,r4
0000c8 462b MOV r3,r5
0000ca 4632 MOV r2,r6
0000cc 4640 MOV r0,r8
0000ce f7fffffe BL _DrawBitLine1BPP
|L2.210|
0000d2 9817 LDR r0,[sp,#0x5c]
0000d4 1c64 ADDS r4,r4,#1
0000d6 4406 ADD r6,r6,r0
|L2.216|
0000d8 4554 CMP r4,r10
0000da dbed BLT |L2.184|
|L2.220|
;;;203 return;
;;;204 }
;;;205 _DrawBitmap(x0, y0, xsize, ysize, BitsPerPixel, BytesPerLine, pPixel, Diff, pTrans);
;;;206 } else {
;;;207 /* Handle BITMAP with magnification */
;;;208 int x, y;
;;;209 int yi;
;;;210 int Shift = 8 - BitsPerPixel;
;;;211 for (y = y0, yi = 0; yi < ysize; yi++, y -= yMul, pPixel += BytesPerLine) {
;;;212 int yMax = y + yMul - 1;
;;;213 /* Draw if within clip area (Optimization ... "if" is not required !) */
;;;214 if ((yMax >= GUI_Context.ClipRect.y0) && (y <= GUI_Context.ClipRect.y1)) {
;;;215 int BitsLeft = 0;
;;;216 int xi;
;;;217 const U8 GUI_UNI_PTR * pDataLine = pPixel;
;;;218 for (x = x0, xi = 0; xi < xsize; xi++, x -= xMul) {
;;;219 U8 Index;
;;;220 if (!BitsLeft) {
;;;221 Data = *pDataLine++;
;;;222 BitsLeft =8;
;;;223 }
;;;224 Index = Data >> Shift;
;;;225 Data <<= BitsPerPixel;
;;;226 BitsLeft -= BitsPerPixel;
;;;227 if (Index || ((GUI_Context.DrawMode & LCD_DRAWMODE_TRANS) == 0)) {
;;;228 LCD_PIXELINDEX OldColor = LCD_COLORINDEX;
;;;229 if (pTrans) {
;;;230 LCD_COLORINDEX = *(pTrans + Index);
;;;231 } else {
;;;232 LCD_COLORINDEX = Index;
;;;233 }
;;;234 LCD_FillRect(x - xMul + 1, y, x, yMax);
;;;235 LCD_COLORINDEX = OldColor;
;;;236 }
;;;237 }
;;;238 }
;;;239 }
;;;240 }
;;;241 }
0000dc b00b ADD sp,sp,#0x2c
0000de e8bd8ff0 POP {r4-r11,pc}
|L2.226|
0000e2 f1cb0008 RSB r0,r11,#8 ;210
0000e6 9002 STR r0,[sp,#8] ;211
0000e8 9808 LDR r0,[sp,#0x20] ;211
0000ea 9004 STR r0,[sp,#0x10] ;211
0000ec 2000 MOVS r0,#0 ;211
0000ee 9003 STR r0,[sp,#0xc] ;211
0000f0 e04c B |L2.396|
|L2.242|
0000f2 9915 LDR r1,[sp,#0x54] ;212
0000f4 9804 LDR r0,[sp,#0x10] ;212
0000f6 4408 ADD r0,r0,r1 ;212
0000f8 1e40 SUBS r0,r0,#1 ;212
0000fa 4926 LDR r1,|L2.404|
0000fc 9001 STR r0,[sp,#4] ;214
0000fe f9b12006 LDRSH r2,[r1,#6] ;214 ; GUI_Context
000102 4282 CMP r2,r0 ;214
000104 dc38 BGT |L2.376|
000106 4608 MOV r0,r1 ;214
000108 f9b0000a LDRSH r0,[r0,#0xa] ;214 ; GUI_Context
00010c 9904 LDR r1,[sp,#0x10] ;214
00010e 4288 CMP r0,r1 ;214
000110 db32 BLT |L2.376|
000112 2400 MOVS r4,#0 ;215
000114 46b1 MOV r9,r6 ;217
000116 4627 MOV r7,r4 ;218
000118 f8dd801c LDR r8,[sp,#0x1c] ;218
00011c e029 B |L2.370|
|L2.286|
00011e b914 CBNZ r4,|L2.294|
000120 f8195b01 LDRB r5,[r9],#1 ;221
000124 2408 MOVS r4,#8 ;222
|L2.294|
000126 9902 LDR r1,[sp,#8] ;224
000128 eba4040b SUB r4,r4,r11 ;226
00012c fa35f001 LSRS r0,r5,r1 ;224
000130 fa05f50b LSL r5,r5,r11 ;225
000134 b2ed UXTB r5,r5 ;225
000136 d103 BNE |L2.320|
000138 4916 LDR r1,|L2.404|
00013a 7b09 LDRB r1,[r1,#0xc] ;227 ; GUI_Context
00013c 0789 LSLS r1,r1,#30 ;227
00013e d414 BMI |L2.362|
|L2.320|
000140 4914 LDR r1,|L2.404|
000142 9a19 LDR r2,[sp,#0x64] ;228
000144 8849 LDRH r1,[r1,#2] ;228 ; GUI_Context
000146 9100 STR r1,[sp,#0] ;229
000148 b10a CBZ r2,|L2.334|
00014a f8320010 LDRH r0,[r2,r0,LSL #1] ;230
|L2.334|
00014e 4911 LDR r1,|L2.404|
000150 4642 MOV r2,r8 ;234
000152 8048 STRH r0,[r1,#2] ;232
000154 9914 LDR r1,[sp,#0x50] ;234
000156 9b01 LDR r3,[sp,#4] ;234
000158 eba80001 SUB r0,r8,r1 ;234
00015c 1c40 ADDS r0,r0,#1 ;234
00015e 9904 LDR r1,[sp,#0x10] ;234
000160 f7fffffe BL LCD_FillRect
000164 490b LDR r1,|L2.404|
000166 9800 LDR r0,[sp,#0] ;235
000168 8048 STRH r0,[r1,#2] ;235
|L2.362|
00016a 9914 LDR r1,[sp,#0x50] ;218
00016c 1c7f ADDS r7,r7,#1 ;218
00016e eba80801 SUB r8,r8,r1 ;218
|L2.370|
000172 9809 LDR r0,[sp,#0x24] ;218
000174 4287 CMP r7,r0 ;218
000176 dbd2 BLT |L2.286|
|L2.376|
000178 9803 LDR r0,[sp,#0xc] ;211
00017a 9915 LDR r1,[sp,#0x54] ;211
00017c 1c40 ADDS r0,r0,#1 ;211
00017e 9003 STR r0,[sp,#0xc] ;211
000180 9804 LDR r0,[sp,#0x10] ;211
000182 1a40 SUBS r0,r0,r1 ;211
000184 9004 STR r0,[sp,#0x10] ;211
000186 9817 LDR r0,[sp,#0x5c] ;211
000188 4406 ADD r6,r6,r0 ;211
00018a 9803 LDR r0,[sp,#0xc] ;211
|L2.396|
00018c 4550 CMP r0,r10 ;211
00018e dbb0 BLT |L2.242|
000190 e7a4 B |L2.220|
;;;242
ENDP
000192 0000 DCW 0x0000
|L2.404|
DCD GUI_Context
AREA ||i._Rect2TextRect||, CODE, READONLY, ALIGN=1
_Rect2TextRect PROC
;;;112 */
;;;113 static void _Rect2TextRect(GUI_RECT * pRect) {
000000 4770 BX lr
;;;114 GUI_USE_PARA(pRect);
;;;115 /* nothing to do in case of rotating text by 180 degrees */
;;;116 }
;;;117
ENDP
AREA ||i._TransformPoint180||, CODE, READONLY, ALIGN=2
_TransformPoint180 PROC
;;;126 */
;;;127 static void _TransformPoint180(int * pXPos, int * pYPos) {
000000 e92d41fc PUSH {r2-r8,lr}
000004 460e MOV r6,r1
000006 4605 MOV r5,r0
;;;128 GUI_RECT ClientRect = {0};
000008 2100 MOVS r1,#0
00000a 4668 MOV r0,sp
00000c 460a MOV r2,r1
00000e c006 STM r0!,{r1,r2}
;;;129 int xPos, yPos, xNumPixel, yNumPixel;
;;;130 /* Get the client rectangle */
;;;131 #if GUI_WINSUPPORT
;;;132 WM_GetWindowRect(&ClientRect);
000010 4668 MOV r0,sp
000012 f7fffffe BL WM_GetWindowRect
;;;133 #else
;;;134 GUI_GetClientRect(&ClientRect);
;;;135 #endif
;;;136 xNumPixel = LCD_GetXSize() - 1;
000016 f7fffffe BL LCD_GetXSize
00001a 1e44 SUBS r4,r0,#1
;;;137 yNumPixel = LCD_GetYSize() - 1;
00001c f7fffffe BL LCD_GetYSize
;;;138 if (ClientRect.x1 > xNumPixel) {
000020 f9bd1004 LDRSH r1,[sp,#4]
000024 1e40 SUBS r0,r0,#1 ;137
000026 42a1 CMP r1,r4
000028 dd01 BLE |L4.46|
;;;139 ClientRect.x1 = xNumPixel;
00002a f8ad4004 STRH r4,[sp,#4]
|L4.46|
;;;140 }
;;;141 if (ClientRect.y1 > yNumPixel) {
00002e f9bd1006 LDRSH r1,[sp,#6]
000032 4281 CMP r1,r0
000034 dd01 BLE |L4.58|
;;;142 ClientRect.y1 = yNumPixel;
000036 f8ad0006 STRH r0,[sp,#6]
|L4.58|
;;;143 }
;;;144 /* Save old positions */
;;;145 xPos = *pXPos;
;;;146 yPos = *pYPos;
;;;147 /* Handle rotation of text rectangle */
;;;148 *pXPos = ClientRect.x0 + GUI_RectDispString.x1 - (xPos - GUI_RectDispString.x0);
00003a 480c LDR r0,|L4.108|
00003c 6829 LDR r1,[r5,#0] ;146
00003e f9bd3000 LDRSH r3,[sp,#0]
000042 f9b07004 LDRSH r7,[r0,#4] ; GUI_RectDispString
000046 f9b04000 LDRSH r4,[r0,#0] ; GUI_RectDispString
00004a 443b ADD r3,r3,r7
00004c 1b09 SUBS r1,r1,r4
00004e 1a59 SUBS r1,r3,r1
000050 6832 LDR r2,[r6,#0]
;;;149 *pYPos = ClientRect.y0 + GUI_RectDispString.y1 - (yPos - GUI_RectDispString.y0);
000052 6029 STR r1,[r5,#0]
000054 f9b03006 LDRSH r3,[r0,#6] ; GUI_RectDispString
000058 f9bd1002 LDRSH r1,[sp,#2]
00005c f9b00002 LDRSH r0,[r0,#2] ; GUI_RectDispString
000060 4419 ADD r1,r1,r3
000062 1a10 SUBS r0,r2,r0
000064 1a08 SUBS r0,r1,r0
;;;150 }
000066 6030 STR r0,[r6,#0]
000068 e8bd81fc POP {r2-r8,pc}
;;;151
ENDP
|L4.108|
DCD GUI_RectDispString
AREA ||.data||, DATA, ALIGN=2
LCD_APIList180
DCD _DrawBitmap180
DCD _Rect2TextRect
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -