📄 dropdown.txt
字号:
000014 f7fffffe BL GUI_GetYDistOfFont
000018 4605 MOV r5,r0
;;;527 pObj->Props.pFont = pfont;
;;;528 DROPDOWN__AdjustHeight(hObj, pObj);
00001a 4621 MOV r1,r4
00001c 4630 MOV r0,r6
00001e 6427 STR r7,[r4,#0x40]
000020 f7fffffe BL DROPDOWN__AdjustHeight
;;;529 DROPDOWN_Invalidate(hObj);
000024 4630 MOV r0,r6
000026 f7fffffe BL WM_InvalidateWindow
;;;530 if (pObj->hListWin) {
00002a f8b40060 LDRH r0,[r4,#0x60]
00002e 2800 CMP r0,#0
000030 d011 BEQ |L13.86|
;;;531 if (OldHeight != GUI_GetYDistOfFont(pObj->Props.pFont)) {
000032 6c20 LDR r0,[r4,#0x40]
000034 f7fffffe BL GUI_GetYDistOfFont
000038 42a8 CMP r0,r5
00003a d005 BEQ |L13.72|
;;;532 DROPDOWN_Collapse(hObj);
00003c 4630 MOV r0,r6
00003e f7fffffe BL DROPDOWN_Collapse
;;;533 DROPDOWN_Expand(hObj);
000042 4630 MOV r0,r6
000044 f7fffffe BL DROPDOWN_Expand
|L13.72|
;;;534 }
;;;535 LISTBOX_SetFont(pObj->hListWin, pfont);
000048 f9b40060 LDRSH r0,[r4,#0x60]
00004c 4639 MOV r1,r7
00004e e8bd41f0 POP {r4-r8,lr}
000052 f7ffbffe B.W LISTBOX_SetFont
|L13.86|
;;;536 }
;;;537 WM_UNLOCK();
;;;538 }
;;;539 }
000056 e8bd81f0 POP {r4-r8,pc}
;;;540
ENDP
AREA ||i.DROPDOWN_SetScrollbarWidth||, CODE, READONLY, ALIGN=1
DROPDOWN_SetScrollbarWidth PROC
;;;644 */
;;;645 void DROPDOWN_SetScrollbarWidth(DROPDOWN_Handle hObj, unsigned Width) {
000000 b510 PUSH {r4,lr}
000002 460c MOV r4,r1
;;;646 DROPDOWN_Obj* pObj;
;;;647 if (hObj) {
000004 2800 CMP r0,#0
000006 d010 BEQ |L14.42|
;;;648 WM_LOCK();
;;;649 pObj = DROPDOWN_H2P(hObj);
000008 f7fffffe BL GUI_ALLOC_h2p
;;;650 ASSERT_IS_VALID_PTR(pObj);
;;;651 if (Width != (unsigned)pObj->ScrollbarWidth) {
00000c f8901066 LDRB r1,[r0,#0x66]
000010 42a1 CMP r1,r4
000012 d00a BEQ |L14.42|
;;;652 pObj->ScrollbarWidth = Width;
000014 f8804066 STRB r4,[r0,#0x66]
;;;653 if (pObj->hListWin) {
000018 f9b00060 LDRSH r0,[r0,#0x60]
00001c 2800 CMP r0,#0
00001e d004 BEQ |L14.42|
;;;654 LISTBOX_SetScrollbarWidth(pObj->hListWin, Width);
000020 4621 MOV r1,r4
000022 e8bd4010 POP {r4,lr}
000026 f7ffbffe B.W LISTBOX_SetScrollbarWidth
|L14.42|
;;;655 }
;;;656 }
;;;657 WM_UNLOCK();
;;;658 }
;;;659 }
00002a bd10 POP {r4,pc}
;;;660
ENDP
AREA ||i.DROPDOWN_SetSel||, CODE, READONLY, ALIGN=1
DROPDOWN_SetSel PROC
;;;586 */
;;;587 void DROPDOWN_SetSel(DROPDOWN_Handle hObj, int Sel) {
000000 b570 PUSH {r4-r6,lr}
000002 0005 MOVS r5,r0
000004 460c MOV r4,r1
;;;588 int NumItems, MaxSel;
;;;589 DROPDOWN_Obj* pObj;
;;;590 if (hObj) {
000006 d016 BEQ |L15.54|
;;;591 WM_LOCK();
;;;592 pObj = DROPDOWN_H2P(hObj);
000008 4628 MOV r0,r5
00000a f7fffffe BL GUI_ALLOC_h2p
;;;593 ASSERT_IS_VALID_PTR(pObj);
;;;594 NumItems = _GetNumItems(pObj);
00000e 8dc1 LDRH r1,[r0,#0x2e]
;;;595 MaxSel = NumItems ? NumItems-1 : 0;
000010 b101 CBZ r1,|L15.20|
000012 1e49 SUBS r1,r1,#1
|L15.20|
;;;596 if (Sel > MaxSel) {
000014 428c CMP r4,r1
000016 dd00 BLE |L15.26|
;;;597 Sel = MaxSel;
000018 460c MOV r4,r1
|L15.26|
;;;598 }
;;;599 if (Sel != pObj->Sel) {
00001a f9b01028 LDRSH r1,[r0,#0x28]
00001e 42a1 CMP r1,r4
000020 d009 BEQ |L15.54|
;;;600 pObj->Sel = Sel;
000022 8504 STRH r4,[r0,#0x28]
;;;601 DROPDOWN_Invalidate(hObj);
000024 4628 MOV r0,r5
000026 f7fffffe BL WM_InvalidateWindow
;;;602 WM_NotifyParent(hObj, WM_NOTIFICATION_SEL_CHANGED);
00002a 4628 MOV r0,r5
00002c e8bd4070 POP {r4-r6,lr}
000030 2104 MOVS r1,#4
000032 f7ffbffe B.W WM_NotifyParent
|L15.54|
;;;603 }
;;;604 WM_UNLOCK();
;;;605 }
;;;606 }
000036 bd70 POP {r4-r6,pc}
;;;607
ENDP
AREA ||i.DROPDOWN_SetTextColor||, CODE, READONLY, ALIGN=1
DROPDOWN_SetTextColor PROC
;;;565 */
;;;566 void DROPDOWN_SetTextColor(DROPDOWN_Handle hObj, unsigned int Index, GUI_COLOR color) {
000000 e92d41f0 PUSH {r4-r8,lr}
000004 0007 MOVS r7,r0
000006 460c MOV r4,r1
000008 4615 MOV r5,r2
;;;567 DROPDOWN_Obj* pObj;
;;;568 if (hObj) {
00000a d015 BEQ |L16.56|
;;;569 if (Index < GUI_COUNTOF(pObj->Props.aBackColor)) {
00000c 2c03 CMP r4,#3
00000e d213 BCS |L16.56|
;;;570 WM_LOCK();
;;;571 pObj = DROPDOWN_H2P(hObj);
000010 4638 MOV r0,r7
000012 f7fffffe BL GUI_ALLOC_h2p
000016 4606 MOV r6,r0
;;;572 ASSERT_IS_VALID_PTR(pObj);
;;;573 pObj->Props.aTextColor[Index] = color;
000018 eb000084 ADD r0,r0,r4,LSL #2
;;;574 DROPDOWN_Invalidate(hObj);
00001c 6505 STR r5,[r0,#0x50]
00001e 4638 MOV r0,r7
000020 f7fffffe BL WM_InvalidateWindow
;;;575 if (pObj->hListWin) {
000024 f9b60060 LDRSH r0,[r6,#0x60]
000028 2800 CMP r0,#0
00002a d005 BEQ |L16.56|
;;;576 LISTBOX_SetTextColor(pObj->hListWin, Index, color);
00002c 462a MOV r2,r5
00002e 4621 MOV r1,r4
000030 e8bd41f0 POP {r4-r8,lr}
000034 f7ffbffe B.W LISTBOX_SetTextColor
|L16.56|
;;;577 }
;;;578 WM_UNLOCK();
;;;579 }
;;;580 }
;;;581 }
000038 e8bd81f0 POP {r4-r8,pc}
;;;582
ENDP
AREA ||i.DROPDOWN__AdjustHeight||, CODE, READONLY, ALIGN=1
DROPDOWN__AdjustHeight PROC
;;;273 */
;;;274 void DROPDOWN__AdjustHeight(DROPDOWN_Handle hObj, DROPDOWN_Obj* pObj) {
000000 b570 PUSH {r4-r6,lr}
000002 4605 MOV r5,r0
;;;275 int Height;
;;;276 Height = pObj->TextHeight;
000004 f9b1002c LDRSH r0,[r1,#0x2c]
000008 460c MOV r4,r1 ;274
;;;277 if (!Height) {
00000a b910 CBNZ r0,|L17.18|
;;;278 Height = GUI_GetYDistOfFont(pObj->Props.pFont);
00000c 6c20 LDR r0,[r4,#0x40]
00000e f7fffffe BL GUI_GetYDistOfFont
|L17.18|
;;;279 }
;;;280 Height += pObj->Widget.pEffect->EffectSize + 2 * pObj->Props.TextBorderSize;
000012 6a21 LDR r1,[r4,#0x20]
000014 f9b4205c LDRSH r2,[r4,#0x5c]
000018 6949 LDR r1,[r1,#0x14]
00001a eb000042 ADD r0,r0,r2,LSL #1
00001e 180e ADDS r6,r1,r0
;;;281 WM_SetSize(hObj, WM__GetWindowSizeX(&pObj->Widget.Win), Height);
000020 4620 MOV r0,r4
000022 f7fffffe BL WM__GetWindowSizeX
000026 4601 MOV r1,r0
000028 4632 MOV r2,r6
00002a 4628 MOV r0,r5
00002c e8bd4070 POP {r4-r6,lr}
000030 f7ffbffe B.W WM_SetSize
;;;282 }
;;;283
ENDP
AREA ||i._DROPDOWN_Callback||, CODE, READONLY, ALIGN=1
_DROPDOWN_Callback PROC
;;;287 */
;;;288 static void _DROPDOWN_Callback (WM_MESSAGE*pMsg) {
000000 e92d41f0 PUSH {r4-r8,lr}
;;;289 DROPDOWN_Handle hObj = pMsg->hWin;
000004 f9b07004 LDRSH r7,[r0,#4]
000008 4604 MOV r4,r0 ;288
;;;290 DROPDOWN_Obj* pObj = DROPDOWN_H2P(hObj);
00000a 4638 MOV r0,r7
00000c f7fffffe BL GUI_ALLOC_h2p
000010 4605 MOV r5,r0
;;;291 char IsExpandedBeforeMsg;
;;;292 IsExpandedBeforeMsg = pObj->hListWin ? 1 : 0;
000012 f8b00060 LDRH r0,[r0,#0x60]
000016 b108 CBZ r0,|L18.28|
000018 2601 MOVS r6,#1
00001a e000 B |L18.30|
|L18.28|
00001c 2600 MOVS r6,#0
|L18.30|
;;;293 /* Let widget handle the standard messages */
;;;294 if (WIDGET_HandleActive(hObj, pMsg) == 0) {
00001e 4621 MOV r1,r4
000020 4638 MOV r0,r7
000022 f7fffffe BL WIDGET_HandleActive
000026 2800 CMP r0,#0
000028 d05c BEQ |L18.228|
;;;295 return;
;;;296 }
;;;297 switch (pMsg->MsgId) {
00002a 6820 LDR r0,[r4,#0]
00002c 280f CMP r0,#0xf
00002e d048 BEQ |L18.194|
000030 dc11 BGT |L18.86|
000032 280b CMP r0,#0xb
000034 d049 BEQ |L18.202|
000036 280c CMP r0,#0xc
000038 d035 BEQ |L18.166|
00003a 280e CMP r0,#0xe
00003c d14d BNE |L18.218|
;;;298 case WM_NOTIFY_PARENT:
;;;299 switch (pMsg->Data.v) {
;;;300 case WM_NOTIFICATION_SCROLL_CHANGED:
;;;301 WM_NotifyParent(hObj, WM_NOTIFICATION_SCROLL_CHANGED);
;;;302 break;
;;;303 case WM_NOTIFICATION_CLICKED:
;;;304 DROPDOWN_SetSel(hObj, LISTBOX_GetSel(pObj->hListWin));
;;;305 WM_SetFocus(hObj);
;;;306 break;
;;;307 case LISTBOX_NOTIFICATION_LOST_FOCUS:
;;;308 DROPDOWN_Collapse(hObj);
;;;309 break;
;;;310 }
;;;311 break;
;;;312 case WM_PID_STATE_CHANGED:
;;;313 if (IsExpandedBeforeMsg == 0) { /* Make sure we do not react a second time */
;;;314 const WM_PID_STATE_CHANGED_INFO * pInfo = (const WM_PID_STATE_CHANGED_INFO*)pMsg->Data.p;
;;;315 if (pInfo->State) {
;;;316 DROPDOWN_Expand(hObj);
;;;317 }
;;;318 }
;;;319 break;
;;;320 case WM_TOUCH:
;;;321 if (_OnTouch(hObj, pMsg) == 0) {
;;;322 return;
;;;323 }
;;;324 break;
;;;325 case WM_PAINT:
;;;326 _Paint(hObj);
;;;327 break;
;;;328 case WM_DELETE:
;;;329 _FreeAttached(pObj);
;;;330 break; /* No return here ... WM_DefaultProc needs to be called */
;;;331 case WM_KEY:
;;;332 if ( ((const WM_KEY_INFO*)(pMsg->Data.p))->PressedCnt >0) {
00003e 68a0 LDR r0,[r4,#8]
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -