📄 cfont.cpp
字号:
return TRUE;
}
else if (wParam==IDC_CBX_FONT_CHARSET)
{
DRAWITEMSTRUCT *dis=(DRAWITEMSTRUCT*)lParam;
COLORREF crOldTextColor=GetTextColor(dis->hDC);
COLORREF crOldBkColor=GetBkColor(dis->hDC);
HBRUSH br;
if ((dis->itemAction|ODA_SELECT) && (dis->itemState&ODS_SELECTED))
{
SetTextColor(dis->hDC,GetSysColor(COLOR_HIGHLIGHTTEXT));
SetBkColor(dis->hDC,GetSysColor(COLOR_HIGHLIGHT));
br=CreateSolidBrush(GetSysColor(COLOR_HIGHLIGHT));
}
else
br=CreateSolidBrush(crOldBkColor);
FillRect(dis->hDC,&dis->rcItem,br);
if (int(dis->itemData)!=CB_ERR)
{
RECT r=dis->rcItem;r.left+=2;
char_t text[70];SendMessage(cbxCharset,CB_GETLBTEXT,dis->itemID,LPARAM(text));
if (!boldFont)
{
LOGFONT oldFont;
HFONT hf=(HFONT)GetCurrentObject(dis->hDC,OBJ_FONT);
GetObject(hf,sizeof(LOGFONT),&oldFont);
oldFont.lfWeight=FW_BLACK;
boldFont=CreateFontIndirect(&oldFont);
}
HGDIOBJ oldfont=NULL;
if (validCharsets[dis->itemData])
oldfont=SelectObject(dis->hDC,boldFont);
DrawText(dis->hDC,text,(int)strlen(text),&r,DT_LEFT|DT_SINGLELINE|DT_VCENTER);
if (oldfont)
SelectObject(dis->hDC,oldfont);
}
SetTextColor(dis->hDC,crOldTextColor);
SetBkColor(dis->hDC,crOldBkColor);
DeleteObject(br);
return TRUE;
}
else
break;
}
return TconfPageDecVideo::msgProc(uMsg,wParam,lParam);
}
Twidget* TfontPage::createDlgItem(int id,HWND h)
{
if (id==IDC_TBR_FONT_SIZE)
{
static const TbindTrackbar<TfontPageSubtitles> htbr={IDC_TBR_FONT_SIZE,IDFF_fontSizeA,NULL};
return new TwidgetSubclassTbr(h,this,TbindTrackbars(&htbr));
}
else
return TconfPageDecVideo::createDlgItem(id,h);
}
int TfontPage::getTbrIdff(int id,const TbindTrackbars bind)
{
return getCheck(IDC_CHB_FONT_AUTOSIZE)?idff_fontsizea:idff_fontsizep;
}
bool TfontPage::reset(bool testonly)
{
if (!testonly)
{
deci->resetParam(idff_fontname);
deci->resetParam(idff_fontcharset);
deci->resetParam(idff_fontautosize);
deci->resetParam(idff_fontsizep);
deci->resetParam(idff_fontsizea);
deci->resetParam(idff_fontweight);
deci->resetParam(idff_fontcolor);
deci->resetParam(idff_fontoutlinestrength);
deci->resetParam(idff_fontoutlineradius);
deci->resetParam(idff_fontspacing);
deci->resetParam(idff_fontxscale);
deci->resetParam(idff_fontfast);
deci->resetParam(idff_subshadowmode);
deci->resetParam(idff_subshadowsize);
deci->resetParam(idff_subshadowalpha);
}
return true;
}
void TfontPage::translate(void)
{
TconfPageBase::translate();
int sel=cbxGetCurSel(IDC_CBX_FONT_WEIGHT);
cbxClear(IDC_CBX_FONT_WEIGHT);
for (int i=0;TfontSettings::weights[i].name;i++)
cbxAdd(IDC_CBX_FONT_WEIGHT,_(IDC_CBX_FONT_WEIGHT,TfontSettings::weights[i].name),TfontSettings::weights[i].id);
cbxSetCurSel(IDC_CBX_FONT_WEIGHT,sel);
cbxTranslate(IDC_CBX_FONT_SUBSHADOW_MODE,TfontSettings::shadowModes);
}
TfontPage::TfontPage(TffdshowPageDec *Iparent,const TfilterIDFF *idff,int IfilterPageId):TconfPageDecVideo(Iparent,idff,IfilterPageId)
{
dialogId=IDD_FONT;
}
//====================================== TfontPageSubtitles =====================================
TfontPageSubtitles::TfontPageSubtitles(TffdshowPageDec *Iparent,const TfilterIDFF *idff):TfontPage(Iparent,idff,2)
{
idff_fontcharset=IDFF_fontCharset;
idff_fontname=IDFF_fontName;
idff_fontautosize=IDFF_fontAutosize;
idff_fontautosizevideowindow=IDFF_fontAutosizeVideoWindow;
idff_fontsizep=IDFF_fontSizeP;
idff_fontsizea=IDFF_fontSizeA;
idff_fontspacing=IDFF_fontSpacing;
idff_fontoutlinestrength=IDFF_fontOutlineStrength;
idff_fontoutlineradius=IDFF_fontOutlineRadius;
idff_fontweight=IDFF_fontWeight;
idff_fontcolor=IDFF_fontColor;
idff_fontxscale=IDFF_fontXscale;
idff_fontfast=IDFF_fontFast;
idff_subshadowmode=IDFF_fontShadowMode;
idff_subshadowalpha=IDFF_fontShadowAlpha;
idff_subshadowsize=IDFF_fontShadowSize;
static const TbindCheckbox<TfontPageSubtitles> chb[]=
{
IDC_CHB_FONT_FAST,IDFF_fontFast,NULL,
0,NULL,NULL
};
bindCheckboxes(chb);
static const TbindTrackbar<TfontPageSubtitles> htbr[]=
{
IDC_TBR_FONT_SPACING,IDFF_fontSpacing,&TfontPageSubtitles::spacingxscale2dlg,
IDC_TBR_FONT_OUTLINE_STRENGTH,IDFF_fontOutlineStrength,&TfontPageSubtitles::shadow2dlg,
IDC_TBR_FONT_OUTLINE_RADIUS,IDFF_fontOutlineRadius,&TfontPageSubtitles::shadow2dlg,
IDC_TBR_FONT_XSCALE,IDFF_fontXscale,&TfontPageSubtitles::spacingxscale2dlg,
IDC_TBR_FONT_SUBSHADOW_SIZE,IDFF_fontShadowSize,&TfontPageSubtitles::shadowSize2dlg,
IDC_TBR_FONT_SUBSHADOW_ALPHA,IDFF_fontShadowAlpha,&TfontPageSubtitles::shadowAlpha2dlg,
0,0,NULL
};
bindHtracks(htbr);
static const TbindCombobox<TfontPageSubtitles> cbx[]=
{
IDC_CBX_FONT_CHARSET,IDFF_fontCharset,BINDCBX_DATA,NULL,
IDC_CBX_FONT_WEIGHT,IDFF_fontWeight,BINDCBX_DATA,NULL,
IDC_CBX_FONT_NAME,IDFF_fontName,BINDCBX_TEXT,&TfontPageSubtitles::fillCharsets,
IDC_CBX_FONT_SUBSHADOW_MODE,IDFF_fontShadowMode,BINDCBX_SEL,&TfontPageSubtitles::font2dlg,
0
};
bindComboboxes(cbx);
}
void TfontPageSubtitles::shadow2dlg(void)
{
int shadowmode=cfgGet(idff_subshadowmode);
int outlineradius=cfgGet(idff_fontoutlineradius);
tbrSet(IDC_TBR_FONT_OUTLINE_STRENGTH,cfgGet(idff_fontoutlinestrength),IDC_LBL_FONT_OUTLINE_STRENGTH);
tbrSet(IDC_TBR_FONT_OUTLINE_RADIUS,outlineradius,IDC_LBL_FONT_OUTLINE_RADIUS);
cbxSetCurSel(IDC_CBX_FONT_SUBSHADOW_MODE,shadowmode);
static const int idShadows[]={IDC_LBL_FONT_SUBSHADOW_ALPHA,IDC_TBR_FONT_SUBSHADOW_ALPHA,IDC_LBL_FONT_SUBSHADOW_SIZE,IDC_TBR_FONT_SUBSHADOW_SIZE,0};
enable(shadowmode!=3,idShadows);
enable(shadowmode==3 || outlineradius==0,IDC_CHB_FONT_FAST);
}
void TfontPageSubtitles::shadowSize2dlg(void)
{
if (idff_subshadowsize)
{
int shadowmode=cfgGet(idff_subshadowmode);
int subshadowsize=cfgGet(idff_subshadowsize);
tbrSet(IDC_TBR_FONT_SUBSHADOW_SIZE,cfgGet(idff_subshadowsize));
if (subshadowsize == 0)
setText(IDC_LBL_FONT_SUBSHADOW_SIZE,_l("%s disabled"),_(IDC_LBL_FONT_SUBSHADOW_SIZE),subshadowsize);
else
setText(IDC_LBL_FONT_SUBSHADOW_SIZE,_l("%s %i"),_(IDC_LBL_FONT_SUBSHADOW_SIZE),subshadowsize);
enable(shadowmode==3 || subshadowsize==0,IDC_CHB_FONT_FAST);
}
}
void TfontPageSubtitles::shadowAlpha2dlg(void)
{
if (idff_subshadowalpha)
{
int subshadowalpha=cfgGet(idff_subshadowalpha);
int displayValue = (int)subshadowalpha*100/255;
tbrSet(IDC_TBR_FONT_SUBSHADOW_ALPHA,cfgGet(idff_subshadowalpha));
if (displayValue == 0)
setText(IDC_LBL_FONT_SUBSHADOW_ALPHA,_l("%s transparent"),_(IDC_LBL_FONT_SUBSHADOW_ALPHA));
else if (displayValue == 100)
setText(IDC_LBL_FONT_SUBSHADOW_ALPHA,_l("%s opaque"),_(IDC_LBL_FONT_SUBSHADOW_ALPHA));
else
setText(IDC_LBL_FONT_SUBSHADOW_ALPHA,_l("%s %i%%"),_(IDC_LBL_FONT_SUBSHADOW_ALPHA), displayValue);
}
}
//========================================= TfontPageOSD ========================================
TfontPageOSD::TfontPageOSD(TffdshowPageDec *Iparent):TfontPage(Iparent)
{
idff_fontcharset=IDFF_OSDfontCharset;
idff_fontname=IDFF_OSDfontName;
idff_fontautosize=0;
idff_fontautosizevideowindow=0;
idff_fontsizep=IDFF_OSDfontSize;
idff_fontsizea=0;
idff_fontspacing=IDFF_OSDfontSpacing;
idff_fontoutlinestrength=IDFF_OSDfontOutlineStrength;
idff_fontoutlineradius=IDFF_OSDfontOutlineRadius;
idff_fontweight=IDFF_OSDfontWeight;
idff_fontcolor=IDFF_OSDfontColor;
idff_fontxscale=IDFF_OSDfontXscale;
idff_fontfast=IDFF_OSDfontFast;
static const TbindCheckbox<TfontPageOSD> chb[]=
{
IDC_CHB_FONT_FAST,IDFF_OSDfontFast,NULL,
0,NULL,NULL
};
bindCheckboxes(chb);
static const TbindTrackbar<TfontPageOSD> htbr[]=
{
IDC_TBR_FONT_SPACING,IDFF_OSDfontSpacing,&TfontPageOSD::spacingxscale2dlg,
IDC_TBR_FONT_OUTLINE_STRENGTH,IDFF_OSDfontOutlineStrength,&TfontPageOSD::shadow2dlg,
IDC_TBR_FONT_OUTLINE_RADIUS,IDFF_OSDfontOutlineRadius,&TfontPageOSD::shadow2dlg,
IDC_TBR_FONT_XSCALE,IDFF_OSDfontXscale,&TfontPageOSD::spacingxscale2dlg,
0,0,NULL
};
bindHtracks(htbr);
static const TbindCombobox<TfontPageOSD> cbx[]=
{
IDC_CBX_FONT_CHARSET,IDFF_OSDfontCharset,BINDCBX_DATA,NULL,
IDC_CBX_FONT_WEIGHT,IDFF_OSDfontWeight,BINDCBX_DATA,NULL,
IDC_CBX_FONT_NAME,IDFF_OSDfontName,BINDCBX_TEXT,&TfontPageOSD::fillCharsets,
0
};
bindComboboxes(cbx);
}
void TfontPageOSD::shadow2dlg(void)
{
int outlineradius=cfgGet(idff_fontoutlineradius);
tbrSet(IDC_TBR_FONT_OUTLINE_STRENGTH,cfgGet(idff_fontoutlinestrength),IDC_LBL_FONT_OUTLINE_STRENGTH);
tbrSet(IDC_TBR_FONT_OUTLINE_RADIUS,outlineradius,IDC_LBL_FONT_OUTLINE_RADIUS);
static const int idShadows[]={IDC_LBL_FONT_SUBSHADOW_MODE,IDC_CBX_FONT_SUBSHADOW_MODE,IDC_LBL_FONT_SUBSHADOW_ALPHA,IDC_TBR_FONT_SUBSHADOW_ALPHA,IDC_LBL_FONT_SUBSHADOW_SIZE,IDC_TBR_FONT_SUBSHADOW_SIZE,0};
enable(0,idShadows);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -