📄 menu.c
字号:
else if (menuItem->DrawItemMethod==DWI_2x2Icon)
{ Draw2x2Icon(menuItem);
}
else // full text
{ BYTE i;
BYTE xPos;
#define len itemIndex
len=strlen(menuItem->DisplayText());
if (menuItem->DrawItemMethod==DWI_FullText)
xPos=menuItem->XPos;
else if (menuItem->DrawItemMethod==DWI_FullCenterText || menuItem->DrawItemMethod==DWI_CenterText)
xPos=(OsdWindowWidth-len)/2; // get center position
Osd_DrawStr(xPos, menuItem->YPos, menuItem->DisplayText());
if (menuItem->DrawItemMethod!=DWI_CenterText) // full text
{ for (i=0; i<xPos; i++)
Osd_DrawChar(i, menuItem->YPos, ' '); // fill space
for (i=xPos+len; i<OsdWindowWidth; i++)
Osd_DrawChar(i, menuItem->YPos, ' ');
}
#undef len
}
}
//=========================================================================
// draw menu item display value
void DrawOsdMenuItemValue(BYTE itemIndex, DrawValueType *valueItem)
{ if (valueItem->DrawRadioGroup)
DrawOsdMenuItemRadioGroup(itemIndex, valueItem->DrawRadioGroup);
if (valueItem->DrawNumber)
DrawOsdMenuItemNumber(itemIndex, valueItem->DrawNumber);
if (valueItem->DrawGuage)
DrawOsdMenuItemGuage(itemIndex, valueItem->DrawGuage);
}
//=========================================================================
// draw number
void DrawOsdMenuItemNumber(BYTE itemIndex, DrawNumberType *numberItem)
{ itemIndex=0;
#if Multi_Number
{ NumberType *number;
BYTE i;
number=numberItem->DisplayNumber;
if (number)
{ i=0;
if ((CurrentMenuItem.DisplayValue->DrawNumber)!=numberItem)
Osd_SetTextColor(CP_BlackColor, numberItem->BackColor);
else
Osd_SetTextColor(numberItem->ForeColor, numberItem->BackColor);
#define drawItem (number+i)
#define xPos itemIndex
while (1)
{ xPos=drawItem->XPos;
if (xPos==0)
{ xPos=(OsdWindowWidth-4)/2-1;
}
Osd_DrawNum(xPos, drawItem->YPos, drawItem->GetValue());
if (drawItem->Flags&dwiEnd)
break;
i++;
}
#undef xPos
#undef drawItem
}
}
#else
#define xPos itemIndex
xPos=numberItem->XPos;
if (xPos==0)
{ xPos=(OsdWindowWidth-4)/2-1;
}
if (MenuPageIndex==FactoryMenu)
{ if (CurrentMenuItem.DisplayValue.DrawNumber==numberItem)
Osd_SetTextColor(numberItem->ForeColor, numberItem->BackColor);
}
if (numberItem->Flags&dwiHex)
Osd_DrawHex(xPos, numberItem->YPos, numberItem->GetValue());
else
Osd_DrawNum(xPos, numberItem->YPos, numberItem->GetValue());
#undef xPos
#endif
}
//=========================================================================
// draw guage
void DrawOsdMenuItemGuage(BYTE itemIndex, DrawGaugeType *gaugeItem)
{ itemIndex=0;
#if Multi_Gauge
{ BYTE i;
GaugeType *gauge;
gauge=gaugeItem->DisplayGauge;
if (gauge)
{ i=0;
Osd_SetTextColor(gaugeItem->ForeColor, gaugeItem->BackColor);
#define drawItem (gauge+i)
#define xPos itemIndex
while (1)
{ xPos=drawItem->XPos;
if (xPos==0)
{ xPos=(OsdWindowWidth-gaugeItem->Length)/2;
}
Osd_DrawGuage(xPos, drawItem->YPos, gaugeItem->Length, drawItem->GetValue());
if (drawItem->Flags&dwiEnd)
break;
i++;
}
#undef xPos
#undef drawItem
}
}
#else
#define xPos itemIndex
xPos=gaugeItem->XPos;
if (xPos==0)
{ xPos=(OsdWindowWidth-gaugeItem->Length)/2;
}
Osd_DrawGuage(xPos, gaugeItem->YPos, gaugeItem->Length, gaugeItem->GetValue());
#undef xPos
#endif
}
#if OSDStartPos
void DrawFullCenterText(BYTE xPos, BYTE yPos, BYTE *str)
{ BYTE len, i;
if (xPos==1)
{ len=strlen(str);
if (MenuPageIndex>RootMenu && MenuPageIndex<AutoMenu)
xPos=(OsdWindowWidth-len-4)/2+3;
else
xPos=(OsdWindowWidth-len)/2;
for (i=3; i<xPos; i++)
Osd_DrawChar(i, yPos, ' ');
for (i=xPos+len; i<OsdWindowWidth-4; i++)
Osd_DrawChar(i, yPos, ' ');
}
Osd_DrawStr(xPos, yPos, str);
}
#else
void DrawFullCenterText(BYTE xPos, BYTE yPos, BYTE *str)
{ BYTE len, i;
if (xPos==1)
{ len=strlen(str);
if (MenuPageIndex>RootMenu && MenuPageIndex<AutoMenu)
xPos=(OsdWindowWidth-len-2)/2+2;
else
xPos=(OsdWindowWidth-len)/2;
for (i=3; i<xPos; i++)
Osd_DrawChar(i, yPos, ' ');
for (i=xPos+len; i<OsdWindowWidth-2; i++)
Osd_DrawChar(i, yPos, ' ');
}
Osd_DrawStr(xPos, yPos, str);
}
#endif
//=========================================================================
// draw radio
void DrawOsdMenuItemRadioGroup(BYTE itemIndex, DrawRadioGroupType *radioItem)
{ RadioTextType *radioText;
radioText=radioItem->RadioText;
if (radioText)
{ BYTE i=0;
// BYTE xPos;
itemIndex=0xFF;
if (radioItem->GetValue)
{ if (CurrentMenuItem.DisplayValue.DrawRadioGroup)// == radioItem)
itemIndex=radioItem->GetValue();
}
#define drawItem (radioText+i)
while (1)
{ // set high color
// if (itemIndex==i)
if (drawItem->DisplayText)
{
if (drawItem->Flags&dwiTittle)
Osd_SetTextColor(CP_BlueColor, CP_GrayColor);
else if (itemIndex<0xFF)
{ if (itemIndex==i)
Osd_SetTextColor(CP_RedColor, CP_BlueColor);
else
Osd_SetTextColor(CP_WhiteColor, CP_BlueColor);
}
else
Osd_SetTextColor(radioItem->ForeColor, radioItem->BackColor);
// xPos=(OsdWindowWidth-strlen(drawItem->DisplayText()))/2;
DrawFullCenterText(drawItem->XPos, drawItem->YPos, drawItem->DisplayText());
//else
// Osd_DrawStr(xPos, drawItem->YPos, drawItem->DisplayText());
}
if (drawItem->Flags&dwiEnd)
break;
//radioText++;
i++;
}
#undef drawItem
}
}
void DrawTimingInfo(void)
{ WORD freq;
Osd_SetTextColor(CP_BlackColor, CP_GrayColor);
freq=HFreq(SrcHPeriod);
Osd_Draw4Num(OSDStartPos+6, OSDStartPos+8, freq%10);
Osd_Draw4Num(OSDStartPos+4, OSDStartPos+8, freq/10);
freq=VFreq(freq, SrcVTotal);
Osd_Draw4Num(OSDStartPos+16, OSDStartPos+8, freq%10);
Osd_Draw4Num(OSDStartPos+14, OSDStartPos+8, freq/10);
Osd_DrawChar(OSDStartPos+10, OSDStartPos+8, '.');
Osd_DrawStr(OSDStartPos+12, OSDStartPos+8, "KHz");
Osd_DrawChar(OSDStartPos+20, OSDStartPos+8, '.');
Osd_DrawStr(OSDStartPos+22, OSDStartPos+8, "Hz");
freq=mStar_ReadWord(SPRVDC_H)&0xFFFE;
if(freq>1000)
Osd_Draw4Num(OSDStartPos+14, OSDStartPos+9, freq);
else
Osd_Draw4Num(OSDStartPos+13, OSDStartPos+9, freq);
freq=mStar_ReadWord(SPRHDC_H)&0xFFFE;
Osd_Draw4Num(OSDStartPos+9, OSDStartPos+9, freq);
Osd_DrawChar(OSDStartPos+15, OSDStartPos+9, 'x');
Osd_DrawChar(OSDStartPos+16, OSDStartPos+8, '/');
}
void DrawModeInfo(void)
{WORD freq;
Osd_SetTextColor(CP_RedColor, CP_GrayColor);
freq=HFreq(SrcHPeriod);
Osd_Draw4Num(5, 2, freq%10);
Osd_Draw4Num(3, 2, freq/10);
freq=VFreq(freq, SrcVTotal);
Osd_Draw4Num(15, 2, freq%10);
Osd_Draw4Num(13, 2, freq/10);
Osd_DrawChar(9, 2, '.');
Osd_DrawStr( 11, 2, "KHz");
Osd_DrawChar(19, 2, '.');
Osd_DrawStr( 21, 2, "Hz");
freq=mStar_ReadWord(SPRVDC_H)&0xFFFE;
if(freq>1000)
Osd_Draw4Num(13, 3, freq);
else
Osd_Draw4Num(12, 3, freq);
freq=mStar_ReadWord(SPRHDC_H)&0xFFFE;
Osd_Draw4Num(8, 3, freq);
Osd_DrawChar(14, 3, 'x');
Osd_DrawChar(15, 2, '/');
Osd_DrawStr(7, 5, PresetUserModeText());
}
void DrawOutOfRangeInfo(void)
{WORD freq;
Osd_SetTextColor(CP_BlackColor, CP_GrayColor);
freq=HFreq(SrcHPeriod);
Osd_Draw4Num(6, 2, freq%10);
Osd_Draw4Num(4, 2, freq/10);
freq=VFreq(freq, SrcVTotal);
Osd_Draw4Num(16, 2, freq%10);
Osd_Draw4Num(14, 2, freq/10);
Osd_DrawChar(10, 2, '.');
Osd_DrawStr( 12, 2, "KHz");
Osd_DrawChar(20, 2, '.');
Osd_DrawStr( 22, 2, "Hz");
Osd_DrawChar(16, 2, '/');
}
BYTE GetPrevItem(MenuItemType *menuItem)
{ signed char i;
if (MenuItemIndex)
{ for (i=MenuItemIndex-1; i>=0; i--)
{ if (menuItem[i].Flags&mibDVIDisable && SrcInputType==Input_Digital)
continue;
if (menuItem[i].Flags&mibFactoryItem && !FactoryModeFlag)
continue;
if (menuItem[i].Flags&mibSelectable)
return i;
}
}
for (i=MenuItemCount-1; i>=0; i--)
{ if (menuItem[i].Flags&mibDVIDisable && SrcInputType==Input_Digital)
continue;
if (menuItem[i].Flags&mibFactoryItem && !FactoryModeFlag)
continue;
if (menuItem[i].Flags&mibSelectable)
return i;
}
return MenuItemIndex;
}
BYTE GetNextItem(MenuItemType *menuItem)
{ BYTE i;
if (MenuItemIndex<MenuItemCount-1) // current item is not last item.
{ for (i=MenuItemIndex+1; i<MenuItemCount; i++)
{ if (menuItem[i].Flags&mibDVIDisable && SrcInputType==Input_Digital)
continue;
if (menuItem[i].Flags&mibFactoryItem && !FactoryModeFlag)
continue;
if (menuItem[i].Flags&mibSelectable)
return i;
}
}
for (i=0; i<MenuItemIndex; i++)
{ if (menuItem[i].Flags&mibDVIDisable && SrcInputType==Input_Digital)
continue;
if (menuItem[i].Flags&mibFactoryItem && !FactoryModeFlag)
continue;
if (menuItem[i].Flags&mibSelectable)
return i;
}
return MenuItemIndex;
}
void ClearArrow(void)
{ Osd_SetTextColor(CP_GrayColor, CP_GrayColor);
Osd_DrawStr(OSDStartPos+14, OSDStartPos+5, tSpace2);
Osd_DrawStr(OSDStartPos+14, OSDStartPos+7, tSpace2);
Osd_DrawChar(OSDStartPos+12, OSDStartPos+6, ' ');
Osd_DrawChar(OSDStartPos+17, OSDStartPos+6, ' ');
}
BYTE GetMenuItemIndex(BYTE menuPageIndex)
{ if (MenuPageIndex==MainMenu || MenuPageIndex==FactoryMainMenu)
{ if (menuPageIndex==TrackingMenu)
{ Osd_SetTextColor(CP_GrayColor, CP_GrayColor);
// Osd_DrawStr(OSDStartPos+25, OSDStartPos+3+MenuItemIndex*3, tSpace3);
return 1;
}
else if (menuPageIndex==PositionMenu)
{ ClearArrow();
return 2;
}
else if (menuPageIndex==ColorMenu)
{ Osd_SetTextColor(CP_GrayColor, CP_GrayColor);
// Osd_DrawStr(OSDStartPos+25, OSDStartPos+4+MenuItemIndex, tSpace3);
return 3;
}
else if (menuPageIndex==OtherMenu)
{ return 4;
}
else if (menuPageIndex==BriConMenu)
{ ClearArrow();
return 0;
}
else if (menuPageIndex==Factory1Menu)
return 5;
else if (menuPageIndex==Factory2Menu)
return 6;
else if (FreeRunModeFlag)
return 5;
else
{ if (MenuPageIndex==MainMenu)
return MenuItemPrevIndex%5;
else
return MenuItemPrevIndex%7;
}
}
else if (MenuPageIndex==ColorMenu)
{ if (UserPrefColorTemp==CTEMP_USER)
return 1;
}
return 0;
}
void SaveUserPrefSetting(BYTE menuPageIndex)
{
if (MenuPageIndex==MainMenu || MenuPageIndex==RootMenu || MenuPageIndex==FactoryMainMenu)
{
if (menuPageIndex==BriConMenu || menuPageIndex==BriteMenu)
{ NVRam_WriteByte(nvrMonitorAddr(Brightness), UserPrefBrightness);
NVRam_WriteByte(nvrMonitorAddr(Contrast), UserPrefContrast);
}
else if (menuPageIndex==TrackingMenu)
{ NVRam_WriteByte(nvrModeAddr(Phase), UserPrefPhase);
NVRam_WriteWord(nvrModeAddr(HTotal), UserPrefHTotal);
}
else if (menuPageIndex==PositionMenu)
{ NVRam_WriteWord(nvrModeAddr(HStart), UserPrefHStart);
NVRam_WriteWord(nvrModeAddr(VStart), UserPrefVStart);
}
else if (menuPageIndex==OtherMenu)
{ NVRam_WriteByte(nvrMonitorAddr(Language), UserPrefLanguage);
NVRam_WriteByte(nvrMonitorAddr(OsdHStart), UserPrefOsdHStart);
}
else if (menuPageIndex==ColorMenu)
{ NVRam_WriteByte(nvrMonitorAddr(ColorTemp), UserPrefColorTemp);
NVRam_WriteByte(nvrMonitorAddr(ColorTemp1), UserPrefColorTemp1);
NVRam_WriteByte(nvrMonitorAddr(BlueColor), UserPrefBlueColor);
NVRam_WriteByte(nvrMonitorAddr(GreenColor), UserPrefGreenColor);
NVRam_WriteByte(nvrMonitorAddr(RedColor), UserPrefRedColor);
}
}
if(MenuPageIndex==MuteMenu || MenuPageIndex==VolumeMenu)
{ //only for save audio
NVRam_WriteByte(nvrMonitorAddr(MonitorFlag), MonitorFlags);
}
Clr_SaveSettingFlag();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -