lcd_rotateccw.txt
来自「STM32F103ZET6+UCOSII+UCGUI源码」· 文本 代码 · 共 548 行 · 第 1/2 页
TXT
548 行
;;;208 if (xsize <= 0) {
0000aa 980b LDR r0,[sp,#0x2c]
0000ac 2800 CMP r0,#0
0000ae dd15 BLE |L2.220|
0000b0 e9dd7809 LDRD r7,r8,[sp,#0x24]
0000b4 2400 MOVS r4,#0
0000b6 e00f B |L2.216|
|L2.184|
0000b8 f1ba0f01 CMP r10,#1
0000bc d109 BNE |L2.210|
0000be 9b1b LDR r3,[sp,#0x6c]
0000c0 9a0b LDR r2,[sp,#0x2c]
0000c2 e9cd2300 STRD r2,r3,[sp,#0]
0000c6 1938 ADDS r0,r7,r4
0000c8 462b MOV r3,r5
0000ca 4632 MOV r2,r6
0000cc 4641 MOV r1,r8
0000ce f7fffffe BL _DrawBitLine1BPP
|L2.210|
0000d2 9819 LDR r0,[sp,#0x64]
0000d4 1c64 ADDS r4,r4,#1
0000d6 4406 ADD r6,r6,r0
|L2.216|
0000d8 455c CMP r4,r11
0000da dbed BLT |L2.184|
|L2.220|
;;;209 return;
;;;210 }
;;;211 _DrawBitmap(x0, y0, xsize, ysize, BitsPerPixel, BytesPerLine, pPixel, Diff, pTrans);
;;;212 } else {
;;;213 /* Handle BITMAP with magnification */
;;;214 int x, y, xi, yi;
;;;215 int Shift = 8 - BitsPerPixel;
;;;216 for (x = x0, xi = 0; xi < ysize; xi++, x += yMul, pPixel += BytesPerLine) {
;;;217 int xMax = x + yMul - 1;
;;;218 if ((xMax >= GUI_Context.ClipRect.x0) && (x <= GUI_Context.ClipRect.x1)) {
;;;219 int BitsLeft = 0;
;;;220 const U8 GUI_UNI_PTR * pDataLine = pPixel;
;;;221 for (y = y0, yi = 0; yi < xsize; yi++, y -= xMul) {
;;;222 U8 Index;
;;;223 if (!BitsLeft) {
;;;224 Data = *pDataLine++;
;;;225 BitsLeft =8;
;;;226 }
;;;227 Index = Data >> Shift;
;;;228 Data <<= BitsPerPixel;
;;;229 BitsLeft -= BitsPerPixel;
;;;230 if (Index || ((GUI_Context.DrawMode & LCD_DRAWMODE_TRANS) == 0)) {
;;;231 LCD_PIXELINDEX OldColor = LCD_COLORINDEX;
;;;232 if (pTrans) {
;;;233 LCD_COLORINDEX = *(pTrans + Index);
;;;234 } else {
;;;235 LCD_COLORINDEX = Index;
;;;236 }
;;;237 LCD_FillRect(x, y - xMul + 1, xMax, y);
;;;238 LCD_COLORINDEX = OldColor;
;;;239 }
;;;240 }
;;;241 }
;;;242 }
;;;243 }
;;;244 }
0000dc b00d ADD sp,sp,#0x34
0000de e8bd8ff0 POP {r4-r11,pc}
|L2.226|
0000e2 f1ca0008 RSB r0,r10,#8 ;215
0000e6 9003 STR r0,[sp,#0xc] ;216
0000e8 9809 LDR r0,[sp,#0x24] ;216
0000ea 9005 STR r0,[sp,#0x14] ;216
0000ec 2000 MOVS r0,#0 ;216
0000ee 9004 STR r0,[sp,#0x10] ;216
0000f0 e04b B |L2.394|
|L2.242|
0000f2 9917 LDR r1,[sp,#0x5c] ;217
0000f4 9805 LDR r0,[sp,#0x14] ;217
0000f6 4a26 LDR r2,|L2.400|
0000f8 4408 ADD r0,r0,r1 ;217
0000fa 9008 STR r0,[sp,#0x20] ;217
0000fc 1e40 SUBS r0,r0,#1 ;217
0000fe 9002 STR r0,[sp,#8] ;218
000100 f9b21004 LDRSH r1,[r2,#4] ;218 ; GUI_Context
000104 4281 CMP r1,r0 ;218
000106 dc38 BGT |L2.378|
000108 4610 MOV r0,r2 ;218
00010a f9b00008 LDRSH r0,[r0,#8] ;218 ; GUI_Context
00010e 9905 LDR r1,[sp,#0x14] ;218
000110 4288 CMP r0,r1 ;218
000112 db32 BLT |L2.378|
000114 2400 MOVS r4,#0 ;219
000116 46b0 MOV r8,r6 ;220
000118 4627 MOV r7,r4 ;221
00011a f8dd9028 LDR r9,[sp,#0x28] ;221
00011e e029 B |L2.372|
|L2.288|
000120 b914 CBNZ r4,|L2.296|
000122 f8185b01 LDRB r5,[r8],#1 ;224
000126 2408 MOVS r4,#8 ;225
|L2.296|
000128 9903 LDR r1,[sp,#0xc] ;227
00012a eba4040a SUB r4,r4,r10 ;229
00012e fa35f001 LSRS r0,r5,r1 ;227
000132 fa05f50a LSL r5,r5,r10 ;228
000136 b2ed UXTB r5,r5 ;228
000138 d103 BNE |L2.322|
00013a 4915 LDR r1,|L2.400|
00013c 7b09 LDRB r1,[r1,#0xc] ;230 ; GUI_Context
00013e 0789 LSLS r1,r1,#30 ;230
000140 d414 BMI |L2.364|
|L2.322|
000142 4913 LDR r1,|L2.400|
000144 9a1b LDR r2,[sp,#0x6c] ;231
000146 8849 LDRH r1,[r1,#2] ;231 ; GUI_Context
000148 9101 STR r1,[sp,#4] ;232
00014a b10a CBZ r2,|L2.336|
00014c f8320010 LDRH r0,[r2,r0,LSL #1] ;233
|L2.336|
000150 490f LDR r1,|L2.400|
000152 464b MOV r3,r9 ;237
000154 8048 STRH r0,[r1,#2] ;235
000156 9916 LDR r1,[sp,#0x58] ;237
000158 9a02 LDR r2,[sp,#8] ;237
00015a eba90101 SUB r1,r9,r1 ;237
00015e 1c49 ADDS r1,r1,#1 ;237
000160 9805 LDR r0,[sp,#0x14] ;237
000162 f7fffffe BL LCD_FillRect
000166 490a LDR r1,|L2.400|
000168 9801 LDR r0,[sp,#4] ;238
00016a 8048 STRH r0,[r1,#2] ;238
|L2.364|
00016c 9916 LDR r1,[sp,#0x58] ;221
00016e 1c7f ADDS r7,r7,#1 ;221
000170 eba90901 SUB r9,r9,r1 ;221
|L2.372|
000174 980b LDR r0,[sp,#0x2c] ;221
000176 4287 CMP r7,r0 ;221
000178 dbd2 BLT |L2.288|
|L2.378|
00017a 9804 LDR r0,[sp,#0x10] ;216
00017c 1c40 ADDS r0,r0,#1 ;216
00017e 9004 STR r0,[sp,#0x10] ;216
000180 9808 LDR r0,[sp,#0x20] ;216
000182 9005 STR r0,[sp,#0x14] ;216
000184 9819 LDR r0,[sp,#0x64] ;216
000186 4406 ADD r6,r6,r0 ;216
000188 9804 LDR r0,[sp,#0x10] ;216
|L2.394|
00018a 4558 CMP r0,r11 ;216
00018c dbb1 BLT |L2.242|
00018e e7a5 B |L2.220|
;;;245
ENDP
|L2.400|
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._TransformPointCCW||, CODE, READONLY, ALIGN=2
_TransformPointCCW PROC
;;;130 */
;;;131 static void _TransformPointCCW(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 f9bd1004 LDRSH r1,[sp,#4]
000022 1e40 SUBS r0,r0,#1 ;141
000024 42b1 CMP r1,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 f9bd1006 LDRSH r1,[sp,#6]
000030 4281 CMP r1,r0
000032 dd01 BLE |L4.56|
;;;146 ClientRect.y1 = yNumPixel;
000034 f8ad0006 STRH r0,[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 4411 ADD r1,r1,r2
;;;153 *pYPos = ClientRect.y1 - xPos;
000042 6021 STR r1,[r4,#0]
000044 f9bd1006 LDRSH r1,[sp,#6]
000048 1a08 SUBS r0,r1,r0
;;;154 /* Handle rotation of text rectangle */
;;;155 *pXPos = *pXPos + GUI_RectDispString.x0 - GUI_RectDispString.y0;
00004a 6028 STR r0,[r5,#0]
00004c 480b LDR r0,|L4.124|
00004e 6821 LDR r1,[r4,#0]
000050 f9b03000 LDRSH r3,[r0,#0] ; GUI_RectDispString
000054 f9b02002 LDRSH r2,[r0,#2] ; GUI_RectDispString
000058 4419 ADD r1,r1,r3
00005a 1a89 SUBS r1,r1,r2
;;;156 *pYPos = *pYPos + GUI_RectDispString.y1 - (ClientRect.y1 - ClientRect.y0) + GUI_RectDispString.x0;
00005c 6021 STR r1,[r4,#0]
00005e f9b02006 LDRSH r2,[r0,#6] ; GUI_RectDispString
000062 6829 LDR r1,[r5,#0]
000064 f9bd3006 LDRSH r3,[sp,#6]
000068 f9bd4002 LDRSH r4,[sp,#2]
00006c 4411 ADD r1,r1,r2
00006e 1b1a SUBS r2,r3,r4
000070 f9b00000 LDRSH r0,[r0,#0] ; GUI_RectDispString
000074 1a89 SUBS r1,r1,r2
000076 4408 ADD r0,r0,r1
;;;157 }
000078 6028 STR r0,[r5,#0]
00007a bd7c POP {r2-r6,pc}
;;;158
ENDP
|L4.124|
DCD GUI_RectDispString
AREA ||.data||, DATA, ALIGN=2
LCD_APIListCCW
DCD _DrawBitmapCCW
DCD _Rect2TextRect
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?