00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025 #include "stdafx.h"
00026 #include <math.h>
00027 #include "mplayerc.h"
00028 #include "MainFrm.h"
00029 #include "PPageSubStyle.h"
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040 IMPLEMENT_DYNAMIC(CPPageSubStyle, CPPageBase)
00041 CPPageSubStyle::CPPageSubStyle()
00042 : CPPageBase(CPPageSubStyle::IDD, CPPageSubStyle::IDD)
00043 , m_iCharset(0)
00044 , m_spacing(0)
00045 , m_angle(0)
00046 , m_scalex(0)
00047 , m_scaley(0)
00048 , m_borderstyle(0)
00049 , m_borderwidth(0)
00050 , m_shadowdepth(0)
00051 , m_screenalignment(0)
00052 , m_margin(0,0,0,0)
00053 , m_linkalphasliders(FALSE)
00054 , m_relativeTo(FALSE)
00055 {
00056 m_stss = AfxGetAppSettings().subdefstyle;
00057 m_fUseDefaultStyle = true;
00058 }
00059
00060 CPPageSubStyle::~CPPageSubStyle()
00061 {
00062 }
00063
00064 void CPPageSubStyle::InitStyle(CString title, STSStyle& stss)
00065 {
00066 m_pPSP->pszTitle = (m_title = title);
00067 m_psp.dwFlags |= PSP_USETITLE;
00068
00069 m_stss = stss;
00070 m_fUseDefaultStyle = false;
00071 }
00072
00073 void CPPageSubStyle::AskColor(int i)
00074 {
00075 CColorDialog dlg(m_stss.colors[i]);
00076 dlg.m_cc.Flags |= CC_FULLOPEN;
00077 if(dlg.DoModal() == IDOK)
00078 {
00079 m_stss.colors[i] = dlg.m_cc.rgbResult;
00080 m_color[i].Invalidate();
00081 }
00082 }
00083
00084 void CPPageSubStyle::DoDataExchange(CDataExchange* pDX)
00085 {
00086 CPPageBase::DoDataExchange(pDX);
00087 DDX_Control(pDX, IDC_BUTTON1, m_font);
00088 DDX_CBIndex(pDX, IDC_COMBO1, m_iCharset);
00089 DDX_Control(pDX, IDC_COMBO1, m_charset);
00090 DDX_Text(pDX, IDC_EDIT3, m_spacing);
00091 DDX_Control(pDX, IDC_SPIN3, m_spacingspin);
00092 DDX_Text(pDX, IDC_EDIT11, m_angle);
00093 DDX_Control(pDX, IDC_SPIN10, m_anglespin);
00094 DDX_Text(pDX, IDC_EDIT5, m_scalex);
00095 DDX_Control(pDX, IDC_SPIN4, m_scalexspin);
00096 DDX_Text(pDX, IDC_EDIT6, m_scaley);
00097 DDX_Control(pDX, IDC_SPIN5, m_scaleyspin);
00098 DDX_Radio(pDX, IDC_RADIO1, m_borderstyle);
00099 DDX_Text(pDX, IDC_EDIT1, m_borderwidth);
00100 DDX_Control(pDX, IDC_SPIN1, m_borderwidthspin);
00101 DDX_Text(pDX, IDC_EDIT2, m_shadowdepth);
00102 DDX_Control(pDX, IDC_SPIN2, m_shadowdepthspin);
00103 DDX_Radio(pDX, IDC_RADIO3, m_screenalignment);
00104 DDX_Text(pDX, IDC_EDIT7, m_margin.left);
00105 DDX_Control(pDX, IDC_SPIN6, m_marginleftspin);
00106 DDX_Text(pDX, IDC_EDIT8, m_margin.right);
00107 DDX_Control(pDX, IDC_SPIN7, m_marginrightspin);
00108 DDX_Text(pDX, IDC_EDIT9, m_margin.top);
00109 DDX_Control(pDX, IDC_SPIN8, m_margintopspin);
00110 DDX_Text(pDX, IDC_EDIT10, m_margin.bottom);
00111 DDX_Control(pDX, IDC_SPIN9, m_marginbottomspin);
00112 DDX_Control(pDX, IDC_COLORPRI, m_color[0]);
00113 DDX_Control(pDX, IDC_COLORSEC, m_color[1]);
00114 DDX_Control(pDX, IDC_COLOROUTL, m_color[2]);
00115 DDX_Control(pDX, IDC_COLORSHAD, m_color[3]);
00116 DDX_Slider(pDX, IDC_SLIDER2, m_alpha[0]);
00117 DDX_Slider(pDX, IDC_SLIDER3, m_alpha[1]);
00118 DDX_Slider(pDX, IDC_SLIDER5, m_alpha[2]);
00119 DDX_Slider(pDX, IDC_SLIDER6, m_alpha[3]);
00120 DDX_Control(pDX, IDC_SLIDER2, m_alphasliders[0]);
00121 DDX_Control(pDX, IDC_SLIDER3, m_alphasliders[1]);
00122 DDX_Control(pDX, IDC_SLIDER5, m_alphasliders[2]);
00123 DDX_Control(pDX, IDC_SLIDER6, m_alphasliders[3]);
00124 DDX_Check(pDX, IDC_CHECK1, m_linkalphasliders);
00125 DDX_Check(pDX, IDC_CHECK_RELATIVETO, m_relativeTo);
00126 }
00127
00128
00129 BEGIN_MESSAGE_MAP(CPPageSubStyle, CPPageBase)
00130 ON_BN_CLICKED(IDC_BUTTON1, OnBnClickedButton1)
00131 ON_STN_CLICKED(IDC_COLORPRI, OnStnClickedColorpri)
00132 ON_STN_CLICKED(IDC_COLORSEC, OnStnClickedColorsec)
00133 ON_STN_CLICKED(IDC_COLOROUTL, OnStnClickedColoroutl)
00134 ON_STN_CLICKED(IDC_COLORSHAD, OnStnClickedColorshad)
00135 ON_BN_CLICKED(IDC_CHECK1, OnBnClickedCheck1)
00136 ON_WM_HSCROLL()
00137 END_MESSAGE_MAP()
00138
00139
00140
00141
00142 BOOL CPPageSubStyle::OnInitDialog()
00143 {
00144 __super::OnInitDialog();
00145
00146 m_font.SetWindowText(m_stss.fontName);
00147 m_iCharset = -1;
00148 for(int i = 0; i < CharSetLen; i++)
00149 {
00150 CString str;
00151 str.Format(_T("%s (%d)"), CharSetNames[i], CharSetList[i]);
00152 m_charset.AddString(str);
00153 m_charset.SetItemData(i, CharSetList[i]);
00154 if(m_stss.charSet == CharSetList[i]) m_iCharset = i;
00155 }
00156
00157
00158 m_spacing = (int)m_stss.fontSpacing;
00159 m_spacingspin.SetRange32(-10000, 10000);
00160 while(m_stss.fontAngleZ < 0) m_stss.fontAngleZ += 360;
00161 m_angle = (int)fmod(m_stss.fontAngleZ, 360);
00162 m_anglespin.SetRange32(0, 359);
00163 m_scalex = (int)m_stss.fontScaleX;
00164 m_scalexspin.SetRange32(-10000, 10000);
00165 m_scaley = (int)m_stss.fontScaleY;
00166 m_scaleyspin.SetRange32(-10000, 10000);
00167
00168 m_borderstyle = m_stss.borderStyle;
00169 m_borderwidth = (int)m_stss.outlineWidth;
00170 m_borderwidthspin.SetRange32(0, 10000);
00171 m_shadowdepth = (int)m_stss.shadowDepth;
00172 m_shadowdepthspin.SetRange32(0, 10000);
00173
00174 m_screenalignment = m_stss.scrAlignment-1;
00175 m_margin = m_stss.marginRect;
00176 m_marginleftspin.SetRange32(-10000, 10000);
00177 m_marginrightspin.SetRange32(-10000, 10000);
00178 m_margintopspin.SetRange32(-10000, 10000);
00179 m_marginbottomspin.SetRange32(-10000, 10000);
00180 m_relativeTo = m_stss.relativeTo;
00181
00182 for(int i = 0; i < 4; i++)
00183 {
00184 m_color[i].SetColorPtr(&m_stss.colors[i]);
00185 m_alpha[i] = 255-m_stss.alpha[i];
00186 m_alphasliders[i].SetRange(0, 255);
00187 }
00188
00189 m_linkalphasliders = FALSE;
00190
00191 UpdateData(FALSE);
00192
00193 CreateToolTip();
00194
00195 return TRUE;
00196
00197 }
00198
00199 BOOL CPPageSubStyle::OnApply()
00200 {
00201 UpdateData();
00202
00203 if(m_iCharset >= 0) m_stss.charSet = m_charset.GetItemData(m_iCharset);
00204 m_stss.fontSpacing = m_spacing;
00205 m_stss.fontAngleZ = m_angle;
00206 m_stss.fontScaleX = m_scalex;
00207 m_stss.fontScaleY = m_scaley;
00208
00209 m_stss.borderStyle = m_borderstyle;
00210 m_stss.outlineWidth = m_borderwidth;
00211 m_stss.shadowDepth = m_shadowdepth;
00212
00213 m_stss.scrAlignment = m_screenalignment+1;
00214 m_stss.marginRect = m_margin;
00215 m_stss.relativeTo = m_relativeTo;
00216
00217 for(int i = 0; i < 4; i++) m_stss.alpha[i] = 255-m_alpha[i];
00218
00219 if(m_fUseDefaultStyle)
00220 {
00221 STSStyle& stss = AfxGetAppSettings().subdefstyle;
00222 if(!(stss == m_stss))
00223 {
00224 stss = m_stss;
00225 if(CMainFrame* pFrame = dynamic_cast<CMainFrame*>(AfxGetMainWnd()))
00226 pFrame->UpdateSubtitle(true);
00227 }
00228 }
00229
00230 return __super::OnApply();
00231 }
00232
00233 void CPPageSubStyle::OnBnClickedButton1()
00234 {
00235 LOGFONT lf;
00236 lf <<= m_stss;
00237
00238 CFontDialog dlg(&lf, CF_SCREENFONTS|CF_INITTOLOGFONTSTRUCT|CF_FORCEFONTEXIST|CF_SCALABLEONLY|CF_EFFECTS);
00239 if(dlg.DoModal() == IDOK)
00240 {
00241 CString str(lf.lfFaceName);
00242 if(str.GetLength() > 16) str = str.Left(14) + _T("...");
00243 m_font.SetWindowText(str);
00244
00245 for(int i = 0, j = m_charset.GetCount(); i < j; i++)
00246 {
00247 if(m_charset.GetItemData(i) == lf.lfCharSet)
00248 {
00249 m_charset.SetCurSel(i);
00250 break;
00251 }
00252 }
00253
00254 m_stss = lf;
00255
00256 SetModified();
00257 }
00258 }
00259
00260 void CPPageSubStyle::OnStnClickedColorpri()
00261 {
00262 AskColor(0);
00263 }
00264
00265 void CPPageSubStyle::OnStnClickedColorsec()
00266 {
00267 AskColor(1);
00268 }
00269
00270 void CPPageSubStyle::OnStnClickedColoroutl()
00271 {
00272 AskColor(2);
00273 }
00274
00275 void CPPageSubStyle::OnStnClickedColorshad()
00276 {
00277 AskColor(3);
00278 }
00279
00280 void CPPageSubStyle::OnBnClickedCheck1()
00281 {
00282 UpdateData();
00283
00284 int avg = 0;
00285 for(int i = 0; i < 4; i++) avg += m_alphasliders[i].GetPos();
00286 avg /= 4;
00287 for(int i = 0; i < 4; i++) m_alphasliders[i].SetPos(avg);
00288
00289 SetModified();
00290 }
00291
00292 void CPPageSubStyle::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
00293 {
00294 if(m_linkalphasliders && pScrollBar)
00295 {
00296 int pos = ((CSliderCtrl*)pScrollBar)->GetPos();
00297 for(int i = 0; i < 4; i++) m_alphasliders[i].SetPos(pos);
00298 }
00299
00300 SetModified();
00301
00302 __super::OnHScroll(nSBCode, nPos, pScrollBar);
00303 }