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

📄 tfontsettings.cpp

📁 从FFMPEG转换而来的H264解码程序,VC下编译..
💻 CPP
字号:
/*
 * Copyright (c) 2004-2006 Milan Cutka
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
 */

#include "stdafx.h"
#include "TfontSettings.h"
#include "ffdshow_constants.h"
#include "reg.h"

//=========================================== TfontSettings ==========================================
const TfontSettings::Tweigth TfontSettings::weights[]=
{
 _l("thin")      ,FW_THIN,
 _l("extralight"),FW_EXTRALIGHT,
 _l("light")     ,FW_LIGHT,
 _l("normal")    ,FW_NORMAL,
 _l("medium")    ,FW_MEDIUM,
 _l("semibold")  ,FW_SEMIBOLD,
 _l("bold")      ,FW_BOLD,
 _l("extrabold") ,FW_EXTRABOLD,
 _l("heavy")     ,FW_HEAVY,
 NULL
};

const char_t* TfontSettings::shadowModes[]=
{
 _l("Glowing shadow"),
 _l("Gradient shadow"),
 _l("Classic shadow"),
 _l("Disabled"),
 NULL
};

const int TfontSettings::charsets[]=
{
 ANSI_CHARSET,DEFAULT_CHARSET,SYMBOL_CHARSET,SHIFTJIS_CHARSET,HANGUL_CHARSET,GB2312_CHARSET,CHINESEBIG5_CHARSET,OEM_CHARSET,JOHAB_CHARSET,HEBREW_CHARSET,ARABIC_CHARSET,GREEK_CHARSET,TURKISH_CHARSET,VIETNAMESE_CHARSET,THAI_CHARSET,EASTEUROPE_CHARSET,RUSSIAN_CHARSET,MAC_CHARSET,BALTIC_CHARSET,-1
};
const char_t* TfontSettings::getCharset(int i)
{
 switch (i)
  {
   case ANSI_CHARSET       :return _l("ANSI");
   case DEFAULT_CHARSET    :return _l("Default");
   case SYMBOL_CHARSET     :return _l("Symbol");
   case SHIFTJIS_CHARSET   :return _l("ShiftJIS");
   case HANGUL_CHARSET     :return _l("Hangul");
   case GB2312_CHARSET     :return _l("GB2312");
   case CHINESEBIG5_CHARSET:return _l("Chinese");
   case OEM_CHARSET        :return _l("OEM");
   case JOHAB_CHARSET      :return _l("Johab");
   case HEBREW_CHARSET     :return _l("Hebrew");
   case ARABIC_CHARSET     :return _l("Arabic");
   case GREEK_CHARSET      :return _l("Greek");
   case TURKISH_CHARSET    :return _l("Turkish");
   case VIETNAMESE_CHARSET :return _l("Vietnamese");
   case THAI_CHARSET       :return _l("Thai");
   case EASTEUROPE_CHARSET :return _l("Easteurope");
   case RUSSIAN_CHARSET    :return _l("Cyrillic");
   case MAC_CHARSET        :return _l("Mac");
   case BALTIC_CHARSET     :return _l("Baltic");
   default                 :return _l("unknown");
  }
}
int TfontSettings::getCharset(const char_t *name)
{
 if      (stricmp(name,_l("Default"))==0) return DEFAULT_CHARSET;
 else if (stricmp(name,_l("Symbol"))==0) return SYMBOL_CHARSET;
 else if (stricmp(name,_l("Shiftjis"))==0) return SHIFTJIS_CHARSET;
 else if (stricmp(name,_l("Hangul"))==0) return HANGUL_CHARSET;
 else if (stricmp(name,_l("Gb2312"))==0) return GB2312_CHARSET;
 else if (stricmp(name,_l("Chinese"))==0) return CHINESEBIG5_CHARSET;
 else if (stricmp(name,_l("OEM"))==0) return OEM_CHARSET;
 else if (stricmp(name,_l("Johab"))==0) return JOHAB_CHARSET;
 else if (stricmp(name,_l("Hebrew"))==0) return HEBREW_CHARSET;
 else if (stricmp(name,_l("Arabic"))==0) return ARABIC_CHARSET;
 else if (stricmp(name,_l("Greek"))==0) return GREEK_CHARSET;
 else if (stricmp(name,_l("Turkish"))==0) return TURKISH_CHARSET;
 else if (stricmp(name,_l("Vietnamese"))==0) return VIETNAMESE_CHARSET;
 else if (stricmp(name,_l("Thai"))==0) return THAI_CHARSET;
 else if (stricmp(name,_l("Easteurope"))==0) return EASTEUROPE_CHARSET;
 else if (stricmp(name,_l("Russian"))==0 || stricmp(name,_l("Cyrillic"))==0) return RUSSIAN_CHARSET;
 else if (stricmp(name,_l("Mac"))==0) return MAC_CHARSET;
 else if (stricmp(name,_l("Baltic"))==0) return BALTIC_CHARSET;
 else return ANSI_CHARSET;
}

void TfontSettings::reg_op(TregOp &t)
{
 Toptions::reg_op(t);

#ifndef UNICODE
 char_t lang[20];
 TregOpRegRead tl(HKEY_CURRENT_USER,FFDSHOW_REG_PARENT _l("\\") FFDSHOW);
 tl._REG_OP_S(IDFF_lang,_l("lang"),lang,20,_l(""));

 if (lang[0]=='\0')
  {
   TregOpRegRead tNSI(HKEY_LOCAL_MACHINE,FFDSHOW_REG_PARENT _l("\\") FFDSHOW);
   char_t langId[MAX_PATH];
   tNSI._REG_OP_S(0,_l("lang"),langId,MAX_PATH,_l("1033"));
   if(strncmp(langId,_l("1041"),4)==0)
    {lang[0]='J';lang[1]='P';}
  }

 if ((lang[0]=='J' || lang[0]=='j') && (lang[0]=='J'  || lang[1]=='P' || lang[1]=='a'|| lang[1]=='p')) /* Japanese ANSI or Unicode */
  charset= SHIFTJIS_CHARSET;
#endif
}

TfontSettings::TfontSettings(TintStrColl *Icoll):Toptions(Icoll)
{
 memset(name,0,sizeof(name));
}

//========================================= TfontSettingsOSD =========================================
TfontSettingsOSD::TfontSettingsOSD(TintStrColl *Icoll):TfontSettings(Icoll)
{
 autosize=0;
 sizeA=50;
 split=0;
 autosizeVideoWindow=0;

 static const TintOptionT<TfontSettings> iopts[]=
  {
   IDFF_OSDfontCharset       ,&TfontSettings::charset        ,1,1,_l(""),0,
     _l("OSDfontCharset"), DEFAULT_CHARSET,
   IDFF_OSDfontSize          ,&TfontSettings::sizeP          ,2,255,_l(""),0,
     _l("OSDfontSize"), 17,
   IDFF_OSDfontWeight        ,&TfontSettings::weight         ,0,900,_l(""),0,
     _l("OSDfontWeight"), FW_NORMAL,
   IDFF_OSDfontColor         ,&TfontSettings::color          ,1,1,_l(""),0,
     _l("OSDfontColor"), RGB(102,204,0),
   IDFF_OSDfontOutlineStrength,&TfontSettings::outlineStrength ,0,100,_l(""),0,
     _l("OSDfontShadowStrength"), 18,
   IDFF_OSDfontOutlineRadius  ,&TfontSettings::outlineRadius   ,1,100,_l(""),0,
     _l("OSDfontShadowRadius"), 15,
   IDFF_OSDfontSpacing       ,&TfontSettings::spacing        ,-10,10,_l(""),0,
     _l("OSDfontSpacing"), 0,
   IDFF_OSDfontXscale        ,&TfontSettings::xscale         ,10,300,_l(""),0,
     _l("OSDfontXscale"), 100,
   IDFF_OSDfontFast          ,&TfontSettings::fast           ,0,0,_l(""),0,
     _l("OSDfontFast"), 1,
   0
  };
 addOptions(iopts);
 static const TstrOption sopts[]=
  {
   IDFF_OSDfontName,(TstrVal)&TfontSettings::name,LF_FACESIZE,_l(""),0,
     _l("OSDfontName"), _l("Arial"),
   0
  };
 addOptions(sopts);
 static const TcreateParamList2<TfontSettings::Tweigth> listOSDfontWeigth(weights,&Tweigth::name);setParamList(IDFF_OSDfontWeight,&listOSDfontWeigth);
}

//========================================= TfontSettingsSub =========================================
TfontSettingsSub::TfontSettingsSub(TintStrColl *Icoll):TfontSettings(Icoll)
{
 static const Toptions::TintOptionT<TfontSettings> iopts[]=
  {
   IDFF_fontCharset            ,&TfontSettings::charset            ,1,1,_l(""),1,
     _l("fontCharset"), DEFAULT_CHARSET,
   IDFF_fontAutosize           ,&TfontSettings::autosize           ,0,0,_l(""),1,
     _l("fontAutosize"), 0,
   IDFF_fontAutosizeVideoWindow,&TfontSettings::autosizeVideoWindow,0,0,_l(""),1,
     _l("fontAutosizeVideoWindow"), 0,
   IDFF_fontSizeP              ,&TfontSettings::sizeP              ,2,255,_l(""),1,
     _l("fontSize"), 26,
   IDFF_fontSizeA              ,&TfontSettings::sizeA              ,1,100,_l(""),1,
     _l("fontSizeA"), 60,
   IDFF_fontWeight             ,&TfontSettings::weight             ,0,900,_l(""),1,
     _l("fontWeight"), FW_BOLD,
   IDFF_fontColor              ,&TfontSettings::color              ,1,1,_l(""),1,
     _l("fontColor"), RGB(255,255,255),
   IDFF_fontOutlineStrength     ,&TfontSettings::outlineStrength     ,0,100,_l(""),1,
     _l("fontShadowStrength2"), 50,
   IDFF_fontOutlineRadius       ,&TfontSettings::outlineRadius       ,1,100,_l(""),1,
     _l("fontShadowRadius"), 50,
   IDFF_fontSpacing            ,&TfontSettings::spacing            ,-10,10,_l(""),1,
     _l("fontSpacing"), 0,
   IDFF_fontSplitting          ,&TfontSettings::split              ,0,0,_l(""),1,
     _l("fontSplitting"), 1,
   IDFF_fontXscale             ,&TfontSettings::xscale             ,10,300,_l(""),1,
     _l("fontXscale"), 100,
   IDFF_fontFast               ,&TfontSettings::fast               ,0,0,_l(""),1,
     _l("fontFast"), 0,
   IDFF_fontShadowMode         ,&TfontSettings::shadowMode         ,0,3,_l(""),1,
     _l("fontShadowMode"), 1,
   IDFF_fontShadowAlpha        ,&TfontSettings::shadowAlpha        ,0,255,_l(""),1,
     _l("fontShadowAlpha"), 180,
   IDFF_fontShadowSize          ,&TfontSettings::shadowSize         ,0,50,_l(""),1,
     _l("fontShadowSize"), 8,
   0
  };
 addOptions(iopts);
 static const Toptions::TstrOption sopts[]=
  {
   IDFF_fontName,(TstrVal)&TfontSettings::name,LF_FACESIZE,_l(""),1,
     _l("fontName"), _l("Arial"),
   0
  };
 addOptions(sopts);

 static const TcreateParamList2<TfontSettings::Tweigth> listFontWeigth(weights,&Tweigth::name);setParamList(IDFF_fontWeight,&listFontWeigth);
}

void TfontSettingsSub::reg_op(TregOp &t)
{
 TfontSettings::reg_op(t);
 if (weight>900) weight=900;
}

⌨️ 快捷键说明

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