2 using System.Collections.Generic;
3 using System.Diagnostics;
6 using System.Threading;
10 using Color = System.Drawing.Color;
11 using Point = System.Drawing.Point;
12 using Rectangle = System.Drawing.Rectangle;
16 internal class CActConfigList : CActivity
18 STDGBSValue<COptionLabel> ReturnToMenu;
19 STDGBSValue<COptionLabel> KeyAssignMenu;
20 STDGBSValue<COptionLabel> DisplayMenu;
21 STDGBSValue<COptionLabel> EDrumsMenu;
22 COptionLabel SoundMenu;
23 COptionLabel HitRangeMenu;
24 COptionStringList skins;
26 bool b項目リスト側にフォーカスがある;
30 // #33689 2014.6.17 yyagi
31 bool InitialUseOSTimer;
32 bool InitialWASAPIEventDriven;
33 ESoundDeviceTypeForConfig InitialSystemSoundType;
34 int InitialWASAPIBufferSizeMs;
35 int InitialASIODevice;
36 bool InitialForceHighPower;
37 List<COptionBase> list項目リスト;
41 Point[] ptパネルの基本座標 = new Point[]
43 new Point(0x12d, 3), new Point(0x12d, 0x35), new Point(0x12d, 0x67),
44 new Point(0x12d, 0x99), new Point(0x114, 0xcb), new Point(0x12d, 0xfd),
45 new Point(0x12d, 0x12f), new Point(0x12d, 0x161), new Point(0x12d, 0x193),
46 new Point(0x12d, 0x1c5)
48 CTextureAf txその他項目行パネル;
50 CTextureAf tx通常項目行パネル;
51 // #28195 2012.5.2 yyagi
52 CTexture txSkinSample;
53 string[] skinSubFolders;
56 CPrivateFastFont prvFont;
57 private struct stMenuItemRight
59 public CTexture txMenuItemRight;
61 public string strParam;
62 public CTexture txParam;
63 public CTexture txParamColored;
65 stMenuItemRight[] listMenu;
68 /// #32059 2013.9.17 yyagi
70 public bool bIsFocusingParameter
78 public bool b現在選択されている項目はReturnToMenuである
82 COptionBase sel = this.list項目リスト[this.n現在の選択項目];
84 for (EPart i = EPart.Drums; i <= EPart.System; ++i)
86 if (sel == ReturnToMenu[i])
95 public bool b楽器またはシステム用メニューである
99 return eメニュー種別 == Eメニュー種別.Bass || eメニュー種別 == Eメニュー種別.Drums || eメニュー種別 == Eメニュー種別.Guitar || eメニュー種別 == Eメニュー種別.System;
103 public COptionBase ib現在の選択項目
107 return this.list項目リスト[this.n現在の選択項目];
118 if (this.b要素値にフォーカス中)
120 // #32059 2013.9.17 add yyagi
121 this.b要素値にフォーカス中 = false;
124 if (this.eメニュー種別 == Eメニュー種別.KeyAssignSystem)
126 t項目リストの設定(Eメニュー種別.System);
128 else if (this.eメニュー種別 == Eメニュー種別.KeyAssignDrums)
130 t項目リストの設定(Eメニュー種別.Drums);
132 else if (this.eメニュー種別 == Eメニュー種別.KeyAssignGuitar)
134 t項目リストの設定(Eメニュー種別.Guitar);
136 else if (this.eメニュー種別 == Eメニュー種別.KeyAssignBass)
138 t項目リストの設定(Eメニュー種別.Bass);
140 if (this.eメニュー種別 == Eメニュー種別.DisplaySystem)
142 t項目リストの設定(Eメニュー種別.System);
144 else if (this.eメニュー種別 == Eメニュー種別.DisplayDrums)
146 t項目リストの設定(Eメニュー種別.Drums);
148 else if (this.eメニュー種別 == Eメニュー種別.DisplayGuitar)
150 t項目リストの設定(Eメニュー種別.Guitar);
152 else if (this.eメニュー種別 == Eメニュー種別.DisplayBass)
154 t項目リストの設定(Eメニュー種別.Bass);
156 else if (this.eメニュー種別 == Eメニュー種別.EDrumsSettings)
158 t項目リストの設定(Eメニュー種別.Drums);
160 else if (this.eメニュー種別 == Eメニュー種別.HitRangeSettings)
162 t項目リストの設定(Eメニュー種別.System);
164 else if ( this.eメニュー種別 == Eメニュー種別.SoundSettings)
166 t項目リストの設定(Eメニュー種別.System);
170 public bool tEnter押下()
173 CDTXMania.Instance.Skin.sound決定音.t再生する();
175 if (this.b要素値にフォーカス中)
177 this.b要素値にフォーカス中 = false;
179 else if (this.list項目リスト[this.n現在の選択項目] is COptionInteger)
181 this.b要素値にフォーカス中 = true;
183 else if (this.list項目リスト[this.n現在の選択項目] is IOptionList || this.list項目リスト[this.n現在の選択項目] is COptionBool)
185 this.list項目リスト[this.n現在の選択項目].OnNext();
188 // #27029 2012.1.5 from
190 CDTXMania.Instance.ConfigIni.eBDGroup == EBDGroup.Group &&
192 (this.list項目リスト[this.n現在の選択項目] == CDTXMania.Instance.ConfigIni.eHHGroup ||
193 this.list項目リスト[this.n現在の選択項目] == CDTXMania.Instance.ConfigIni.eHitSoundPriorityHH)))
199 if (b現在選択されている項目はReturnToMenuである && b楽器またはシステム用メニューである)
203 this.list項目リスト[this.n現在の選択項目].OnEnter();
208 private void tGenerateSkinSample()
210 string path = skinSubFolders[skins.Index];
211 path = System.IO.Path.Combine(path, @"Graphics\ScreenTitle background.jpg");
212 using (Bitmap bmSrc = new Bitmap(path))
214 using (Bitmap bmDest = new Bitmap(bmSrc.Width / 4, bmSrc.Height / 4))
216 using (Graphics g = Graphics.FromImage(bmDest))
218 g.InterpolationMode = System.Drawing.Drawing2D.InterpolationMode.HighQualityBicubic;
219 g.DrawImage(bmSrc, new Rectangle(0, 0, bmSrc.Width / 4, bmSrc.Height / 4),
220 0, 0, bmSrc.Width, bmSrc.Height, GraphicsUnit.Pixel);
221 TextureFactory.tテクスチャの解放(ref txSkinSample);
222 txSkinSample = TextureFactory.tテクスチャの生成(bmDest, false);
228 // #region [ 項目リストの設定 ( Exit, KeyAssignSystem/Drums/Guitar/Bass) ]
229 public void t項目リストの設定_Exit()
231 CDTXMania.Instance.SaveConfig();
232 this.eメニュー種別 = Eメニュー種別.Unknown;
235 public void t項目リストの設定(Eメニュー種別 eMenu)
237 this.list項目リスト.Clear();
239 Func<EPad, string, string, COptionString> PadNotifier = (pad, lbl, expl) =>
241 COptionString opt = new COptionString("");
242 opt.Initialize(lbl, expl);
243 opt.OnEnterDelegate = () =>
245 CDTXMania.Instance.stageコンフィグ.tパッド選択通知(pad);
250 CResources cr = CDTXMania.Instance.Resources;
252 if (eMenu == Eメニュー種別.DisplaySystem)
254 list項目リスト.Add(ReturnToMenu.System);
255 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bFullScreen);
256 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bBGA);
257 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAVI);
258 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bFullAVI);
259 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bVSyncWait);
260 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdDebugX.Both);
261 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdDebugY.Both);
262 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdDebugX.DrOnly);
263 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdDebugY.DrOnly);
264 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdDebugX.GBOnly);
265 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdDebugY.GBOnly);
266 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdMovieX.Both);
267 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdMovieY.Both);
268 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdMovieX.DrOnly);
269 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdMovieY.DrOnly);
270 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdMovieX.GBOnly);
271 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdMovieY.GBOnly);
272 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nBGAlpha);
273 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nShowLagType);
274 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eJudgePriority);
275 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bDebugInfo);
277 else if (eMenu == Eメニュー種別.DisplayDrums)
279 list項目リスト.Add(ReturnToMenu.Drums);
280 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdInstX.Drums.Both);
281 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdInstX.Drums.DrOnly);
282 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdComboX.Drums.Both);
283 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdComboX.Drums.DrOnly);
284 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdJudgeLineY.Drums);
285 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdJudgeY.Drums);
286 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.LC);
287 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.HH);
288 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.SD);
289 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.BD);
290 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.HT);
291 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.LT);
292 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.FT);
293 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.CY);
294 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eSudHidInv.Drums);
295 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bReverse.Drums);
296 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nMinComboDisp.Drums);
297 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bGraph.Drums);
299 else if (eMenu == Eメニュー種別.DisplayGuitar)
301 list項目リスト.Add(ReturnToMenu.Guitar);
302 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdInstX.Guitar.Both);
303 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdInstX.Guitar.GBOnly);
304 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdComboX.Guitar.Both);
305 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdComboX.Guitar.GBOnly);
306 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdJudgeLineY.Guitar);
307 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdJudgeY.Guitar);
308 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.GtR);
309 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.GtG);
310 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.GtB);
311 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eSudHidInv.Guitar);
312 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bReverse.Guitar);
313 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nMinComboDisp.Guitar);
314 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bGraph.Guitar);
316 else if (eMenu == Eメニュー種別.DisplayBass)
318 list項目リスト.Add(ReturnToMenu.Bass);
319 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdInstX.Bass.Both);
320 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdInstX.Bass.GBOnly);
321 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdComboX.Bass.Both);
322 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdComboX.Bass.GBOnly);
323 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdJudgeLineY.Bass);
324 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdJudgeY.Bass);
325 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.BsR);
326 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.BsG);
327 list項目リスト.Add(CDTXMania.Instance.ConfigIni.cdLaneOrder.BsB);
328 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eSudHidInv.Bass);
329 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bReverse.Bass);
330 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nMinComboDisp.Bass);
331 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bGraph.Bass);
333 else if (eMenu == Eメニュー種別.EDrumsSettings)
335 list項目リスト.Add(ReturnToMenu.Drums);
336 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nVelocityMin.LC);
337 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nVelocityMin.HH);
338 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nVelocityMin.SD);
339 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nVelocityMin.BD);
340 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nVelocityMin.HT);
341 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nVelocityMin.LT);
342 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nVelocityMin.FT);
343 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nVelocityMin.CY);
344 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nVelocityMin.RD);
346 else if (eMenu == Eメニュー種別.HitRangeSettings)
348 list項目リスト.Add(ReturnToMenu.System);
349 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nHitRange.Perfect);
350 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nHitRange.Great);
351 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nHitRange.Good);
352 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nHitRange.Poor);
354 else if (eMenu == Eメニュー種別.KeyAssignSystem)
356 list項目リスト.Add(ReturnToMenu.System);
357 list項目リスト.Add(PadNotifier(EPad.Capture, cr.Label("strCfgKeyAssignCapture"), cr.Explanation("strCfgKeyAssignCapture") ));
359 else if (eMenu == Eメニュー種別.KeyAssignDrums)
361 list項目リスト.Add(ReturnToMenu.Drums);
362 list項目リスト.Add(PadNotifier(EPad.LC, cr.Label("strCfgKeyAssignLC"), cr.Explanation("strCfgKeyAssignLC") ));
363 list項目リスト.Add(PadNotifier(EPad.HH, cr.Label("strCfgKeyAssignHH"), cr.Explanation("strCfgKeyAssignHH") ));
364 list項目リスト.Add(PadNotifier(EPad.HHO,cr.Label("strCfgKeyAssignHHO"), cr.Explanation("strCfgKeyAssignHHO") ));
365 list項目リスト.Add(PadNotifier(EPad.SD, cr.Label("strCfgKeyAssignSD"), cr.Explanation("strCfgKeyAssignSD") ));
366 list項目リスト.Add(PadNotifier(EPad.BD, cr.Label("strCfgKeyAssignBD"), cr.Explanation("strCfgKeyAssignBD") ));
367 list項目リスト.Add(PadNotifier(EPad.HT, cr.Label("strCfgKeyAssignHT"), cr.Explanation("strCfgKeyAssignHT") ));
368 list項目リスト.Add(PadNotifier(EPad.LT, cr.Label("strCfgKeyAssignLT"), cr.Explanation("strCfgKeyAssignLT") ));
369 list項目リスト.Add(PadNotifier(EPad.FT, cr.Label("strCfgKeyAssignFT"), cr.Explanation("strCfgKeyAssignFT") ));
370 list項目リスト.Add(PadNotifier(EPad.CY, cr.Label("strCfgKeyAssignCY"), cr.Explanation("strCfgKeyAssignCY") ));
371 list項目リスト.Add(PadNotifier(EPad.RD, cr.Label("strCfgKeyAssignRD"), cr.Explanation("strCfgKeyAssignRD") ));
372 list項目リスト.Add(PadNotifier(EPad.HP, cr.Label("strCfgKeyAssignHP"), cr.Explanation("strCfgKeyAssignHP") ));
373 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eHHGroup);
374 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eFTGroup);
375 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eCYGroup);
376 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eBDGroup);
377 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bCymbalFree);
378 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nInputAdjustTimeMs.Drums);
380 else if (eMenu == Eメニュー種別.KeyAssignGuitar)
382 list項目リスト.Add(ReturnToMenu.Guitar);
383 list項目リスト.Add(PadNotifier(EPad.GtR, cr.Label("strCfgKeyAssignGtR"), cr.Explanation("strCfgKeyAssignGtR") ));
384 list項目リスト.Add(PadNotifier(EPad.GtG, cr.Label("strCfgKeyAssignGtG"), cr.Explanation("strCfgKeyAssignGtG") ));
385 list項目リスト.Add(PadNotifier(EPad.GtB, cr.Label("strCfgKeyAssignGtB"), cr.Explanation("strCfgKeyAssignGtB") ));
386 list項目リスト.Add(PadNotifier(EPad.GtPick, cr.Label("strCfgKeyAssignGtPick"), cr.Explanation("strCfgKeyAssignGtPick") ));
387 list項目リスト.Add(PadNotifier(EPad.GtWail, cr.Label("strCfgKeyAssignGtWailing"), cr.Explanation("strCfgKeyAssignGtWailing") ));
388 list項目リスト.Add(PadNotifier(EPad.GtDecide, cr.Label("strCfgKeyAssignGtDecide"), cr.Explanation("strCfgKeyAssignGtDecide") ));
389 list項目リスト.Add(PadNotifier(EPad.GtCancel, cr.Label("strCfgKeyAssignGtCancel"), cr.Explanation("strCfgKeyAssignGtCancel") ));
390 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nInputAdjustTimeMs.Guitar);
392 else if (eMenu == Eメニュー種別.KeyAssignBass)
394 list項目リスト.Add(ReturnToMenu.Bass);
395 list項目リスト.Add(PadNotifier(EPad.BsR, cr.Label("strCfgKeyAssignBsR"), cr.Explanation("strCfgKeyAssignBsR") ));
396 list項目リスト.Add(PadNotifier(EPad.BsG, cr.Label("strCfgKeyAssignBsG"), cr.Explanation("strCfgKeyAssignBsG") ));
397 list項目リスト.Add(PadNotifier(EPad.BsB, cr.Label("strCfgKeyAssignBsB"), cr.Explanation("strCfgKeyAssignBsB") ));
398 list項目リスト.Add(PadNotifier(EPad.BsPick, cr.Label("strCfgKeyAssignBsPick"), cr.Explanation("strCfgKeyAssignBsPick") ));
399 list項目リスト.Add(PadNotifier(EPad.BsWail, cr.Label("strCfgKeyAssignBsWailing"), cr.Explanation("strCfgKeyAssignBsWailing") ));
400 list項目リスト.Add(PadNotifier(EPad.BsDecide, cr.Label("strCfgKeyAssignBsDecide"), cr.Explanation("strCfgKeyAssignBsDecide") ));
401 list項目リスト.Add(PadNotifier(EPad.BsCancel, cr.Label("strCfgKeyAssignBsCancel"), cr.Explanation("strCfgKeyAssignBsCancel") ));
402 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nInputAdjustTimeMs.Bass);
404 else if (eMenu == Eメニュー種別.System)
406 list項目リスト.Add(ReturnToMenu.System);
407 COptionStringList langlist = new COptionStringList("default");
408 langlist.Initialize( "strCfgLanguage", cr.LanguageDispList );
409 langlist.Index = CDTXMania.Instance.Resources.LanguageCodeIndex;
410 langlist.OnEnterDelegate = () =>
412 int index = langlist.Index;
413 CDTXMania.Instance.ConfigIni.strLanguage.Value = CDTXMania.Instance.Resources.Language = CDTXMania.Instance.Resources.LanguageCodeList[ index ];
416 list項目リスト.Add( langlist );
418 COptionString enumsongs = new COptionString("");
419 enumsongs.Initialize( "strCfgSysEnumSongs" );
420 list項目リスト.Add(enumsongs);
421 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eDark);
422 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nRisky);
423 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eActiveInst);
424 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nPlaySpeed);
425 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nSleepPerFrameMs);
426 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nSleepUnfocusMs);
427 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bForceHighPowerPlan);
428 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bStageFailed);
429 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bRandSubBox);
430 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nPreSoundWeightMs);
431 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nPreImageWeightMs);
432 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eDamageLevel);
433 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bScoreIni);
434 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nChipVolume);
435 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nAutoVolume);
436 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bStoicMode);
437 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bIsAutoResultCapture);
438 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bBufferedInput);
439 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bLog);
440 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bLoadSoundSpeed);
441 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bLoadDTXDetail);// #36177 2016.7.30 ikanick
442 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bUseBoxDefSkin);
443 list項目リスト.Add(skins);
444 list項目リスト.Add(SoundMenu);
445 list項目リスト.Add(DisplayMenu.System);
446 list項目リスト.Add(HitRangeMenu);
447 list項目リスト.Add(KeyAssignMenu.System);
448 enumsongs.OnEnterDelegate = () =>
450 if (CDTXMania.Instance.EnumSongs.IsEnumerating)
452 // Debug.WriteLine( "バックグラウンドでEnumeratingSongs中だったので、一旦中断します。" );
453 CDTXMania.Instance.EnumSongs.Abort();
454 CDTXMania.Instance.actEnumSongs.On非活性化();
457 CDTXMania.Instance.EnumSongs.StartEnumFromDisk();
458 CDTXMania.Instance.EnumSongs.ChangeEnumeratePriority(ThreadPriority.Normal);
459 CDTXMania.Instance.actEnumSongs.bコマンドでの曲データ取得 = true;
460 CDTXMania.Instance.actEnumSongs.On活性化();
463 else if ( eMenu == Eメニュー種別.SoundSettings )
465 list項目リスト.Add( ReturnToMenu.System );
466 list項目リスト.Add( CDTXMania.Instance.ConfigIni.bTimeStretch );
467 list項目リスト.Add( CDTXMania.Instance.ConfigIni.bWaveAdjust );
468 list項目リスト.Add( CDTXMania.Instance.ConfigIni.bBGMPlay );
469 list項目リスト.Add( CDTXMania.Instance.ConfigIni.bAudience );
470 list項目リスト.Add( CDTXMania.Instance.ConfigIni.nChipVolume );
471 list項目リスト.Add( CDTXMania.Instance.ConfigIni.nAutoVolume );
472 list項目リスト.Add( CDTXMania.Instance.ConfigIni.nSoundDeviceType );
473 list項目リスト.Add( CDTXMania.Instance.ConfigIni.nWASAPIBufferSizeMs );
474 list項目リスト.Add( CDTXMania.Instance.ConfigIni.bEventDrivenWASAPI );
475 list項目リスト.Add( CDTXMania.Instance.ConfigIni.strASIODevice );
476 list項目リスト.Add( CDTXMania.Instance.ConfigIni.bUseOSTimer );
477 list項目リスト.Add( CDTXMania.Instance.ConfigIni.nMasterVolume );
478 list項目リスト.Add( CDTXMania.Instance.ConfigIni.nPolyphonicSounds );
479 list項目リスト.Add( CDTXMania.Instance.ConfigIni.eClickType );
480 list項目リスト.Add( CDTXMania.Instance.ConfigIni.nClickHighVolume );
481 list項目リスト.Add( CDTXMania.Instance.ConfigIni.nClickLowVolume );
483 else if ( eMenu == Eメニュー種別.Drums )
485 list項目リスト.Add(ReturnToMenu.Drums);
486 COptionEnum<EThreeState> AllAuto = new COptionEnum<EThreeState>(EThreeState.X);
487 AllAuto.Initialize( "strCfgDrAllAuto", typeof(EThreeState));
488 AllAuto.OnEnterDelegate = () =>
490 if ( AllAuto.Value == EThreeState.X )
494 CDTXMania.Instance.ConfigIni.bAutoPlay.Set( EPart.Drums, AllAuto );
496 list項目リスト.Add(AllAuto);
497 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.LC);
498 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.HH);
499 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.HHO);
500 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.SD);
501 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.BD);
502 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.HT);
503 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.LT);
504 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.FT);
505 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.CY);
506 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.RD);
507 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nScrollSpeed.Drums);
508 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eHitSoundPriorityHH);
509 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eHitSoundPriorityFT);
510 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eHitSoundPriorityCY);
511 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bTight);
512 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bFillin);
513 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bDrumsHitSound);
514 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bEmphasizePlaySound.Drums);
515 list項目リスト.Add(DisplayMenu.Drums);
516 list項目リスト.Add(EDrumsMenu.Drums);
517 list項目リスト.Add(KeyAssignMenu.Drums);
519 else if (eMenu == Eメニュー種別.Guitar)
521 list項目リスト.Add(ReturnToMenu.Guitar);
522 COptionEnum<EThreeState> AllAuto = new COptionEnum<EThreeState>(EThreeState.X);
523 AllAuto.Initialize( "strCfgDrAllAuto", typeof(EThreeState));
524 AllAuto.OnEnterDelegate = () =>
526 if ( AllAuto.Value == EThreeState.X )
530 CDTXMania.Instance.ConfigIni.bAutoPlay.Set( EPart.Guitar, AllAuto );
532 list項目リスト.Add(AllAuto);
533 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.GtR);
534 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.GtG);
535 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.GtB);
536 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.GtPick);
537 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.GtWail);
538 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nScrollSpeed.Guitar);
539 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eRandom.Guitar);
540 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bLight.Guitar);
541 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bEmphasizePlaySound.Guitar);
542 list項目リスト.Add(DisplayMenu.Guitar);
543 list項目リスト.Add(KeyAssignMenu.Guitar);
545 else if (eMenu == Eメニュー種別.Bass)
547 list項目リスト.Add(ReturnToMenu.Bass);
548 COptionEnum<EThreeState> AllAuto = new COptionEnum<EThreeState>(EThreeState.X);
549 AllAuto.Initialize( "strCfgDrAllAuto", typeof(EThreeState));
550 AllAuto.OnEnterDelegate = () =>
552 if ( AllAuto.Value == EThreeState.X )
556 CDTXMania.Instance.ConfigIni.bAutoPlay.Set( EPart.Bass, AllAuto );
558 list項目リスト.Add(AllAuto);
559 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.BsR);
560 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.BsG);
561 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.BsB);
562 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.BsPick);
563 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bAutoPlay.BsWail);
564 list項目リスト.Add(CDTXMania.Instance.ConfigIni.nScrollSpeed.Bass);
565 list項目リスト.Add(CDTXMania.Instance.ConfigIni.eRandom.Bass);
566 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bLight.Bass);
567 list項目リスト.Add(CDTXMania.Instance.ConfigIni.bEmphasizePlaySound.Bass);
568 list項目リスト.Add(DisplayMenu.Bass);
569 list項目リスト.Add(KeyAssignMenu.Bass);
578 CDTXMania.Instance.Skin.soundカーソル移動音.t再生する();
581 list項目リスト[n現在の選択項目].OnPrevious();
586 n目標のスクロールカウンタ += 100;
590 public void OnPrevious()
592 CDTXMania.Instance.Skin.soundカーソル移動音.t再生する();
595 list項目リスト[n現在の選択項目].OnNext();
600 n目標のスクロールカウンタ -= 100;
604 private void t要素値を上下に変更中の処理()
606 if (this.list項目リスト[this.n現在の選択項目] == CDTXMania.Instance.ConfigIni.nMasterVolume)
608 // #33700 2014.4.26 yyagi
609 CDTXMania.Instance.Sound管理.nMasterVolume = CDTXMania.Instance.ConfigIni.nMasterVolume;
613 public override void On活性化()
617 this.list項目リスト = new List<COptionBase>();
618 this.eメニュー種別 = Eメニュー種別.Unknown;
619 this.prvFont = new CPrivateFastFont(CSkin.Path(@"Graphics\fonts\mplus-1p-heavy.ttf"), (int)(18 * Scale.Y));
620 this.b要素値にフォーカス中 = false;
621 this.n目標のスクロールカウンタ = 0;
622 this.n現在のスクロールカウンタ = 0;
623 this.nスクロール用タイマ値 = -1;
624 this.ct三角矢印アニメ = new CCounter();
627 DisplayMenu = new STDGBSValue<COptionLabel>();
628 KeyAssignMenu = new STDGBSValue<COptionLabel>();
629 EDrumsMenu = new STDGBSValue<COptionLabel>();
630 ReturnToMenu = new STDGBSValue<COptionLabel>();
632 CResources cr = CDTXMania.Instance.Resources;
633 for ( EPart i = EPart.Drums; i <= EPart.System; ++i )
635 DisplayMenu[i] = new COptionLabel( "strCfgDisplayOption" );
636 KeyAssignMenu[i] = new COptionLabel( "strCfgInputOption" );
637 ReturnToMenu[i] = new COptionLabel( "strCfgReturnToMenu" );
640 EDrumsMenu[ EPart.Drums ] = new COptionLabel( "strCfgEDrumsOption" );
641 HitRangeMenu = new COptionLabel( "strCfgHitRangeOption" );
642 SoundMenu = new COptionLabel( "strCfgSoundOption" );
644 DisplayMenu.Drums.OnEnterDelegate = () =>
646 t項目リストの設定(Eメニュー種別.DisplayDrums);
648 DisplayMenu.Guitar.OnEnterDelegate = () =>
650 t項目リストの設定(Eメニュー種別.DisplayGuitar);
652 DisplayMenu.Bass.OnEnterDelegate = () =>
654 t項目リストの設定(Eメニュー種別.DisplayBass);
656 DisplayMenu.System.OnEnterDelegate = () =>
658 t項目リストの設定(Eメニュー種別.DisplaySystem);
660 KeyAssignMenu.Drums.OnEnterDelegate = () =>
662 t項目リストの設定(Eメニュー種別.KeyAssignDrums);
664 KeyAssignMenu.Guitar.OnEnterDelegate = () =>
666 t項目リストの設定(Eメニュー種別.KeyAssignGuitar);
668 KeyAssignMenu.Bass.OnEnterDelegate = () =>
670 t項目リストの設定(Eメニュー種別.KeyAssignBass);
672 KeyAssignMenu.System.OnEnterDelegate = () =>
674 t項目リストの設定(Eメニュー種別.KeyAssignSystem);
677 ReturnToMenu.Drums.OnEnterDelegate = () =>
679 t項目リストの設定(Eメニュー種別.Drums);
681 ReturnToMenu.Guitar.OnEnterDelegate = () =>
683 t項目リストの設定(Eメニュー種別.Guitar);
685 ReturnToMenu.Bass.OnEnterDelegate = () =>
687 t項目リストの設定(Eメニュー種別.Bass);
689 ReturnToMenu.System.OnEnterDelegate = () =>
691 t項目リストの設定(Eメニュー種別.System);
693 EDrumsMenu.Drums.OnEnterDelegate = () =>
695 t項目リストの設定(Eメニュー種別.EDrumsSettings);
697 HitRangeMenu.OnEnterDelegate = () =>
699 t項目リストの設定( Eメニュー種別.HitRangeSettings );
701 SoundMenu.OnEnterDelegate = () =>
703 t項目リストの設定( Eメニュー種別.SoundSettings );
706 #region [ スキン選択肢と、現在選択中のスキン(index)の準備 #28195 2012.5.2 yyagi ]
707 int ns = (CDTXMania.Instance.Skin.strSystemSkinSubfolders == null) ? 0 : CDTXMania.Instance.Skin.strSystemSkinSubfolders.Length;
708 int nb = (CDTXMania.Instance.Skin.strBoxDefSkinSubfolders == null) ? 0 : CDTXMania.Instance.Skin.strBoxDefSkinSubfolders.Length;
710 skinSubFolders = new string[ns + nb];
711 skinInitial = CDTXMania.Instance.Skin.GetCurrentSkinSubfolderFullName(true);
713 for (int i = 0; i < ns; i++)
715 skinSubFolders[i] = CDTXMania.Instance.Skin.strSystemSkinSubfolders[i];
717 for (int i = 0; i < nb; i++)
719 skinSubFolders[ns + i] = CDTXMania.Instance.Skin.strBoxDefSkinSubfolders[i];
721 Array.Sort(skinSubFolders);
722 skinNames = CSkin.GetSkinName(skinSubFolders);
723 initIdx = Array.BinarySearch(skinSubFolders, skinInitial);
728 skins = new COptionStringList(skinNames[initIdx]);
729 skins.Initialize("Skin", Properties.Resources.strCfgSysSkin, skinNames);
731 skins.OnEnterDelegate = () =>
733 CDTXMania.Instance.Skin.SetCurrentSkinSubfolderFullName(skinSubFolders[skins.Index], true);
734 CDTXMania.Instance.ConfigIni.strSystemSkinSubfolderPath.Value = skinSubFolders[skins.Index];
735 tGenerateSkinSample();
739 // CONFIG脱出時にこの値から変更されているようなら
741 this.InitialSystemSoundType = CDTXMania.Instance.ConfigIni.nSoundDeviceType;
742 this.InitialWASAPIBufferSizeMs = CDTXMania.Instance.ConfigIni.nWASAPIBufferSizeMs;
743 this.InitialASIODevice = CDTXMania.Instance.ConfigIni.strASIODevice.Index;
744 this.InitialUseOSTimer = CDTXMania.Instance.ConfigIni.bUseOSTimer;
745 this.InitialWASAPIEventDriven = CDTXMania.Instance.ConfigIni.bEventDrivenWASAPI;
747 this.InitialForceHighPower = CDTXMania.Instance.ConfigIni.bForceHighPowerPlan;
749 // #27795 2012.3.11 yyagi; System設定の中でDrumsの設定を参照しているため、
750 this.t項目リストの設定(Eメニュー種別.Bass);
751 // 活性化の時点でDrumsの設定も入れ込んでおかないと、System設定中に例外発生することがある。
752 this.t項目リストの設定(Eメニュー種別.Guitar);
753 this.t項目リストの設定(Eメニュー種別.Drums);
754 // 順番として、最後にSystemを持ってくること。設定一覧の初期位置がSystemのため。
755 this.t項目リストの設定(Eメニュー種別.System);
761 public override void On非活性化()
765 CDTXMania.Instance.SaveConfig();
766 this.list項目リスト.Clear();
767 this.ct三角矢印アニメ = null;
774 if (CDTXMania.Instance.Skin.GetCurrentSkinSubfolderFullName(true) != this.skinInitial)
776 CDTXMania.Instance.stageChangeSkin.tChangeSkinMain(); // #28195 2012.6.11 yyagi CONFIG脱出時にSkin更新
780 // #24820 2013.1.22 yyagi CONFIGでWASAPI/ASIO/DirectSound関連の設定を変更した場合、サウンドデバイスを再構築する。
781 // #33689 2014.6.17 yyagi CONFIGでSoundTimerTypeの設定を変更した場合も、サウンドデバイスを再構築する。
782 #region [ サウンドデバイス変更 ]
783 if (InitialSystemSoundType != CDTXMania.Instance.ConfigIni.nSoundDeviceType ||
784 InitialWASAPIBufferSizeMs != CDTXMania.Instance.ConfigIni.nWASAPIBufferSizeMs ||
785 InitialASIODevice != CDTXMania.Instance.ConfigIni.strASIODevice.Index ||
786 InitialUseOSTimer != CDTXMania.Instance.ConfigIni.bUseOSTimer ||
787 InitialWASAPIEventDriven != CDTXMania.Instance.ConfigIni.bEventDrivenWASAPI )
789 ESoundDeviceType soundDeviceType;
790 switch (CDTXMania.Instance.ConfigIni.nSoundDeviceType.Value)
792 case ESoundDeviceTypeForConfig.DSound:
793 soundDeviceType = ESoundDeviceType.DirectSound;
795 case ESoundDeviceTypeForConfig.ASIO:
796 soundDeviceType = ESoundDeviceType.ASIO;
798 case ESoundDeviceTypeForConfig.WASAPI_Exclusive:
799 soundDeviceType = ESoundDeviceType.ExclusiveWASAPI;
801 case ESoundDeviceTypeForConfig.WASAPI_Shared:
802 soundDeviceType = ESoundDeviceType.SharedWASAPI;
805 soundDeviceType = ESoundDeviceType.Unknown;
809 CDTXMania.Instance.Sound管理.t初期化(
811 CDTXMania.Instance.ConfigIni.nWASAPIBufferSizeMs,
812 CDTXMania.Instance.ConfigIni.bEventDrivenWASAPI,
814 CDTXMania.Instance.ConfigIni.strASIODevice.Index,
815 CDTXMania.Instance.ConfigIni.bUseOSTimer);
816 CDTXMania.Instance.ShowWindowTitleWithSoundType();
820 #region [ メトロノーム音 音量設定 ]
821 CDTXMania.Instance.Skin.soundClickHigh.n音量 = CDTXMania.Instance.ConfigIni.nClickHighVolume;
822 CDTXMania.Instance.Skin.soundClickLow.n音量 = CDTXMania.Instance.ConfigIni.nClickLowVolume;
825 #region [ サウンドのタイムストレッチモード変更 ]
827 FDK.CSound管理.bIsTimeStretch = CDTXMania.Instance.ConfigIni.bUseOSTimer;
831 if ( CDTXMania.Instance.ConfigIni.bForceHighPowerPlan )
833 CPowerPlan.ChangeHighPerformance();
837 CPowerPlan.RestoreCurrentPowerPlan();
843 public override void OnManagedリソースの作成()
847 this.tx通常項目行パネル = TextureFactory.tテクスチャの生成Af(CSkin.Path(@"Graphics\ScreenConfig itembox.png"), false);
848 this.txその他項目行パネル = TextureFactory.tテクスチャの生成Af(CSkin.Path(@"Graphics\ScreenConfig itembox other.png"), false);
849 this.tx三角矢印 = TextureFactory.tテクスチャの生成(CSkin.Path(@"Graphics\ScreenConfig triangle arrow.png"), false);
850 // スキン選択時に動的に設定するため、ここでは初期化しない
851 this.txSkinSample = null;
853 base.OnManagedリソースの作成();
857 public override void OnManagedリソースの解放()
861 TextureFactory.tテクスチャの解放(ref this.txSkinSample);
862 TextureFactory.tテクスチャの解放(ref this.tx通常項目行パネル);
863 TextureFactory.tテクスチャの解放(ref this.txその他項目行パネル);
864 TextureFactory.tテクスチャの解放(ref this.tx三角矢印);
868 base.OnManagedリソースの解放();
872 private void OnListMenuの初期化()
875 this.listMenu = new stMenuItemRight[this.list項目リスト.Count];
879 /// 事前にレンダリングしておいたテクスチャを解放する。
881 private void OnListMenuの解放()
883 if (listMenu != null)
885 for (int i = 0; i < listMenu.Length; i++)
887 TextureFactory.tテクスチャの解放(ref listMenu[i].txParam);
888 TextureFactory.tテクスチャの解放(ref listMenu[i].txParamColored);
889 TextureFactory.tテクスチャの解放(ref listMenu[i].txMenuItemRight);
891 this.listMenu = null;
895 public override int On進行描画()
897 throw new InvalidOperationException("t進行描画(bool)のほうを使用してください。");
900 public int t進行描画(bool b項目リスト側にフォーカスがある)
908 this.nスクロール用タイマ値 = CSound管理.rc演奏用タイマ.n現在時刻;
909 this.ct三角矢印アニメ.t開始(0, 9, 50, CDTXMania.Instance.Timer);
911 base.b初めての進行描画 = false;
916 this.b項目リスト側にフォーカスがある = b項目リスト側にフォーカスがある; // 記憶
918 #region [ 項目スクロールの進行 ]
920 long n現在時刻 = CDTXMania.Instance.Timer.n現在時刻;
921 if (n現在時刻 < this.nスクロール用タイマ値) this.nスクロール用タイマ値 = n現在時刻;
923 const int INTERVAL = 2; // [ms]
924 while ((n現在時刻 - this.nスクロール用タイマ値) >= INTERVAL)
926 int n目標項目までのスクロール量 = Math.Abs((int)(this.n目標のスクロールカウンタ - this.n現在のスクロールカウンタ));
929 #region [ n加速度の決定;目標まで遠いほど加速する。]
931 if (n目標項目までのスクロール量 <= 100)
935 else if (n目標項目までのスクロール量 <= 300)
939 else if (n目標項目までのスクロール量 <= 500)
949 #region [ this.n現在のスクロールカウンタに n加速度 を加減算。]
951 if (this.n現在のスクロールカウンタ < this.n目標のスクロールカウンタ)
953 this.n現在のスクロールカウンタ += n加速度;
954 if (this.n現在のスクロールカウンタ > this.n目標のスクロールカウンタ)
957 this.n現在のスクロールカウンタ = this.n目標のスクロールカウンタ;
960 else if (this.n現在のスクロールカウンタ > this.n目標のスクロールカウンタ)
962 this.n現在のスクロールカウンタ -= n加速度;
963 if (this.n現在のスクロールカウンタ < this.n目標のスクロールカウンタ)
966 this.n現在のスクロールカウンタ = this.n目標のスクロールカウンタ;
971 #region [ 行超え処理、ならびに目標位置に到達したらスクロールを停止して項目変更通知を発行。]
973 if (this.n現在のスクロールカウンタ >= 100)
975 this.n現在の選択項目 = this.t次の項目(this.n現在の選択項目);
976 this.n現在のスクロールカウンタ -= 100;
977 this.n目標のスクロールカウンタ -= 100;
978 if (this.n目標のスクロールカウンタ == 0)
980 CDTXMania.Instance.stageコンフィグ.t項目変更通知();
983 else if (this.n現在のスクロールカウンタ <= -100)
985 this.n現在の選択項目 = this.t前の項目(this.n現在の選択項目);
986 this.n現在のスクロールカウンタ += 100;
987 this.n目標のスクロールカウンタ += 100;
988 if (this.n目標のスクロールカウンタ == 0)
990 CDTXMania.Instance.stageコンフィグ.t項目変更通知();
996 this.nスクロール用タイマ値 += INTERVAL;
1001 #region [ ▲印アニメの進行 ]
1002 if (this.b項目リスト側にフォーカスがある && (this.n目標のスクロールカウンタ == 0))
1004 this.ct三角矢印アニメ.t進行Loop();
1011 // メニューにフォーカスがあるなら、項目リストの中央は頭を出さない。
1012 this.ptパネルの基本座標[4].X = this.b項目リスト側にフォーカスがある ? 276 : 301;
1014 #region [ 計11個の項目パネルを描画する。]
1016 int nItem = this.n現在の選択項目;
1017 for (int i = 0; i < 4; i++)
1019 nItem = this.t前の項目(nItem);
1022 for (int n行番号 = -4; n行番号 < 6; n行番号++)
1024 // n行番号 == 0 がフォーカスされている項目パネル。
1025 #region [ 今まさに画面外に飛びだそうとしている項目パネルは描画しない。]
1026 if (((n行番号 == -4) && (this.n現在のスクロールカウンタ > 0)) ||
1027 ((n行番号 == +5) && (this.n現在のスクロールカウンタ < 0)))
1029 nItem = this.t次の項目(nItem);
1034 int n移動元の行の基本位置 = n行番号 + 4;
1035 int n移動先の行の基本位置 = (this.n現在のスクロールカウンタ <= 0) ? ((n移動元の行の基本位置 + 1) % 10) : (((n移動元の行の基本位置 - 1) + 10) % 10);
1036 int x = this.ptパネルの基本座標[n移動元の行の基本位置].X + ((int)((this.ptパネルの基本座標[n移動先の行の基本位置].X - this.ptパネルの基本座標[n移動元の行の基本位置].X) * (((double)Math.Abs(this.n現在のスクロールカウンタ)) / 100.0)));
1037 int y = this.ptパネルの基本座標[n移動元の行の基本位置].Y + ((int)((this.ptパネルの基本座標[n移動先の行の基本位置].Y - this.ptパネルの基本座標[n移動元の行の基本位置].Y) * (((double)Math.Abs(this.n現在のスクロールカウンタ)) / 100.0)));
1039 #region [ 現在の行の項目パネル枠を描画。]
1040 if (this.list項目リスト[nItem].type == EOptionType.Normal)
1042 if (this.tx通常項目行パネル != null)
1044 this.tx通常項目行パネル.t2D描画(CDTXMania.Instance.Device, x * Scale.X, y * Scale.Y);
1047 else if (this.list項目リスト[nItem].type == EOptionType.Other)
1049 if (this.txその他項目行パネル != null)
1051 this.txその他項目行パネル.t2D描画(CDTXMania.Instance.Device, x * Scale.X, y * Scale.Y);
1056 #region [ 現在の行の項目名を描画。]
1057 if (listMenu[nItem].txMenuItemRight != null)
1059 // 自前のキャッシュに含まれているようなら、再レンダリングせずキャッシュを使用
1060 listMenu[nItem].txMenuItemRight.t2D描画(CDTXMania.Instance.Device, (x + 0x12) * Scale.X, (y + 12) * Scale.Y - 20);
1064 using (Bitmap bmpItem = prvFont.DrawPrivateFont(this.list項目リスト[nItem].label, Color.White, Color.Black))
1066 TextureFactory.tテクスチャの解放(ref listMenu[nItem].txMenuItemRight);
1067 listMenu[nItem].txMenuItemRight = TextureFactory.tテクスチャの生成(bmpItem);
1072 #region [ 現在の行の項目の要素を描画。]
1073 string strParam = this.list項目リスト[nItem].ToString();
1076 #region [ 最初にSkinの選択肢にきたとき(Enterを押す前)に限り、サンプル生成が発生する。 #28195 2012.5.2 yyagi ]
1077 if (this.list項目リスト[this.n現在の選択項目] == skins)
1079 if (txSkinSample == null)
1081 tGenerateSkinSample();
1083 if (txSkinSample != null)
1085 txSkinSample.t2D描画(CDTXMania.Instance.Device, 56 * Scale.X, 300 * Scale.Y);
1091 int nIndex = this.list項目リスト[nItem].Index;
1092 bool bColored = list項目リスト[nItem] is COptionInteger && n行番号 == 0 && b要素値にフォーカス中;
1093 if (listMenu[nItem].nParam != nIndex ||
1094 (listMenu[nItem].txParam == null) ||
1095 (bColored && listMenu[nItem].txParamColored == null))
1097 listMenu[nItem].nParam = nIndex;
1098 listMenu[nItem].strParam = this.list項目リスト[nItem].ToString();
1099 using (Bitmap bmpStr = prvFont.DrawPrivateFont(strParam, Color.White, Color.Black))
1101 TextureFactory.tテクスチャの解放(ref listMenu[nItem].txParam);
1102 listMenu[nItem].txParam = TextureFactory.tテクスチャの生成(bmpStr, false);
1105 using (Bitmap bmpStrColored = prvFont.DrawPrivateFont(strParam, Color.White, Color.Black, Color.Yellow, Color.OrangeRed))
1107 TextureFactory.tテクスチャの解放(ref listMenu[nItem].txParamColored);
1108 listMenu[nItem].txParamColored = TextureFactory.tテクスチャの生成(bmpStrColored, false);
1116 listMenu[nItem].txParamColored.t2D描画(CDTXMania.Instance.Device, (x + 210) * Scale.X, (y + 12) * Scale.Y - 20);
1120 listMenu[nItem].txParam.t2D描画(CDTXMania.Instance.Device, (x + 210) * Scale.X, (y + 12) * Scale.Y - 20);
1122 nItem = this.t次の項目(nItem);
1126 #region [ 項目リストにフォーカスがあって、かつスクロールが停止しているなら、パネルの上下に▲印を描画する。]
1127 if (this.b項目リスト側にフォーカスがある && (this.n目標のスクロールカウンタ == 0))
1135 if (this.b要素値にフォーカス中)
1139 y_upper = 198 - this.ct三角矢印アニメ.n現在の値;
1140 y_lower = 242 + this.ct三角矢印アニメ.n現在の値;
1146 y_upper = 186 - this.ct三角矢印アニメ.n現在の値;
1147 y_lower = 254 + this.ct三角矢印アニメ.n現在の値;
1152 if (this.tx三角矢印 != null)
1154 this.tx三角矢印.t2D描画(CDTXMania.Instance.Device, x * Scale.X,
1156 new Rectangle(0, 0, (int)(32 * Scale.X), (int)(16 * Scale.Y)));
1157 this.tx三角矢印.t2D描画(CDTXMania.Instance.Device, x * Scale.X,
1159 new Rectangle(0, (int)(16 * Scale.Y), (int)(32 * Scale.X), (int)(16 * Scale.Y)));
1169 internal enum Eメニュー種別
1175 // #24609 2011.4.12 yyagi: 画面キャプチャキーのアサイン
1190 private int t前の項目(int nItem)
1194 nItem = this.list項目リスト.Count - 1;
1199 private int t次の項目(int nItem)
1201 if (++nItem >= this.list項目リスト.Count)