📄 osd3.c
字号:
#include "winav.h"#include "gdi.h"
#ifndef IMAGE_FRAME_SETUP //CoCo2.38
#ifndef SUPPORT_STB
#define MENU_DECLARATION#include "utl.h"#include "comutl.h"#include "hal.h"#include "osd.h"#include "cc.h"#include "input.h"#include "fontindex.h" //++CoCo2.37P#include "setup.h"#include "osdnd.h"#include "osd3.h"#include "osddlg.h"#include "osddivx.h"#include "setup.h"#include "notransl.h"// Brian1.05, define this to skip disabled item when moving cursor#define SKIP_DISABLED_ITEM // Brian1.08a, support horizontal Icon menu#define OSDMENU_GOTO_PREV_ITEM 0#define OSDMENU_GOTO_NEXT_ITEM 1#define OSDMENU_GOTO_SUB_MENU 2#define OSDMENU_GOTO_PARENT_MENU 3#define OSDMENU_SELECT_ITEM 4#define MENU_ITEM_HEIGHT 28 // each Item line height#define MENU_ITEM_X_OFFSET 30 // the x offset reserves space for "check mark"#define MENU_ITEM_SUBMENU_OFFSET 18 // the x offset reserves space for "sub menu"#define MENU_CHECK_OFFSET 5#define MENU_SCROLL_HEIGHT 22 // the scroll-up/down mark height is 16, plus 2 border thinkness#define MENU_TOP_ICON_HEIGHT 26 // The height of the top part of icon is 26 pixel.#ifndef REMOVE_SETUP_ICON#define MENU_ICON_HEIGHT (44+4) // the height of the icon in the list, including the border 2*2#else#define MENU_ICON_HEIGHT 44#endif// Brian1.08a#define MENU_ICON_WIDTH 64 // the width of the icon in the list#define MENU_ICON_X_OFFSET 56 // use for horizontal icon menu#define MENU_ICON_Y_OFFSET 6 // use for vertical icon menu#define MENU_DESCRIPTION_X (40 +MENU_GLOBAL_OFFSET_X)#define MENU_DESCRIPTION_Y (MENU_GLOBAL_OFFSET_Y + 5)// Brian1.08// for Input dialog display in Setup// Adjust the "Input Password" / "Input Language Code" dialog position, so it won't overlap with Setup menu#define DIALOG_INPUT_PASSWORD_X1 SETUP_MENU_ITEM_X#define DIALOG_INPUT_PASSWORD_X2 (DIALOG_INPUT_PASSWORD_X1+ SETUP_MENU_ITEM_W)#ifdef SUPPORT_SETUP_HORIZONTAL_ICON_MENU#define DIALOG_INPUT_PASSWORD_Y1 290#define DIALOG_INPUT_PASSWORD_Y2 360#else#define DIALOG_INPUT_PASSWORD_Y1 250#define DIALOG_INPUT_PASSWORD_Y2 320#endif#define DIALOG_INPUT_PASSWORD_X_OFFSET 20#define DIALOG_INPUT_PASSWORD_Y_OFFSET 20// for Input dialog display in noraml OSD#define DIALOG_INPUT_PASSWORD_OSD_X1 (16+MENU_GLOBAL_OFFSET_X) #define DIALOG_INPUT_PASSWORD_OSD_Y1 20 //(OSDND_UPPER_BACKGROUND_RIGHT_DISPLAY_DISTANCE_V+OSDND_FONT_HEIGHT) //20 Howard1.24#define DIALOG_INPUT_PASSWORD_OSD_X2 (DIALOG_INPUT_PASSWORD_OSD_X1+520)#define DIALOG_INPUT_PASSWORD_OSD_Y2 (DIALOG_INPUT_PASSWORD_OSD_Y1+32)#define DIALOG_INPUT_PASSWORD_OSD_X_OFFSET 100#define DIALOG_INPUT_PASSWORD_OSD_Y_OFFSET 0// Adjust the "change password" dialog position, so it won't overlap with Setup menu#define DIALOG_CHANGE_PASSWORD_X1 SETUP_MENU_ITEM_X #define DIALOG_CHANGE_PASSWORD_X2 (DIALOG_CHANGE_PASSWORD_X1 + 370)#ifdef SUPPORT_SETUP_HORIZONTAL_ICON_MENU#define DIALOG_CHANGE_PASSWORD_Y1 (SETUP_MENU_ITEM_Y + 143)#else#define DIALOG_CHANGE_PASSWORD_Y1 (SETUP_MENU_ITEM_Y + 164)#endif#define DIALOG_CHANGE_PASSWORD_Y2 (DIALOG_CHANGE_PASSWORD_Y1 + 98) #define DIALOG_CHANGE_PASSWORD_X_OFFSET 20 #define DIALOG_CHANGE_PASSWORD_Y_OFFSET 10 #define DIALOG_CHANGE_PASSWORD_X_SHIFT 120 #define DIALOG_CHANGE_PASSWORD_CHAR_WIDTH 20#define DIALOG_CHANGE_PASSWORD_CHAR_HEIGHT OSD_FONT_HEIGHT#define GET_MENU_X(MENU) (WORD)((DWORD)(MENU[1].pbItemText))#define GET_MENU_Y(MENU) (WORD)((DWORD)(MENU[1].pSubMenu))#define GET_MENU_WIDTH(MENU) (WORD)(MENU[1].Id)#define GET_MENU_ROW(MENU) (BYTE)(MENU[1].bAttribute) // could display n Row#define GET_MENU_ITEM_NUM(MENU) (BYTE)(MENU[0].bAttribute) // number of items in a menu#define GET_MENU_ITEM_TEXT(MENU, NUM) (MENU[2+NUM].pbItemText)#define GET_ITEM_ATTRIBUTE(MENU, NUM) (MENU[2+NUM].bAttribute & 0x03)#define CHECK_ICON_ATTRIBUTE(MENU, NUM) (MENU[2+NUM].bAttribute & 0x10) // check if it is an ICON#define GET_ITEM_ID(MENU, NUM) (MENU[2+NUM].Id)#define GET_MENU_ENABLE(MENU) ((BYTE*)(MENU[0].pbItemText)) // the _bEnablexxx#define GET_MENU_CHECK(MENU) ((BYTE*)(MENU[0].pbItemText)) // &(__SetupInfo.xxx)#define GET_MENU_BASE(MENU) (MENU[0].Id)#define GET_MENU_ID(MENU) ((BYTE) ((DWORD)(MENU[0].pSubMenu)))#define GET_SUB_MENU(MENU, NUM) (MENU[2+NUM].pSubMenu) extern BYTE DATA _bOSDLang;BYTE __bMENUParent[MENU_LEVEL]; // record the parent menu of each levelBYTE __bMENUSelect[MENU_LEVEL]; // record the current selection of each levelBYTE __bMENUDisplayStart[MENU_LEVEL]; // record which item is displayed first in the display areaBYTE __bMENUStatus[MENU_LEVEL]; //bit 0: scroll-up mark appears, bit 1: scroll-down mark appearsBYTE __bCurrentMenuId; // replace _pCurrentMenuWORD __wMENUCurrentItemId, __wMENUPrevItemId;BYTE __bMENUCurrentLevel;#ifdef SUPPORT_MENU_CURSOR_STAY_AT_VALUE_AFTER_ENTERWORD __wMENUItemIdAfterEnter; // Brian1.08a, the Item ID after key Enter#endifPMENU_STRUCT *_pMenuIndex; // Brian1.20// Brian1.20, in fact, it's a pointer to code menu structure// must declare it as code pointer, otherwise there will be conversion problem with keil C 6.12 and 7.02MENU_STRUCT *_pTempMenu;MENU_STRUCT *_pTempMenu2, *_pTempMenu3; // Brian1.08a, Brian1.20WORD _wMENUTemp;BYTE _bMENUTemp, _bMENUTemp2;// this variable is used to keep the New Password for verification// could be used for other purpose as long as it is not in the "Change Password" process.WORD _wPasswordTemp; BYTE bStatus; // used in InputPassword, ChangePassword, InputLanguageCode function//***************************************************************************//Note: Don't translate the following strings.//CoCo1.20, reduce code size.// alan test WORD aSETUPPassword[] = {4, CHAR_X, CHAR_X, CHAR_X, CHAR_X};//Alex1.07a for Input dialog display in PSCAN MODE#if defined (SUPPORT_PSCAN_PROMPT_SETUP) || defined (SUPPORT_PSCAN_PROMPT_OSD)#define DIALOG_INPUT_PSCAN_X1 (104+MENU_GLOBAL_OFFSET_X)#define DIALOG_INPUT_PSCAN_Y1 120#define DIALOG_INPUT_PSCAN_X2 (504+MENU_GLOBAL_OFFSET_X) #define DIALOG_INPUT_PSCAN_Y2 340#define DIALOG_INPUT_PSCAN_X_OFFSET 30#define DIALOG_INPUT_PSCAN_Y_OFFSET 30BYTE __bOSDPromptMode;BYTE OSDPROMPT_ProcessKey(BYTE bKey);#define OSD_PSCAN_PROMPT_WAIT_TIME 10 //5BYTE __bOSDPromptWaitTime; // = OSD_PSCAN_PROMPT_WAIT_TIME; To count How many time leftBYTE __bOSDPromptPreKey;DWORD __dwOSDPromptInitialTime; // = OSD_PSCAN_PROMPT_Intial_TIME; To count How many time left//AlanWORD _wMENUString[9];PARM_FRAME _MENU_FrameAttr;PARM_DRAW_STRING _MENU_StrAttr;PARM_RECT _MENU_RectAttr;PARM_BUTTON _MENU_BtnAttr;extern BYTE __bOSDPromptMode; // = FALSE; put in _INITIAL_Variables_PowerONvoid OSDPROMPT_Trigger(void);void OSDSETUP_ScreenVideoOutputPscanDlg(void);BYTE OSDSETUP_InputPscan(BYTE bKey);extern BYTE OSDPROMPT_ProcessKey(BYTE bKey);extern BYTE CC_DoKeyAction(BYTE bKey);#endif //#if defined (SUPPORT_PSCAN_PROMPT_SETUP) || defined (SUPPORT_PSCAN_PROMPT_OSD)void OSDMENU_DrawItem(BYTE bBase, BYTE bItem, BYTE bColor);void OSDMENU_DisplaySubMenu(BYTE bItem, BYTE bLevel);void OSDMENU_DisplayAVSysMenu(BYTE bLevel); // sepcial for AV system menuvoid _DisplayIconMenu(void);void _DisplayMenu(BYTE bItem, BYTE bLevel);void OSDMENU_ClearMenu(void);void OSDSETUP_ShowDescriptionText(void);BYTE _GetMenuItemPosition(BYTE bItemId); // Brian1.08void _DisplayCurrentSettings(void); // Brian1.08avoid _ClearCurrentSettings(void); // Brian1.08avoid _InitRect(PURECT pRect, WORD wLeft, WORD wTop, WORD wRight, WORD wBottom);BYTE _PScan_Callback(void);void _OSDMENU_DrawPassword(BYTE bPasswordType); //CoCo1.20, reduce code size.void _OSDMENU_DrawFrame(BYTE bStyle); //CoCo1.20, reduce code size.void _OSDMENU_SetMenuStringColor(void); //CoCo1.20, reduce code size.void _OSDMENU_SetDlgStringColor(void); //CoCo1.20, reduce code size.void _OSDMENU_FillRect(WORD wLeft, WORD wTop, WORD wRight, WORD wBottom); //CoCo1.20, reduce code size.void _OSDMENU_DrawString(void); //CoCo1.20, reduce code size.void _OSDMENU_DrawDynamicString(WORD *pwString); //CoCo1.20, reduce code size.void OSDMENU_Initial(void){ // don't forget to initialize the Enable array accroding to the number of item _bEnableLanguage[0] = 0xFF; //0xFE; _bEnableScreen[0] = 0xFF; _bEnableAudio[0] = 0xFF; _bEnableCustom[0] = 0xFF; _bEnableMain[0] = 0xFF; __bMENUCurrentLevel = 0; for (_bMENUTemp=0; _bMENUTemp<MENU_LEVEL; _bMENUTemp++) { __bMENUParent[_bMENUTemp] = 0; __bMENUSelect[_bMENUTemp] = 0; __bMENUDisplayStart[_bMENUTemp] = 0; __bMENUStatus[_bMENUTemp] = 0; } __bMENUCurrentLevel = 0; //1; __bMENUSelect[__bMENUCurrentLevel] = 0; //3; __bMENUDisplayStart[__bMENUCurrentLevel] = 0; _pMenuIndex = _SetupMenuIndex; // Brian1.22, Kevin1.11a modified if (__dwSupportFeature & SUPPORT_FEATURE_PROLOGIC) __bCurrentMenuId = SETUP_MENU_MAIN_WITH_PROLOGIC; else __bCurrentMenuId = SETUP_MENU_MAIN ;//SETUP_MENU_LANGUAGE; __wMENUCurrentItemId = SETUP_MAIN_LANGUAGE;}void OSDMENU_SetMenuPalEntry(void){ // set entries used by Menu, Setup, Equalizer and AV System GDI_ChangePALEntry(OSDMENU_ENTRY_MENU_COLOR_BRIGHT, OSDMENU_VALUE_MENU_COLOR_BRIGHT, FALSE); GDI_ChangePALEntry(OSDMENU_ENTRY_MENU_COLOR_DARK, OSDMENU_VALUE_MENU_COLOR_DARK, FALSE); GDI_ChangePALEntry(OSDMENU_ENTRY_MENU_COLOR_CENTER, OSDMENU_VALUE_MENU_COLOR_CENTER, FALSE); GDI_ChangePALEntry(OSDMENU_ENTRY_TEXT_COLOR_NORMAL, OSDMENU_VALUE_TEXT_COLOR_NORMAL, FALSE); GDI_ChangePALEntry(OSDMENU_ENTRY_TEXT_COLOR_DISABLE, OSDMENU_VALUE_TEXT_COLOR_DISABLE, FALSE); GDI_ChangePALEntry(OSDMENU_ENTRY_DESC_TEXT_COLOR, OSDMENU_VALUE_DESC_TEXT_COLOR, FALSE); GDI_ChangePALEntry(OSDMENU_ENTRY_ITEM_COLOR_SELECT, OSDMENU_VALUE_ITEM_COLOR_SELECT, FALSE); GDI_ChangePALEntry(OSDMENU_ENTRY_ITEM_COLOR_HIGHLIGHT, OSDMENU_VALUE_ITEM_COLOR_HIGHLIGHT, FALSE);/* // also set Setup color GDI_ChangePALEntry(OSDSETUP_ENTRY_CENTER_COLOR_BG, OSDSETUP_VALUE_MAIN_COLOR_BG, TRUE); GDI_ChangePALEntry(OSDSETUP_ENTRY_HELP_COLOR_BG, OSDSETUP_VALUE_HELP_COLOR_BG, TRUE); GDI_ChangePALEntry(OSDSETUP_ENTRY_ICON_COLOR_BG, OSDSETUP_VALUE_ICON_COLOR_BG, TRUE); GDI_ChangePALEntry(OSDSETUP_ENTRY_SPEAKER_HIGHLIGHT, OSDSETUP_VALUE_SPEAKER_HIGHLIGHT, FALSE);#ifdef REMOVE_SETUP_ICON GDI_ChangePALEntry(OSDSETUP_ENTRY_ICON_COLOR_ORANGE, OSDSETUP_VALUE_ICON_ORANGE, FALSE); GDI_ChangePALEntry(OSDSETUP_ENTRY_ICON_COLOR_BLUE, OSDSETUP_VALUE_ICON_BLUE, FALSE); //Brian1.24a //Iris0312 GDI_ChangePALEntry(OSDSETUP_ENTRY_ICON_COLOR_RED, OSDSETUP_VALUE_ICON_RED, FALSE); //Brian1.24a //Iris0318 GDI_ChangePALEntry(OSDSETUP_ENTRY_ICON_COLOR_GREEN, OSDSETUP_VALUE_ICON_GREEN, FALSE); //Brian1.24a //Iris0318#endif*/ GDI_WaitPaletteComplete();}void OSDMENU_DisplayTheMenu(void){ OSDMENU_DisplayMenu(__bCurrentMenuId, __bMENUSelect[__bMENUCurrentLevel], __bMENUCurrentLevel); if (__bMENUCurrentLevel == 0) { OSDSETUP_ShowDescriptionText(); // Brian1.08a, display menu settings when menu cursor in on Icon menu #ifdef SUPPORT_MENU_SETTINGS_DISPLAY _DisplayCurrentSettings();#endif } OSDMENU_DisplaySubMenu(__bMENUSelect[__bMENUCurrentLevel], __bMENUCurrentLevel);}void OSDMENU_RedrawAll(void){ BYTE bBackupLevel; MENU_STRUCT *_pBackupMenu; bBackupLevel = __bMENUCurrentLevel; _pBackupMenu = _pTempMenu; OSDSETUP_RedrawMenu(); _pTempMenu = _pMenuIndex[0]; __bMENUCurrentLevel = 0; _DisplayIconMenu(); if (0 < bBackupLevel) { OSDMENU_DrawItem(__bMENUDisplayStart[__bMENUCurrentLevel], __bMENUSelect[__bMENUCurrentLevel], OSDMENU_ENTRY_ITEM_COLOR_SELECT); if (2 == bBackupLevel) { _pTempMenu = GET_SUB_MENU(_pTempMenu, __bMENUSelect[__bMENUCurrentLevel]); __bMENUCurrentLevel = 1; _MENU_StrAttr.bTextColor = OSDMENU_ENTRY_TEXT_COLOR_NORMAL; OSDMENU_DrawItem(__bMENUDisplayStart[__bMENUCurrentLevel], __bMENUSelect[__bMENUCurrentLevel], OSDMENU_ENTRY_ITEM_COLOR_SELECT); } } __bMENUCurrentLevel = bBackupLevel; _pTempMenu = _pBackupMenu;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -