📄 framewin.txt
字号:
|L6.42|
;;;439 }
;;;440 TitleHeight = FRAMEWIN__CalcTitleHeight(pObj);
00002a 4628 MOV r0,r5
00002c f7fffffe BL FRAMEWIN__CalcTitleHeight
000030 4607 MOV r7,r0
;;;441 if (pObj->hMenu) {
000032 f9b5004e LDRSH r0,[r5,#0x4e]
000036 b110 CBZ r0,|L6.62|
;;;442 MenuHeight = WM_GetWindowSizeY(pObj->hMenu);
000038 f7fffffe BL WM_GetWindowSizeY
00003c 4680 MOV r8,r0
|L6.62|
;;;443 }
;;;444 pPos->TitleHeight = TitleHeight;
00003e 8027 STRH r7,[r4,#0]
;;;445 pPos->MenuHeight = MenuHeight;
000040 f8a48002 STRH r8,[r4,#2]
;;;446 /* Set object properties accordingly */
;;;447 pPos->rClient.x0 = BorderSize;
;;;448 pPos->rClient.x1 = xsize - BorderSize - 1;
000044 ebab0006 SUB r0,r11,r6
;;;449 pPos->rClient.y0 = BorderSize + IBorderSize + TitleHeight + MenuHeight;
000048 eb060109 ADD r1,r6,r9
00004c 80a6 STRH r6,[r4,#4] ;447
00004e 1e40 SUBS r0,r0,#1 ;448
000050 19ca ADDS r2,r1,r7
000052 8120 STRH r0,[r4,#8] ;448
000054 eb020108 ADD r1,r2,r8
000058 80e1 STRH r1,[r4,#6]
;;;450 pPos->rClient.y1 = ysize - BorderSize - 1;
00005a ebaa0106 SUB r1,r10,r6
00005e 1e49 SUBS r1,r1,#1
000060 8161 STRH r1,[r4,#0xa]
;;;451 /* Calculate title rect */
;;;452 pPos->rTitleText.x0 = BorderSize;
000062 81a6 STRH r6,[r4,#0xc]
;;;453 pPos->rTitleText.x1 = xsize - BorderSize - 1;
000064 8220 STRH r0,[r4,#0x10]
;;;454 pPos->rTitleText.y0 = BorderSize;
;;;455 pPos->rTitleText.y1 = BorderSize + TitleHeight - 1;
000066 19f0 ADDS r0,r6,r7
000068 81e6 STRH r6,[r4,#0xe] ;454
00006a 1e40 SUBS r0,r0,#1
00006c 8260 STRH r0,[r4,#0x12]
;;;456 /* Iterate over all children */
;;;457 for (hChild = pObj->Widget.Win.hFirstChild; hChild; hChild = pChild->hNext) {
00006e f9b50018 LDRSH r0,[r5,#0x18]
000072 e022 B |L6.186|
|L6.116|
;;;458 pChild = WM_H2P(hChild);
000074 f7fffffe BL GUI_ALLOC_h2p
;;;459 x0 = pChild->Rect.x0 - pObj->Widget.Win.Rect.x0;
000078 f9b01000 LDRSH r1,[r0,#0]
00007c f9b52000 LDRSH r2,[r5,#0]
;;;460 x1 = pChild->Rect.x1 - pObj->Widget.Win.Rect.x0;
000080 f9b03004 LDRSH r3,[r0,#4]
000084 1a89 SUBS r1,r1,r2 ;459
000086 1a9a SUBS r2,r3,r2
;;;461 y0 = pChild->Rect.y0 - pObj->Widget.Win.Rect.y0;
000088 f9b03002 LDRSH r3,[r0,#2]
00008c f9b57002 LDRSH r7,[r5,#2]
000090 1bdb SUBS r3,r3,r7
;;;462 if (y0 == BorderSize) {
000092 42b3 CMP r3,r6
000094 d10f BNE |L6.182|
;;;463 if (pChild->Status & WM_SF_ANCHOR_RIGHT) {
000096 8b83 LDRH r3,[r0,#0x1c]
000098 061b LSLS r3,r3,#24
00009a d506 BPL |L6.170|
;;;464 if (x0 <= pPos->rTitleText.x1) {
00009c f9b42010 LDRSH r2,[r4,#0x10]
0000a0 428a CMP r2,r1
0000a2 db08 BLT |L6.182|
;;;465 pPos->rTitleText.x1 = x0 - 1;
0000a4 1e49 SUBS r1,r1,#1
0000a6 8221 STRH r1,[r4,#0x10]
0000a8 e005 B |L6.182|
|L6.170|
;;;466 }
;;;467 } else {
;;;468 if (x1 >= pPos->rTitleText.x0) {
0000aa f9b4100c LDRSH r1,[r4,#0xc]
0000ae 4291 CMP r1,r2
0000b0 dc01 BGT |L6.182|
;;;469 pPos->rTitleText.x0 = x1 + 1;
0000b2 1c52 ADDS r2,r2,#1
0000b4 81a2 STRH r2,[r4,#0xc]
|L6.182|
0000b6 f9b0001a LDRSH r0,[r0,#0x1a] ;457
|L6.186|
0000ba 2800 CMP r0,#0 ;457
0000bc d1da BNE |L6.116|
;;;470 }
;;;471 }
;;;472 }
;;;473 }
;;;474 }
0000be e8bd9ff0 POP {r4-r12,pc}
;;;475
ENDP
AREA ||i.FRAMEWIN__CalcTitleHeight||, CODE, READONLY, ALIGN=1
FRAMEWIN__CalcTitleHeight PROC
;;;409 */
;;;410 int FRAMEWIN__CalcTitleHeight(FRAMEWIN_Obj* pObj) {
000000 b510 PUSH {r4,lr}
000002 4601 MOV r1,r0
;;;411 int r = 0;
;;;412 if (pObj->Widget.State & FRAMEWIN_SF_TITLEVIS) {
000004 8cca LDRH r2,[r1,#0x26]
000006 2000 MOVS r0,#0 ;411
000008 0692 LSLS r2,r2,#26
00000a d507 BPL |L7.28|
;;;413 r = pObj->Props.TitleHeight;
00000c f9b10040 LDRSH r0,[r1,#0x40]
;;;414 if (r == 0) {
000010 2800 CMP r0,#0
000012 d103 BNE |L7.28|
;;;415 r = 2 + GUI_GetYSizeOfFont(pObj->Props.pFont);
000014 6a88 LDR r0,[r1,#0x28]
000016 f7fffffe BL GUI_GetYSizeOfFont
00001a 1c80 ADDS r0,r0,#2
|L7.28|
;;;416 }
;;;417 }
;;;418 return r;
;;;419 }
00001c bd10 POP {r4,pc}
;;;420
ENDP
AREA ||i.FRAMEWIN__UpdatePositions||, CODE, READONLY, ALIGN=1
FRAMEWIN__UpdatePositions PROC
;;;479 */
;;;480 void FRAMEWIN__UpdatePositions(FRAMEWIN_Obj* pObj) {
000000 b510 PUSH {r4,lr}
000002 4604 MOV r4,r0
;;;481 /* Move client window accordingly */
;;;482 if (pObj->hClient || pObj->hMenu) {
000004 f8b0004c LDRH r0,[r0,#0x4c]
000008 b086 SUB sp,sp,#0x18 ;480
00000a b918 CBNZ r0,|L8.20|
00000c f8b4004e LDRH r0,[r4,#0x4e]
000010 2800 CMP r0,#0
000012 d029 BEQ |L8.104|
|L8.20|
;;;483 POSITIONS Pos;
;;;484 FRAMEWIN__CalcPositions(pObj, &Pos);
000014 a901 ADD r1,sp,#4
000016 4620 MOV r0,r4
000018 f7fffffe BL FRAMEWIN__CalcPositions
;;;485 if (pObj->hClient) {
00001c f9b4004c LDRSH r0,[r4,#0x4c]
000020 b1a8 CBZ r0,|L8.78|
;;;486 WM_MoveChildTo(pObj->hClient, Pos.rClient.x0, Pos.rClient.y0);
000022 f9bd200a LDRSH r2,[sp,#0xa]
000026 f9bd1008 LDRSH r1,[sp,#8]
00002a f7fffffe BL WM_MoveChildTo
;;;487 WM_SetSize(pObj->hClient,
00002e f9bd000e LDRSH r0,[sp,#0xe]
000032 f9bd100a LDRSH r1,[sp,#0xa]
000036 1a42 SUBS r2,r0,r1
000038 f9bd000c LDRSH r0,[sp,#0xc]
00003c f9bd1008 LDRSH r1,[sp,#8]
000040 1c52 ADDS r2,r2,#1
000042 1a41 SUBS r1,r0,r1
000044 1c49 ADDS r1,r1,#1
000046 f9b4004c LDRSH r0,[r4,#0x4c]
00004a f7fffffe BL WM_SetSize
|L8.78|
;;;488 Pos.rClient.x1 - Pos.rClient.x0 + 1,
;;;489 Pos.rClient.y1 - Pos.rClient.y0 + 1);
;;;490 }
;;;491 if (pObj->hMenu) {
00004e f9b4004e LDRSH r0,[r4,#0x4e]
000052 2800 CMP r0,#0
000054 d008 BEQ |L8.104|
;;;492 WM_MoveChildTo(pObj->hMenu, Pos.rClient.x0, Pos.rClient.y0 - Pos.MenuHeight);
000056 f9bd100a LDRSH r1,[sp,#0xa]
00005a f9bd2006 LDRSH r2,[sp,#6]
00005e 1a8a SUBS r2,r1,r2
000060 f9bd1008 LDRSH r1,[sp,#8]
000064 f7fffffe BL WM_MoveChildTo
|L8.104|
;;;493 }
;;;494 }
;;;495 }
000068 b006 ADD sp,sp,#0x18
00006a bd10 POP {r4,pc}
;;;496
ENDP
AREA ||i.FRAMEWIN__cbClient||, CODE, READONLY, ALIGN=1
FRAMEWIN__cbClient PROC
;;;337 */
;;;338 static void FRAMEWIN__cbClient(WM_MESSAGE* pMsg) {
000000 e92d43fe PUSH {r1-r9,lr}
000004 4604 MOV r4,r0
;;;339 WM_HWIN hWin = pMsg->hWin;
000006 f9b00004 LDRSH r0,[r0,#4]
00000a 4607 MOV r7,r0
;;;340 WM_HWIN hParent = WM_GetParent(pMsg->hWin);
00000c f7fffffe BL WM_GetParent
000010 4680 MOV r8,r0
;;;341 FRAMEWIN_Obj* pObj = FRAMEWIN_H2P(hParent);
000012 f7fffffe BL GUI_ALLOC_h2p
000016 4605 MOV r5,r0
;;;342 WM_CALLBACK* cb = pObj->cb;
;;;343 switch (pMsg->MsgId) {
000018 6c86 LDR r6,[r0,#0x48]
00001a 6820 LDR r0,[r4,#0]
00001c 2817 CMP r0,#0x17
00001e d055 BEQ |L9.204|
000020 dc08 BGT |L9.52|
000022 280e CMP r0,#0xe
000024 d03c BEQ |L9.160|
000026 280f CMP r0,#0xf
000028 d00c BEQ |L9.68|
00002a 2814 CMP r0,#0x14
00002c d04e BEQ |L9.204|
00002e 2815 CMP r0,#0x15
000030 d04c BEQ |L9.204|
000032 e042 B |L9.186|
|L9.52|
000034 281f CMP r0,#0x1f
000036 d019 BEQ |L9.108|
000038 2820 CMP r0,#0x20
00003a d02a BEQ |L9.146|
00003c 2822 CMP r0,#0x22
00003e d13c BNE |L9.186|
;;;344 case WM_PAINT:
;;;345 if (pObj->Props.ClientColor != GUI_INVALID_COLOR) {
;;;346 LCD_SetBkColor(pObj->Props.ClientColor);
;;;347 GUI_Clear();
;;;348 }
;;;349 /* Give the user callback a chance to draw.
;;;350 * Note that we can not run into the bottom part, as this passes the parents handle
;;;351 */
;;;352 if (cb) {
;;;353 WM_MESSAGE Msg;
;;;354 Msg = *pMsg;
;;;355 Msg.hWin = hWin;
;;;356 (*cb)(&Msg);
;;;357 }
;;;358 return;
;;;359 case WM_SET_FOCUS:
;;;360 if (pMsg->Data.v) { /* Focus received */
;;;361 if (pObj->hFocussedChild && (pObj->hFocussedChild != hWin)) {
;;;362 WM_SetFocus(pObj->hFocussedChild);
;;;363 } else {
;;;364 pObj->hFocussedChild = WM_SetFocusOnNextChild(hWin);
;;;365 }
;;;366 pMsg->Data.v = 0; /* Focus change accepted */
;;;367 }
;;;368 return;
;;;369 case WM_GET_ACCEPT_FOCUS:
;;;370 WIDGET_HandleActive(hParent, pMsg);
;;;371 return;
;;;372 case WM_KEY:
;;;373 if (((const WM_KEY_INFO*)(pMsg->Data.p))->PressedCnt > 0) {
;;;374 int Key = ((const WM_KEY_INFO*)(pMsg->Data.p))->Key;
;;;375 switch (Key) {
;;;376 case GUI_KEY_TAB:
;;;377 pObj->hFocussedChild = WM_SetFocusOnNextChild(hWin);
;;;378 return;
;;;379 }
;;;380 }
;;;381 break; /* Send to parent by not doing anything */
;;;382 case WM_GET_BKCOLOR:
;;;383 pMsg->Data.Color = pObj->Props.ClientColor;
;;;384 return; /* Message handled */
000040 6be8 LDR r0,[r5,#0x3c]
000042 e024 B |L9.142|
|L9.68|
000044 6be8 LDR r0,[r5,#0x3c] ;345
000046 f06f4170 MVN r1,#0xf0000000 ;345
00004a 4288 CMP r0,r1 ;345
00004c d003 BEQ |L9.86|
00004e f7fffffe BL LCD_SetBkColor
000052 f7fffffe BL GUI_Clear
|L9.86|
000056 2e00 CMP r6,#0 ;352
000058 d006 BEQ |L9.104|
00005a cc0e LDM r4!,{r1-r3} ;354
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -