⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 osd3.c

📁 车载电子影音系统dvd播放系统原程序代码
💻 C
📖 第 1 页 / 共 5 页
字号:
#define MENU_MAIN_FILE

#include "winav.h"
#include "utl.h"
#include "comutl.h"
#include "w99av.h"
#include "hal.h"
#include "osd.h"
#include  "cc.h"
#include "input.h"
#include "gdi.h"
#include "setup.h"
#include "osd3.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 UI_BACKGROUND_COLOR     6 //0

#define MENU_COLOR_BRIGHT       12
#define MENU_COLOR_DARK         4
#define MENU_COLOR_CENTER       5
#define MENU_BORDER_THICKNESS   2

// the item text background color
#define MENU_ITEM_COLOR_HIGHLIGHT   COLOR_YELLOW
#define MENU_ITEM_COLOR_SELECT      9 //COLOR_DARK_GRAY
#define MENU_ITEM_COLOR_NORMAL      MENU_COLOR_CENTER

// the item text color
#define MENU_ITEM_TEXT_COLOR        COLOR_BLACK1
#define MENU_ITEM_TEXT_COLOR_DISABLE    13
#define MENU_DESCRIPTION_COLOR        1
*/

// Brian2.37
#ifdef SUPPORT_FONT_26
#define MENU_ITEM_HEIGHT        26 //each Item line height
#else
#define MENU_ITEM_HEIGHT        32 //each Item line height
#endif

#define MENU_ITEM_X_OFFSET      40 // the x offset reserves space for "check mark"
#define MENU_SCROLL_HEIGHT      20 // the scroll-up/down mark height is 16, plus 2 border thinkness

#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         (60+4)  // the width of the icon in the list
#define MENU_ICON_X_OFFSET      36       // use for horizontal icon menu
#define MENU_ICON_Y_OFFSET      6       // use for vertical icon menu


#define MENU_DESCRIPTION_X      (104+MENU_GLOBAL_OFFSET) // Brian1.24
#define MENU_DESCRIPTION_Y      36


// for Input dialog display in Setup
// Brian1.08
#ifdef SETUP_DIALOG_RECOVER_BY_REDRAW

// Adjust the "Input Password" / "Input Language Code" dialog position, so it won't overlap with Setup menu
#define DIALOG_INPUT_PASSWORD_X1		(108+MENU_GLOBAL_OFFSET) // Brian1.24
#define DIALOG_INPUT_PASSWORD_Y1		250
#define DIALOG_INPUT_PASSWORD_X2		(353+MENU_GLOBAL_OFFSET) // Brian1.24
#define DIALOG_INPUT_PASSWORD_Y2		320

#else

#define DIALOG_INPUT_PASSWORD_X1		(204+MENU_GLOBAL_OFFSET) // Brian1.24
#define DIALOG_INPUT_PASSWORD_Y1		150
#define DIALOG_INPUT_PASSWORD_X2		(449+MENU_GLOBAL_OFFSET) // Brian1.24
#define DIALOG_INPUT_PASSWORD_Y2		220

#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) // Brian1.24
#ifdef MINI_OSD_REGION //CoCo2.33, fix the bug about the "Password: " dialog will overwrite the Display mode.
#define DIALOG_INPUT_PASSWORD_OSD_Y1		0 //(OSDND_UPPER_BACKGROUND_RIGHT_DISPLAY_DISTANCE_V+OSDND_FONT_HEIGHT) //20 Howard1.24
#else
#define DIALOG_INPUT_PASSWORD_OSD_Y1		20 //(OSDND_UPPER_BACKGROUND_RIGHT_DISPLAY_DISTANCE_V+OSDND_FONT_HEIGHT) //20 Howard1.24
#endif
#define DIALOG_INPUT_PASSWORD_OSD_X2		(DIALOG_INPUT_PASSWORD_OSD_X1+420)
#define DIALOG_INPUT_PASSWORD_OSD_Y2		(DIALOG_INPUT_PASSWORD_OSD_Y1+31) //CoCo2.33, fix the bug about the "Password: " dialog will overwrite the Display mode.


#define DIALOG_INPUT_PASSWORD_OSD_X_OFFSET	100
#define DIALOG_INPUT_PASSWORD_OSD_Y_OFFSET	0


// Brian1.08
#ifdef SETUP_DIALOG_RECOVER_BY_REDRAW
// Adjust the "change password" dialog position, so it won't overlap with Setup menu
#define DIALOG_CHANGE_PASSWORD_X1		(108+MENU_GLOBAL_OFFSET) // Brian1.24
#define DIALOG_CHANGE_PASSWORD_Y1		224
#define DIALOG_CHANGE_PASSWORD_X2		(492+MENU_GLOBAL_OFFSET) // Brian1.24
#define DIALOG_CHANGE_PASSWORD_Y2		340 //260

#define DIALOG_CHANGE_PASSWORD_X_OFFSET	20 
#define DIALOG_CHANGE_PASSWORD_Y_OFFSET	10 //20

#define DIALOG_CHANGE_PASSWORD_X_SHIFT	120 //90

#define DIALOG_CHANGE_PASSWORD_CHAR_WIDTH	20
#define DIALOG_CHANGE_PASSWORD_CHAR_HEIGHT	32 //40

#else

#define DIALOG_CHANGE_PASSWORD_X1		(160+MENU_GLOBAL_OFFSET) // Brian1.24 //200 //304
#define DIALOG_CHANGE_PASSWORD_Y1		160 //110
#define DIALOG_CHANGE_PASSWORD_X2		(543+MENU_GLOBAL_OFFSET) // Brian1.24
#define DIALOG_CHANGE_PASSWORD_Y2		310 //260

#define DIALOG_CHANGE_PASSWORD_X_OFFSET	20
#define DIALOG_CHANGE_PASSWORD_Y_OFFSET	20

#define DIALOG_CHANGE_PASSWORD_X_SHIFT	120 //90

#define DIALOG_CHANGE_PASSWORD_CHAR_WIDTH	20
#define DIALOG_CHANGE_PASSWORD_CHAR_HEIGHT	40

#endif




#define GET_MENU_X(MENU)                   (WORD)(MENU[1].pbItemText)
#define GET_MENU_Y(MENU)                   (WORD)(MENU[1].pSubMenu)
#define GET_MENU_WIDTH(MENU)               (WORD)(MENU[1].Id)
//#define GET_MENU_ROW(MENU)                 (WORD)(MENU[1].bAttribute) // could display n Row
//#define GET_MENU_ITEM_NUM(MENU)            (WORD)(MENU[0].bAttribute) // number of items in a menu
#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)->pbStr[_bOSDLang])
#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)(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 level
BYTE __bMENUSelect[MENU_LEVEL]; // record the current selection of each level
BYTE __bMENUDisplayStart[MENU_LEVEL]; // record which item is displayed first in the display area
BYTE __bMENUStatus[MENU_LEVEL]; //bit 0: scroll-up mark appears, bit 1: scroll-down mark appears


//MENU_STRUCT  *IDATA _pCurrentMenu;
BYTE    __bCurrentMenuId; // replace _pCurrentMenu
WORD    __wMENUCurrentItemId, __wMENUPrevItemId;
BYTE    __bMENUCurrentLevel;

#ifdef SUPPORT_MENU_CURSOR_STAY_AT_VALUE_AFTER_ENTER
WORD    __wMENUItemIdAfterEnter; // Brian1.08a, the Item ID after key Enter
#endif

BYTE    _bMenuType; // 0: Setup Menu, 1: AV System, 2: Equalizer
PMENU_STRUCT code *_pMenuIndex; // Brian1.20

//MENU_STRUCT  *IDATA _pTempMenu;
// 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.02
MENU_STRUCT  code *_pTempMenu;

MENU_STRUCT  code *_pTempMenu2, code *_pTempMenu3; // Brian1.08a, Brian1.20

WORD    _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


//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) // Brian1.24
#define DIALOG_INPUT_PSCAN_Y1		120
#define DIALOG_INPUT_PSCAN_X2		(504+MENU_GLOBAL_OFFSET) // Brian1.24
#define DIALOG_INPUT_PSCAN_Y2		340
#define DIALOG_INPUT_PSCAN_X_OFFSET	 30
#define DIALOG_INPUT_PSCAN_Y_OFFSET	 30
BYTE __bOSDPromptMode;
BYTE    OSDPROMPT_ProcessKey(BYTE bKey);
#define OSD_PSCAN_PROMPT_WAIT_TIME 10 //5

BYTE    __bOSDPromptWaitTime; // = OSD_PSCAN_PROMPT_WAIT_TIME; To count How many time left
BYTE    __bOSDPromptPreKey;
DWORD    __dwOSDPromptInitialTime; // = OSD_PSCAN_PROMPT_Intial_TIME; To count How many time left

//extern BIT __btPlaying;
//extern DWORD data __dwCountSystem;
//extern BYTE __bModeCmd;
extern BYTE    __bOSDPromptMode; // = FALSE; put in _INITIAL_Variables_PowerON
void    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 menu
void _DisplayIconMenu(void);
void _DisplayMenu(BYTE bItem, BYTE bLevel);
void OSDMENU_ClearMenu(void);
void OSDSETUP_ShowDescriptionText(void);
BYTE _GetMenuItemPosition(BYTE bItemId); // Brian1.08
void _DisplayCurrentSettings(void); // Brian1.08a
void _ClearCurrentSettings(void); // Brian1.08a

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;
    }
    
    //__bCurrentMenuId = SETUP_MENU_MAIN ;//SETUP_MENU_LANGUAGE;
	//__wMENUCurrentItemId = SETUP_MAIN_LANGUAGE;
    __bMENUCurrentLevel = 0; //1;
    __bMENUSelect[__bMENUCurrentLevel] = 0; //3;
    __bMENUDisplayStart[__bMENUCurrentLevel] = 0;

	_pMenuIndex = _SetupMenuIndex;
    switch (_bMenuType)
    {
        case MENU_TYPE_SETUP:
            //_pMenuIndex = _SetupMenuIndex;

            // Brian1.08, support runtime change menu for Audio Prologic
            if (__bSupportFeature & SUPPORT_FEATURE_PROLOGIC)
                __bCurrentMenuId = SETUP_MENU_MAIN_WITH_PROLOGIC;
            else
                __bCurrentMenuId = SETUP_MENU_MAIN ;//SETUP_MENU_LANGUAGE;


			__wMENUCurrentItemId = SETUP_MAIN_LANGUAGE;
            break;
        case MENU_TYPE_AV_SYS:
			__bCurrentMenuId = AVSYS_MENU_CHANNEL ;//SETUP_MENU_LANGUAGE;
			__wMENUCurrentItemId = SETUP_MAIN_LANGUAGE;
            //_pMenuIndex = _AVSyMenuIndex;
            break;
        case MENU_TYPE_EQUALIZER:
			__bCurrentMenuId = AVSYS_MENU_EQ ;//SETUP_MENU_LANGUAGE;
			__wMENUCurrentItemId = SOUND_EFFECT_STANDARD;
            //_pMenuIndex = _AVSysMenuIndex;
            break;
    }

	// Set palette entries
	OSDMENU_SetMenuPalEntry();




}

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);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -