📄 gui__calctextrect.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__calctextrect.o --depend=.\Obj\gui__calctextrect.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__CalcTextRect.c]
THUMB
AREA ||i.GUI__CalcTextRect||, CODE, READONLY, ALIGN=1
GUI__CalcTextRect PROC
;;;33 */
;;;34 void GUI__CalcTextRect(const char GUI_UNI_PTR* pText, const GUI_RECT* pTextRectIn, GUI_RECT* pTextRectOut, int TextAlign) {
000000 e92d41f0 PUSH {r4-r8,lr}
000004 460c MOV r4,r1
000006 4617 MOV r7,r2
000008 4698 MOV r8,r3
;;;35 if (pText) {
00000a b380 CBZ r0,|L1.110|
;;;36 int xPos, yPos, TextWidth, TextHeight;
;;;37
;;;38 /* Calculate X-pos of text */
;;;39 TextWidth = GUI_GetStringDistX(pText);
00000c f7fffffe BL GUI_GetStringDistX
000010 4606 MOV r6,r0
;;;40 switch (TextAlign & GUI_TA_HORIZONTAL) {
000012 f0080003 AND r0,r8,#3
000016 2801 CMP r0,#1
000018 d00d BEQ |L1.54|
00001a 2802 CMP r0,#2
00001c d110 BNE |L1.64|
;;;41 case GUI_TA_HCENTER:
;;;42 xPos = pTextRectIn->x0 + ((pTextRectIn->x1 - pTextRectIn->x0 + 1) - TextWidth) / 2;
00001e f9b41004 LDRSH r1,[r4,#4]
000022 f9b40000 LDRSH r0,[r4,#0]
000026 1a09 SUBS r1,r1,r0
000028 1b89 SUBS r1,r1,r6
00002a 1c49 ADDS r1,r1,#1
00002c eb0171d1 ADD r1,r1,r1,LSR #31
000030 eb000561 ADD r5,r0,r1,ASR #1
;;;43 break;
000034 e006 B |L1.68|
|L1.54|
;;;44 case GUI_TA_RIGHT:
;;;45 xPos = pTextRectIn->x1 - TextWidth + 1;
000036 f9b40004 LDRSH r0,[r4,#4]
00003a 1b85 SUBS r5,r0,r6
00003c 1c6d ADDS r5,r5,#1
;;;46 break;
00003e e001 B |L1.68|
|L1.64|
;;;47 default:
;;;48 xPos = pTextRectIn->x0;
000040 f9b45000 LDRSH r5,[r4,#0]
|L1.68|
;;;49 }
;;;50
;;;51 /* Calculate Y-pos of text*/
;;;52 TextHeight = GUI_GetFontDistY();
000044 f7fffffe BL GUI_GetFontDistY
000048 4601 MOV r1,r0
;;;53 switch (TextAlign & GUI_TA_VERTICAL) {
00004a f008000c AND r0,r8,#0xc
00004e 2804 CMP r0,#4
000050 d00e BEQ |L1.112|
000052 280c CMP r0,#0xc
000054 d111 BNE |L1.122|
;;;54 case GUI_TA_VCENTER:
;;;55 yPos = pTextRectIn->y0 + ((pTextRectIn->y1 - pTextRectIn->y0 + 1) - TextHeight) / 2;
000056 f9b42006 LDRSH r2,[r4,#6]
00005a f9b40002 LDRSH r0,[r4,#2]
00005e 1a12 SUBS r2,r2,r0
000060 1a52 SUBS r2,r2,r1
000062 1c52 ADDS r2,r2,#1
000064 eb0272d2 ADD r2,r2,r2,LSR #31
000068 eb000062 ADD r0,r0,r2,ASR #1
;;;56 break;
00006c e007 B |L1.126|
|L1.110|
00006e e010 B |L1.146|
|L1.112|
;;;57 case GUI_TA_BOTTOM:
;;;58 yPos = pTextRectIn->y1 - TextHeight + 1;
000070 f9b40006 LDRSH r0,[r4,#6]
000074 1a40 SUBS r0,r0,r1
000076 1c40 ADDS r0,r0,#1
;;;59 break;
000078 e001 B |L1.126|
|L1.122|
;;;60 case GUI_TA_BASELINE:
;;;61 default:
;;;62 yPos = pTextRectIn->y0;
00007a f9b40002 LDRSH r0,[r4,#2]
|L1.126|
;;;63 }
;;;64
;;;65 /* Return text rectangle */
;;;66 pTextRectOut->x0 = xPos;
00007e 803d STRH r5,[r7,#0]
;;;67 pTextRectOut->y0 = yPos;
000080 8078 STRH r0,[r7,#2]
;;;68 pTextRectOut->x1 = xPos + TextWidth - 1;
000082 19aa ADDS r2,r5,r6
000084 1e52 SUBS r2,r2,#1
;;;69 pTextRectOut->y1 = yPos + TextHeight - 1;
000086 4408 ADD r0,r0,r1
000088 80ba STRH r2,[r7,#4] ;68
00008a 1e40 SUBS r0,r0,#1
00008c 80f8 STRH r0,[r7,#6]
;;;70 } else {
;;;71 *pTextRectOut = *pTextRectIn;
;;;72 }
;;;73 }
00008e e8bd81f0 POP {r4-r8,pc}
|L1.146|
000092 4621 MOV r1,r4 ;71
000094 4638 MOV r0,r7 ;71
000096 e8bd41f0 POP {r4-r8,lr} ;71
00009a 2208 MOVS r2,#8 ;71
00009c f7ffbffe B.W __aeabi_memcpy
;;;74
ENDP
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -