2 using System.Collections.Generic;
\r
4 using System.Diagnostics;
\r
5 using System.Drawing;
\r
8 using System.Drawing.Text;
\r
13 internal class CStage曲読み込み : CStage
\r
17 public CStage曲読み込み()
\r
19 base.eステージID = CStage.Eステージ.曲読み込み;
\r
20 base.eフェーズID = CStage.Eフェーズ.共通_通常状態;
\r
21 base.b活性化してない = true;
\r
22 // base.list子Activities.Add( this.actFI = new CActFIFOBlack() ); // #27787 2012.3.10 yyagi 曲読み込み画面のフェードインの省略
\r
23 base.list子Activities.Add( this.actFO = new CActFIFOBlack() );
\r
29 public override void On活性化()
\r
31 Trace.TraceInformation( "曲読み込みステージを活性化します。" );
\r
36 this.strSTAGEFILE = "";
\r
37 this.b音符を表示する = false;
\r
38 this.n音符の表示位置X = 0x308;
\r
39 this.ftタイトル表示用フォント = new Font( "MS PGothic", fFontSizeTitle * Scale.Y, GraphicsUnit.Pixel );
\r
40 this.nBGM再生開始時刻 = -1;
\r
41 this.nBGMの総再生時間ms = 0;
\r
42 if( this.sd読み込み音 != null )
\r
44 CDTXMania.Sound管理.tサウンドを破棄する( this.sd読み込み音 );
\r
45 this.sd読み込み音 = null;
\r
48 string strDTXファイルパス = ( CDTXMania.bコンパクトモード ) ?
\r
49 CDTXMania.strコンパクトモードファイル : CDTXMania.stage選曲.r確定されたスコア.ファイル情報.ファイルの絶対パス;
\r
51 CDTX cdtx = new CDTX( strDTXファイルパス, true );
\r
52 this.str曲タイトル = cdtx.TITLE;
\r
53 if( ( ( cdtx.STAGEFILE != null ) && ( cdtx.STAGEFILE.Length > 0 ) ) && ( File.Exists( cdtx.strフォルダ名 + cdtx.STAGEFILE ) && !CDTXMania.ConfigIni.bストイックモード ) )
\r
55 this.strSTAGEFILE = cdtx.strフォルダ名 + cdtx.STAGEFILE;
\r
56 this.b音符を表示する = false;
\r
60 this.strSTAGEFILE = CSkin.Path( @"Graphics\\ScreenNowLoading background.jpg" );
\r
61 this.b音符を表示する = true;
\r
63 if( ( ( cdtx.SOUND_NOWLOADING != null ) && ( cdtx.SOUND_NOWLOADING.Length > 0 ) ) && File.Exists( cdtx.strフォルダ名 + cdtx.SOUND_NOWLOADING ) )
\r
65 string strNowLoadingサウンドファイルパス = cdtx.strフォルダ名 + cdtx.SOUND_NOWLOADING;
\r
68 this.sd読み込み音 = CDTXMania.Sound管理.tサウンドを生成する( strNowLoadingサウンドファイルパス );
\r
72 Trace.TraceError( "#SOUND_NOWLOADING に指定されたサウンドファイルの読み込みに失敗しました。({0})", strNowLoadingサウンドファイルパス );
\r
76 // #35411 2015.08.19 chnmr0 add
\r
77 // Read ghost data by config
\r
78 // It does not exist a ghost file for 'perfect' actually
\r
79 string [] inst = {"dr", "gt", "bs"};
\r
80 if( CDTXMania.ConfigIni.bIsSwappedGuitarBass )
\r
86 for(int instIndex = 0; instIndex < inst.Length; ++instIndex)
\r
88 bool readAutoGhostCond = false;
\r
89 readAutoGhostCond |= instIndex == 0 ? CDTXMania.ConfigIni.bドラムが全部オートプレイである : false;
\r
90 readAutoGhostCond |= instIndex == 1 ? CDTXMania.ConfigIni.bギターが全部オートプレイである : false;
\r
91 readAutoGhostCond |= instIndex == 2 ? CDTXMania.ConfigIni.bベースが全部オートプレイである : false;
\r
93 CDTXMania.listTargetGhsotLag[instIndex] = null;
\r
94 CDTXMania.listAutoGhostLag[instIndex] = null;
\r
96 if ( readAutoGhostCond )
\r
98 string[] prefix = { "perfect", "lastplay", "hiskill", "hiscore", "online" };
\r
99 int indPrefix = (int)CDTXMania.ConfigIni.eAutoGhost[instIndex];
\r
100 string filename = cdtx.strフォルダ名 + "\\" + cdtx.strファイル名 + "." + prefix[indPrefix] + "." + inst[instIndex] + ".ghost";
\r
101 if ( File.Exists(filename) )
\r
103 CDTXMania.listAutoGhostLag[instIndex] = new List<int>();
\r
104 ReadGhost(filename, CDTXMania.listAutoGhostLag[instIndex]);
\r
108 if( CDTXMania.ConfigIni.eTargetGhost[instIndex] != ETargetGhostData.NONE )
\r
110 string[] prefix = { "none", "perfect", "lastplay", "hiskill", "hiscore", "online" };
\r
111 int indPrefix = (int)CDTXMania.ConfigIni.eTargetGhost[instIndex];
\r
112 string filename = cdtx.strフォルダ名 + "\\" + cdtx.strファイル名 + "." + prefix[indPrefix] + "." + inst[instIndex] + ".ghost";
\r
113 if (File.Exists(filename))
\r
115 CDTXMania.listTargetGhsotLag[instIndex] = new List<int>();
\r
116 ReadGhost(filename, CDTXMania.listTargetGhsotLag[instIndex]);
\r
118 else if( CDTXMania.ConfigIni.eTargetGhost[instIndex] == ETargetGhostData.PERFECT )
\r
121 CDTXMania.listTargetGhsotLag[instIndex] = new List<int>();
\r
131 Trace.TraceInformation( "曲読み込みステージの活性化を完了しました。" );
\r
136 private void ReadGhost(string filename, List<int> list) // #35411 2015.08.19 chnmr0 add
\r
138 if (File.Exists(filename))
\r
140 using (FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read))
\r
142 using (BinaryReader br = new BinaryReader(fs))
\r
146 int cnt = br.ReadInt32();
\r
147 for (int i = 0; i < cnt; ++i)
\r
149 short lag = br.ReadInt16();
\r
153 catch( EndOfStreamException )
\r
155 Trace.TraceInformation("ゴーストデータは正しく読み込まれませんでした。");
\r
163 public override void On非活性化()
\r
165 Trace.TraceInformation( "曲読み込みステージを非活性化します。" );
\r
169 if( this.ftタイトル表示用フォント != null )
\r
171 this.ftタイトル表示用フォント.Dispose();
\r
172 this.ftタイトル表示用フォント = null;
\r
178 Trace.TraceInformation( "曲読み込みステージの非活性化を完了しました。" );
\r
182 public override void OnManagedリソースの作成()
\r
184 if( !base.b活性化してない )
\r
186 this.tx音符 = CDTXMania.tテクスチャの生成( CSkin.Path( @"Graphics\\ScreenNowLoading onpu.png" ), false );
\r
187 this.tx背景 = CDTXMania.tテクスチャの生成( this.strSTAGEFILE, false );
\r
189 if ( !this.b音符を表示する && this.tx背景 != null )
\r
191 this.tx背景.vc拡大縮小倍率 = new Vector3( Scale.X, Scale.Y, 1f ); // とりあえずFullHD化
\r
193 if ( this.b音符を表示する )
\r
197 if( ( this.str曲タイトル != null ) && ( this.str曲タイトル.Length > 0 ) )
\r
199 Bitmap image = new Bitmap( 1, 1 );
\r
200 Graphics graphics = Graphics.FromImage( image );
\r
201 SizeF ef = graphics.MeasureString( this.str曲タイトル, this.ftタイトル表示用フォント );
\r
202 Size size = new Size( (int) Math.Ceiling( (double) ef.Width ), (int) Math.Ceiling( (double) ef.Height ) );
\r
203 graphics.Dispose();
\r
205 image = new Bitmap( size.Width, size.Height );
\r
206 graphics = Graphics.FromImage( image );
\r
207 graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;
\r
208 graphics.DrawString( this.str曲タイトル, this.ftタイトル表示用フォント, Brushes.White, ( float ) 0f, ( float ) 0f );
\r
209 graphics.Dispose();
\r
210 this.txタイトル = new CTexture( CDTXMania.app.Device, image, CDTXMania.TextureFormat );
\r
211 this.txタイトル.vc拡大縮小倍率 = new Vector3( 0.5f, 0.5f, 1f );
\r
213 this.n音符の表示位置X = ( ( SampleFramework.GameWindowSize.Width - ( (int) ( size.Width * this.txタイトル.vc拡大縮小倍率.X ) ) ) - ( ( this.tx音符 != null ) ? this.tx音符.sz画像サイズ.Width : 0 ) ) - 2;
\r
217 this.txタイトル = null;
\r
218 this.n音符の表示位置X = ( SampleFramework.GameWindowSize.Width - ( ( this.tx音符 != null ) ? this.tx音符.sz画像サイズ.Width : 0 ) ) - 2;
\r
221 catch( CTextureCreateFailedException )
\r
223 Trace.TraceError( "テクスチャの生成に失敗しました。({0})", new object[] { this.strSTAGEFILE } );
\r
224 this.txタイトル = null;
\r
230 this.txタイトル = null;
\r
232 base.OnManagedリソースの作成();
\r
235 public override void OnManagedリソースの解放()
\r
237 if( !base.b活性化してない )
\r
239 CDTXMania.tテクスチャの解放( ref this.tx背景 );
\r
240 CDTXMania.tテクスチャの解放( ref this.tx音符 );
\r
241 CDTXMania.tテクスチャの解放( ref this.txタイトル );
\r
242 base.OnManagedリソースの解放();
\r
245 public override int On進行描画()
\r
249 if( base.b活性化してない )
\r
252 #region [ 初めての進行描画 ]
\r
253 //-----------------------------
\r
254 if( base.b初めての進行描画 )
\r
256 Cスコア cスコア1 = CDTXMania.stage選曲.r確定されたスコア;
\r
257 if( this.sd読み込み音 != null )
\r
259 if( CDTXMania.Skin.sound曲読込開始音.b排他 && ( CSkin.Cシステムサウンド.r最後に再生した排他システムサウンド != null ) )
\r
261 CSkin.Cシステムサウンド.r最後に再生した排他システムサウンド.t停止する();
\r
263 this.sd読み込み音.t再生を開始する();
\r
264 this.nBGM再生開始時刻 = CSound管理.rc演奏用タイマ.n現在時刻;
\r
265 this.nBGMの総再生時間ms = this.sd読み込み音.n総演奏時間ms;
\r
269 CDTXMania.Skin.sound曲読込開始音.t再生する();
\r
270 this.nBGM再生開始時刻 = CSound管理.rc演奏用タイマ.n現在時刻;
\r
271 this.nBGMの総再生時間ms = CDTXMania.Skin.sound曲読込開始音.n長さ_現在のサウンド;
\r
273 // this.actFI.tフェードイン開始(); // #27787 2012.3.10 yyagi 曲読み込み画面のフェードインの省略
\r
274 base.eフェーズID = CStage.Eフェーズ.共通_フェードイン;
\r
275 base.b初めての進行描画 = false;
\r
278 bitmapFilename = new Bitmap( SampleFramework.GameWindowSize.Width, (int)(fFontSizeFilename * Scale.X) );
\r
279 graphicsFilename = Graphics.FromImage( bitmapFilename );
\r
280 graphicsFilename.TextRenderingHint = TextRenderingHint.AntiAlias;
\r
281 ftFilename = new Font( "MS PGothic", fFontSizeFilename * Scale.X, FontStyle.Bold, GraphicsUnit.Pixel );
\r
283 //-----------------------------
\r
286 #region [ ESC押下時は選曲画面に戻る ]
\r
289 if ( this.sd読み込み音 != null )
\r
291 this.sd読み込み音.tサウンドを停止する();
\r
292 this.sd読み込み音.t解放する();
\r
294 return (int) E曲読込画面の戻り値.読込中止;
\r
298 #region [ 背景、音符+タイトル表示 ]
\r
299 //-----------------------------
\r
300 if( this.tx背景 != null )
\r
301 this.tx背景.t2D描画( CDTXMania.app.Device, 0, 0 );
\r
303 if ( this.b音符を表示する )
\r
305 int y = SampleFramework.GameWindowSize.Height - (int) ( fFontSizeTitle * Scale.Y ) + (int) ( 3 * Scale.X ); // 480 - 45;
\r
306 if ( this.tx音符 != null )
\r
309 CDTXMania.app.Device,
\r
314 if ( this.txタイトル != null )
\r
317 CDTXMania.app.Device,
\r
318 (int) ( SampleFramework.GameWindowSize.Width - ( this.txタイトル.sz画像サイズ.Width * this.txタイトル.vc拡大縮小倍率.X ) ),
\r
323 //-----------------------------
\r
326 switch( base.eフェーズID )
\r
328 case CStage.Eフェーズ.共通_フェードイン:
\r
329 // if( this.actFI.On進行描画() != 0 ) // #27787 2012.3.10 yyagi 曲読み込み画面のフェードインの省略
\r
330 // 必ず一度「CStaeg.Eフェーズ.共通_フェードイン」フェーズを経由させること。
\r
331 // さもないと、曲読み込みが完了するまで、曲読み込み画面が描画されない。
\r
332 base.eフェーズID = CStage.Eフェーズ.NOWLOADING_DTXファイルを読み込む;
\r
333 return (int) E曲読込画面の戻り値.継続;
\r
335 case CStage.Eフェーズ.NOWLOADING_DTXファイルを読み込む:
\r
337 timeBeginLoad = DateTime.Now;
\r
340 if( !CDTXMania.bコンパクトモード )
\r
341 str = CDTXMania.stage選曲.r確定されたスコア.ファイル情報.ファイルの絶対パス;
\r
343 str = CDTXMania.strコンパクトモードファイル;
\r
345 CScoreIni ini = new CScoreIni( str + ".score.ini" );
\r
346 ini.t全演奏記録セクションの整合性をチェックし不整合があればリセットする();
\r
348 if( ( CDTXMania.DTX != null ) && CDTXMania.DTX.b活性化してる )
\r
349 CDTXMania.DTX.On非活性化();
\r
351 CDTXMania.DTX = new CDTX( str, false, ( (double) CDTXMania.ConfigIni.n演奏速度 ) / 20.0, ini.stファイル.BGMAdjust );
\r
352 Trace.TraceInformation( "----曲情報-----------------" );
\r
353 Trace.TraceInformation( "TITLE: {0}", CDTXMania.DTX.TITLE );
\r
354 Trace.TraceInformation( "FILE: {0}", CDTXMania.DTX.strファイル名の絶対パス );
\r
355 Trace.TraceInformation( "---------------------------" );
\r
357 // #35411 2015.08.19 chnmr0 add ゴースト機能のためList chip 読み込み後楽器パート出現順インデックスを割り振る
\r
358 int[] curCount = new int[(int)E楽器パート.UNKNOWN];
\r
359 for (int i = 0; i < curCount.Length; ++i)
\r
363 foreach (CChip chip in CDTXMania.DTX.listChip)
\r
365 if (chip.e楽器パート != E楽器パート.UNKNOWN)
\r
367 chip.n楽器パートでの出現順 = curCount[(int)chip.e楽器パート]++;
\r
371 span = (TimeSpan) ( DateTime.Now - timeBeginLoad );
\r
372 Trace.TraceInformation( "DTX読込所要時間: {0}", span.ToString() );
\r
374 if ( CDTXMania.bコンパクトモード )
\r
375 CDTXMania.DTX.MIDIレベル = 1;
\r
377 CDTXMania.DTX.MIDIレベル = ( CDTXMania.stage選曲.r確定された曲.eノード種別 == C曲リストノード.Eノード種別.SCORE_MIDI ) ? CDTXMania.stage選曲.n現在選択中の曲の難易度 : 0;
\r
379 base.eフェーズID = CStage.Eフェーズ.NOWLOADING_WAVファイルを読み込む;
\r
380 timeBeginLoadWAV = DateTime.Now;
\r
381 return (int) E曲読込画面の戻り値.継続;
\r
384 case CStage.Eフェーズ.NOWLOADING_WAVファイルを読み込む:
\r
386 if ( nWAVcount == 1 && CDTXMania.DTX.listWAV.Count > 0 ) // #28934 2012.7.7 yyagi (added checking Count)
\r
388 ShowProgressByFilename( CDTXMania.DTX.listWAV[ nWAVcount ].strファイル名 );
\r
390 int looptime = ( CDTXMania.ConfigIni.b垂直帰線待ちを行う ) ? 3 : 1;
\r
391 if ( CDTXMania.ConfigIni.b曲読み込みを高速化する ) looptime = CDTXMania.DTX.listWAV.Count / 20 + 1; // #xxxxx ikanick 2016.2.21 ロード高速化 垂直同期の有無に関わらず、1フレームに5%ぐらいずつロードする
\r
392 for ( int i = 0; i < looptime && nWAVcount <= CDTXMania.DTX.listWAV.Count; i++ )
\r
394 if ( CDTXMania.DTX.listWAV[ nWAVcount ].listこのWAVを使用するチャンネル番号の集合.Count > 0 ) // #28674 2012.5.8 yyagi
\r
396 CDTXMania.DTX.tWAVの読み込み( CDTXMania.DTX.listWAV[ nWAVcount ] );
\r
400 if ( nWAVcount <= CDTXMania.DTX.listWAV.Count )
\r
402 double f進捗率 = nWAVcount * 100.0f / CDTXMania.DTX.listWAV.Count;
\r
403 ShowProgressByFilename( "" + f進捗率.ToString("0.0") + "% " + nWAVcount + "/" + CDTXMania.DTX.listWAV.Count + " " + CDTXMania.DTX.listWAV[ nWAVcount ].strファイル名 );
\r
405 if ( nWAVcount > CDTXMania.DTX.listWAV.Count )
\r
407 TimeSpan span = ( TimeSpan ) ( DateTime.Now - timeBeginLoadWAV );
\r
408 Trace.TraceInformation( "WAV読込所要時間({0,4}): {1}", CDTXMania.DTX.listWAV.Count, span.ToString() );
\r
409 timeBeginLoadWAV = DateTime.Now;
\r
411 if ( CDTXMania.ConfigIni.bDynamicBassMixerManagement )
\r
413 CDTXMania.DTX.PlanToAddMixerChannel();
\r
415 CDTXMania.DTX.tギターとベースのランダム化( E楽器パート.GUITAR, CDTXMania.ConfigIni.eRandom.Guitar );
\r
416 CDTXMania.DTX.tギターとベースのランダム化( E楽器パート.BASS, CDTXMania.ConfigIni.eRandom.Bass );
\r
418 if ( CDTXMania.ConfigIni.bギタレボモード )
\r
419 CDTXMania.stage演奏ギター画面.On活性化();
\r
421 CDTXMania.stage演奏ドラム画面.On活性化();
\r
423 span = (TimeSpan) ( DateTime.Now - timeBeginLoadWAV );
\r
424 Trace.TraceInformation( "WAV/譜面後処理時間({0,4}): {1}", ( CDTXMania.DTX.listBMP.Count + CDTXMania.DTX.listBMPTEX.Count + CDTXMania.DTX.listAVI.Count ), span.ToString() );
\r
426 base.eフェーズID = CStage.Eフェーズ.NOWLOADING_BMPファイルを読み込む;
\r
428 return (int) E曲読込画面の戻り値.継続;
\r
431 case CStage.Eフェーズ.NOWLOADING_BMPファイルを読み込む:
\r
434 DateTime timeBeginLoadBMPAVI = DateTime.Now;
\r
435 if ( CDTXMania.ConfigIni.bBGA有効 )
\r
436 CDTXMania.DTX.tBMP_BMPTEXの読み込み();
\r
438 if ( CDTXMania.ConfigIni.bAVI有効 )
\r
439 CDTXMania.DTX.tAVIの読み込み();
\r
440 span = ( TimeSpan ) ( DateTime.Now - timeBeginLoadBMPAVI );
\r
441 Trace.TraceInformation( "BMP/AVI読込所要時間({0,4}): {1}", ( CDTXMania.DTX.listBMP.Count + CDTXMania.DTX.listBMPTEX.Count + CDTXMania.DTX.listAVI.Count ), span.ToString() );
\r
443 span = ( TimeSpan ) ( DateTime.Now - timeBeginLoad );
\r
444 Trace.TraceInformation( "総読込時間: {0}", span.ToString() );
\r
446 if ( bitmapFilename != null )
\r
448 bitmapFilename.Dispose();
\r
449 bitmapFilename = null;
\r
451 if ( graphicsFilename != null )
\r
453 graphicsFilename.Dispose();
\r
454 graphicsFilename = null;
\r
456 if ( ftFilename != null )
\r
458 ftFilename.Dispose();
\r
461 CDTXMania.Timer.t更新();
\r
462 base.eフェーズID = CStage.Eフェーズ.NOWLOADING_システムサウンドBGMの完了を待つ;
\r
463 return (int) E曲読込画面の戻り値.継続;
\r
466 case CStage.Eフェーズ.NOWLOADING_システムサウンドBGMの完了を待つ:
\r
468 long nCurrentTime = CDTXMania.Timer.n現在時刻;
\r
469 if( nCurrentTime < this.nBGM再生開始時刻 )
\r
470 this.nBGM再生開始時刻 = nCurrentTime;
\r
472 // if ( ( nCurrentTime - this.nBGM再生開始時刻 ) > ( this.nBGMの総再生時間ms - 1000 ) )
\r
473 if ( ( nCurrentTime - this.nBGM再生開始時刻 ) >= ( this.nBGMの総再生時間ms ) ) // #27787 2012.3.10 yyagi 1000ms == フェードイン分の時間
\r
475 if ( !CDTXMania.DTXVmode.Enabled )
\r
477 this.actFO.tフェードアウト開始();
\r
479 base.eフェーズID = CStage.Eフェーズ.共通_フェードアウト;
\r
481 return (int) E曲読込画面の戻り値.継続;
\r
484 case CStage.Eフェーズ.共通_フェードアウト:
\r
485 if ( this.actFO.On進行描画() == 0 && !CDTXMania.DTXVmode.Enabled ) // DTXVモード時は、フェードアウト省略
\r
488 if ( txFilename != null )
\r
490 txFilename.Dispose();
\r
492 if ( this.sd読み込み音 != null )
\r
494 this.sd読み込み音.t解放する();
\r
496 return (int) E曲読込画面の戻り値.読込完了;
\r
498 return (int) E曲読込画面の戻り値.継続;
\r
504 /// <returns></returns>
\r
505 protected bool tキー入力()
\r
507 IInputDevice keyboard = CDTXMania.Input管理.Keyboard;
\r
508 if ( keyboard.bキーが押された( (int) SlimDX.DirectInput.Key.Escape ) ) // escape (exit)
\r
516 private void ShowProgressByFilename(string strファイル名と進捗 )
\r
518 if ( graphicsFilename != null && ftFilename != null )
\r
520 graphicsFilename.Clear( Color.Transparent );
\r
521 graphicsFilename.DrawString( strファイル名と進捗, ftFilename, Brushes.White, new RectangleF( 0, 0, SampleFramework.GameWindowSize.Width, fFontSizeFilename * Scale.X ) );
\r
522 if ( txFilename != null )
\r
524 txFilename.Dispose();
\r
526 txFilename = new CTexture( CDTXMania.app.Device, bitmapFilename, CDTXMania.TextureFormat );
\r
527 txFilename.vc拡大縮小倍率 = new Vector3( 0.5f, 0.5f, 1f );
\r
529 CDTXMania.app.Device,
\r
531 ( SampleFramework.GameWindowSize.Height - (int) ( txFilename.szテクスチャサイズ.Height * 0.5 ) )
\r
538 #region [ private ]
\r
539 //-----------------
\r
540 // private CActFIFOBlack actFI;
\r
541 private CActFIFOBlack actFO;
\r
542 private bool b音符を表示する;
\r
543 private Font ftタイトル表示用フォント;
\r
544 private long nBGMの総再生時間ms;
\r
545 private long nBGM再生開始時刻;
\r
546 private int n音符の表示位置X;
\r
547 private CSound sd読み込み音;
\r
548 private string strSTAGEFILE;
\r
549 private string str曲タイトル;
\r
550 private CTexture txタイトル;
\r
551 private CTexture tx音符;
\r
552 private CTexture tx背景;
\r
553 private DateTime timeBeginLoad;
\r
554 private DateTime timeBeginLoadWAV;
\r
555 private int nWAVcount;
\r
556 private CTexture txFilename;
\r
557 private Bitmap bitmapFilename;
\r
558 private Graphics graphicsFilename;
\r
559 private Font ftFilename;
\r
560 private const float fFontSizeFilename = 12.0f;
\r
561 private const float fFontSizeTitle = 48;
\r
562 //-----------------
\r