2 using System.Collections.Generic;
\r
4 using System.Diagnostics;
\r
5 using System.Drawing;
\r
6 using System.Drawing.Drawing2D;
\r
7 using System.Windows.Forms;
\r
8 using DTXCreator.UndoRedo;
\r
11 namespace DTXCreator.譜面
\r
13 internal class C譜面管理
\r
15 public Bitmap bmp背景画像;
\r
16 public Dictionary<int, float> dicBPx = new Dictionary<int, float>();
\r
17 public Dictionary<int, C小節> dic小節 = new Dictionary<int, C小節>();
\r
18 public List<Cレーン> listレーン = new List<Cレーン>();
\r
19 public static readonly int nレーン割付チップ番号表示高さdot = 10;
\r
20 public static readonly int nレーン番号表示高さdot = 0x20;
\r
21 public int n現在のガイド幅grid = ( C小節.n基準の高さgrid / 0x10 );
\r
22 public int n現在の譜面表示下辺の譜面先頭からの位置grid;
\r
23 public string strPATH_WAV = "";
\r
25 public C譜面管理( Cメインフォーム cm )
\r
29 public bool bOPENチップである( Cチップ cc )
\r
31 Cレーン cレーン = this.listレーン[ cc.nレーン番号0to ];
\r
32 return ( ( cc.n値・整数1to1295 == 2 ) && ( ( cレーン.eレーン種別 == Cレーン.E種別.GtR ) || ( cレーン.eレーン種別 == Cレーン.E種別.BsR ) ) );
\r
34 public bool b確定選択中のチップがある()
\r
36 foreach( KeyValuePair<int, C小節> pair in this.dic小節 )
\r
38 foreach( Cチップ cチップ in pair.Value.listチップ )
\r
40 if( cチップ.b確定選択中 || cチップ.bドラッグで選択中 )
\r
48 public decimal dc譜面先頭からの位置gridにおけるBPMを返す( int n譜面先頭からの位置grid )
\r
50 decimal num = this._Form.dc現在のBPM;
\r
51 C小節 c小節 = this.p譜面先頭からの位置gridを含む小節を返す( n譜面先頭からの位置grid );
\r
54 for( int i = 0; i <= c小節.n小節番号0to3599; i++ )
\r
56 C小節 c小節2 = this.p小節を返す( i );
\r
59 int num3 = this.n譜面先頭からみた小節先頭の位置gridを返す( i );
\r
60 foreach( Cチップ cチップ in c小節2.listチップ )
\r
62 if( ( cチップ.nチャンネル番号00toFF == 8 ) && ( ( num3 + cチップ.n位置grid ) <= n譜面先頭からの位置grid ) )
\r
64 num = (decimal) cチップ.f値・浮動小数;
\r
72 public int nX座標dotが位置するレーン番号を返す( int nXdot )
\r
78 foreach( Cレーン cレーン in this.listレーン )
\r
90 public int nY座標dotが位置するgridを返す・ガイド幅単位( int nY )
\r
92 int num = this.nY座標dotが位置するgridを返す・最高解像度( nY );
\r
93 C小節 c小節 = this.p譜面先頭からの位置gridを含む小節を返す( num );
\r
96 c小節 = this.p小節を返す( this.n現在の最大の小節番号を返す() );
\r
98 int num2 = this.n譜面先頭からみた小節先頭の位置gridを返す( c小節.n小節番号0to3599 );
\r
99 int num3 = ( ( num - num2 ) / this.n現在のガイド幅grid ) * this.n現在のガイド幅grid;
\r
100 return ( num2 + num3 );
\r
102 public int nY座標dotが位置するgridを返す・最高解像度( int nY )
\r
104 int num = this._Form.pictureBox譜面パネル.ClientSize.Height - nY;
\r
105 return ( ( num / C小節.n1グリッドの高さdot ) + this.n現在の譜面表示下辺の譜面先頭からの位置grid );
\r
107 public int nレーンの左端X座標dotを返す( int nレーン番号0to )
\r
109 if( ( nレーン番号0to >= 0 ) && ( nレーン番号0to < this.listレーン.Count ) )
\r
111 return this.listレーン[ nレーン番号0to ].n位置Xdot;
\r
115 public int nレーン名に対応するレーン番号を返す( string strレーン名 )
\r
118 foreach( Cレーン cレーン in this.listレーン )
\r
120 if( cレーン.strレーン名.Equals( strレーン名 ) )
\r
128 public int n現在の最大の小節番号を返す()
\r
131 foreach( KeyValuePair<int, C小節> pair in this.dic小節 )
\r
133 C小節 c小節 = pair.Value;
\r
134 if( c小節.n小節番号0to3599 > nBar )
\r
136 nBar = c小節.n小節番号0to3599;
\r
141 public int n全小節の高さdotの合計を返す()
\r
144 foreach( KeyValuePair<int, C小節> pair in this.dic小節 )
\r
146 nHeights += pair.Value.n小節長倍率を考慮した現在の小節の高さdot;
\r
150 public int n全小節の高さgridの合計を返す()
\r
153 foreach( KeyValuePair<int, C小節> pair in this.dic小節 )
\r
155 num += pair.Value.n小節長倍率を考慮した現在の小節の高さgrid;
\r
159 public int n譜面先頭からの位置gridから描画領域内のY座標dotを返す( int n譜面先頭からの位置grid, Size sz描画領域dot )
\r
161 int num = n譜面先頭からの位置grid - this.n現在の譜面表示下辺の譜面先頭からの位置grid;
\r
162 return ( sz描画領域dot.Height - ( num * C小節.n1グリッドの高さdot ) );
\r
164 public int n譜面先頭からみた小節先頭の位置gridを返す( int n小節番号0to3599 )
\r
166 if( ( n小節番号0to3599 < 0 ) || ( n小節番号0to3599 > this.n現在の最大の小節番号を返す() ) )
\r
171 for( int i = 0; i < n小節番号0to3599; i++ )
\r
173 C小節 c小節 = this.p小節を返す( i );
\r
176 num += c小節.n小節長倍率を考慮した現在の小節の高さgrid;
\r
181 public C小節 pチップの存在する小節を返す( Cチップ cc )
\r
183 foreach( KeyValuePair<int, C小節> pair in this.dic小節 )
\r
185 C小節 c小節 = pair.Value;
\r
186 if( c小節.listチップ.Contains( cc ) )
\r
193 public Cチップ p指定された座標dotにあるチップを返す( int x, int y )
\r
195 int num = this.nX座標dotが位置するレーン番号を返す( x );
\r
198 int num2 = this.nY座標dotが位置するgridを返す・最高解像度( y );
\r
199 C小節 c小節 = this.p譜面先頭からの位置gridを含む小節を返す( num2 );
\r
204 int num3 = this.n譜面先頭からみた小節先頭の位置gridを返す( c小節.n小節番号0to3599 );
\r
205 foreach( Cチップ cチップ in c小節.listチップ )
\r
207 int num4 = num3 + cチップ.n位置grid;
\r
208 int num5 = C小節.n位置変換dot2grid( Cチップ.nチップの高さdot );
\r
209 if( ( ( cチップ.nレーン番号0to == num ) && ( num4 <= num2 ) ) && ( num2 <= ( num4 + num5 ) ) )
\r
217 public Cチップ p指定位置にあるチップを返す( int n小節番号0to, int nレーン番号0to, int n小節内の位置grid )
\r
219 C小節 c小節 = this.p小節を返す( n小節番号0to );
\r
222 for( int i = 0; i < c小節.listチップ.Count; i++ )
\r
224 Cチップ cチップ = c小節.listチップ[ i ];
\r
225 if( ( cチップ.n位置grid == n小節内の位置grid ) && ( cチップ.nレーン番号0to == nレーン番号0to ) )
\r
233 public C小節 p小節を返す( int n小節番号0to3599 )
\r
236 if( this.dic小節.TryGetValue( n小節番号0to3599, out c小節 ) )
\r
242 public C小節 p譜面先頭からの位置gridを含む小節を返す( int n譜面先頭からの位置grid )
\r
245 int num2 = this.n現在の最大の小節番号を返す();
\r
246 for( int i = 0; i <= num2; i++ )
\r
248 C小節 c小節 = this.p小節を返す( i );
\r
251 num += c小節.n小節長倍率を考慮した現在の小節の高さgrid;
\r
252 if( n譜面先頭からの位置grid < num )
\r
260 public void tチップを削除する( int nレーン番号0to, int n譜面先頭からの位置grid )
\r
262 C小節 c小節 = this.p譜面先頭からの位置gridを含む小節を返す( n譜面先頭からの位置grid );
\r
266 int num = n譜面先頭からの位置grid - this.n譜面先頭からみた小節先頭の位置gridを返す( c小節.n小節番号0to3599 );
\r
267 this._Form.mgrUndoRedo管理者.tトランザクション記録を開始する();
\r
270 Cレーン cレーン = this.listレーン[ nレーン番号0to ];
\r
271 bool flag = ( ( cレーン.eレーン種別 == Cレーン.E種別.GtR ) || ( cレーン.eレーン種別 == Cレーン.E種別.GtG ) ) || ( cレーン.eレーン種別 == Cレーン.E種別.GtB );
\r
272 bool flag2 = ( ( cレーン.eレーン種別 == Cレーン.E種別.BsR ) || ( cレーン.eレーン種別 == Cレーン.E種別.BsG ) ) || ( cレーン.eレーン種別 == Cレーン.E種別.BsB );
\r
274 foreach( Cチップ cチップ in c小節.listチップ )
\r
276 if( cチップ.n位置grid == num )
\r
278 if( cチップ.nレーン番号0to == nレーン番号0to )
\r
280 Cチップ cc = new Cチップ();
\r
281 cc.tコピーfrom( cチップ );
\r
282 Cチップ配置用UndoRedo redo = new Cチップ配置用UndoRedo( c小節.n小節番号0to3599, cc );
\r
283 this._Form.mgrUndoRedo管理者.tノードを追加する( new CUndoRedoセル<Cチップ配置用UndoRedo>( null, new DGUndoを実行する<Cチップ配置用UndoRedo>( this.tチップ削除のUndo ), new DGRedoを実行する<Cチップ配置用UndoRedo>( this.tチップ削除のRedo ), redo, redo ) );
\r
284 c小節.listチップ.Remove( cチップ );
\r
286 this._Form.b未保存 = true;
\r
289 if( ( flag && ( this.listレーン[ cチップ.nレーン番号0to ].eレーン種別 == Cレーン.E種別.GtR ) ) && ( cチップ.n値・整数1to1295 == 2 ) )
\r
291 Cチップ cチップ3 = new Cチップ();
\r
292 cチップ3.tコピーfrom( cチップ );
\r
293 Cチップ配置用UndoRedo redo2 = new Cチップ配置用UndoRedo( c小節.n小節番号0to3599, cチップ3 );
\r
294 this._Form.mgrUndoRedo管理者.tノードを追加する( new CUndoRedoセル<Cチップ配置用UndoRedo>( null, new DGUndoを実行する<Cチップ配置用UndoRedo>( this.tチップ削除のUndo ), new DGRedoを実行する<Cチップ配置用UndoRedo>( this.tチップ削除のRedo ), redo2, redo2 ) );
\r
295 c小節.listチップ.Remove( cチップ );
\r
297 this._Form.b未保存 = true;
\r
300 if( ( flag2 && ( this.listレーン[ cチップ.nレーン番号0to ].eレーン種別 == Cレーン.E種別.BsR ) ) && ( cチップ.n値・整数1to1295 == 2 ) )
\r
302 Cチップ cチップ4 = new Cチップ();
\r
303 cチップ4.tコピーfrom( cチップ );
\r
304 Cチップ配置用UndoRedo redo3 = new Cチップ配置用UndoRedo( c小節.n小節番号0to3599, cチップ4 );
\r
305 this._Form.mgrUndoRedo管理者.tノードを追加する( new CUndoRedoセル<Cチップ配置用UndoRedo>( null, new DGUndoを実行する<Cチップ配置用UndoRedo>( this.tチップ削除のUndo ), new DGRedoを実行する<Cチップ配置用UndoRedo>( this.tチップ削除のRedo ), redo3, redo3 ) );
\r
306 c小節.listチップ.Remove( cチップ );
\r
308 this._Form.b未保存 = true;
\r
315 this._Form.tUndoRedo用GUIの有効・無効を設定する();
\r
316 this._Form.mgrUndoRedo管理者.tトランザクション記録を終了する();
\r
319 public void tチップを配置または置換する( int nレーン番号0to, int n譜面先頭からの位置grid, int nチップ値・整数, float fチップ値・浮動小数, bool b裏として配置 )
\r
321 C小節 c小節 = this.p譜面先頭からの位置gridを含む小節を返す( n譜面先頭からの位置grid );
\r
324 this._Form.mgrUndoRedo管理者.tトランザクション記録を開始する();
\r
325 this.tチップを削除する( nレーン番号0to, n譜面先頭からの位置grid );
\r
326 if( ( ( this.listレーン[ nレーン番号0to ].eレーン種別 == Cレーン.E種別.GtR ) || ( this.listレーン[ nレーン番号0to ].eレーン種別 == Cレーン.E種別.BsR ) ) && ( nチップ値・整数 == 2 ) )
\r
328 this.tチップを削除する( nレーン番号0to + 1, n譜面先頭からの位置grid );
\r
329 this.tチップを削除する( nレーン番号0to + 2, n譜面先頭からの位置grid );
\r
331 Cレーン cレーン = this.listレーン[ nレーン番号0to ];
\r
332 Cチップ item = new Cチップ();
\r
333 item.nチャンネル番号00toFF = b裏として配置 ? cレーン.nチャンネル番号・裏00toFF : cレーン.nチャンネル番号・表00toFF;
\r
334 item.nレーン番号0to = nレーン番号0to;
\r
335 item.n位置grid = n譜面先頭からの位置grid - this.n譜面先頭からみた小節先頭の位置gridを返す( c小節.n小節番号0to3599 );
\r
336 item.n値・整数1to1295 = nチップ値・整数;
\r
337 item.f値・浮動小数 = fチップ値・浮動小数;
\r
339 c小節.listチップ.Add( item );
\r
340 Cチップ cc = new Cチップ();
\r
341 cc.tコピーfrom( item );
\r
342 Cチップ配置用UndoRedo redo = new Cチップ配置用UndoRedo( c小節.n小節番号0to3599, cc );
\r
343 this._Form.mgrUndoRedo管理者.tノードを追加する( new CUndoRedoセル<Cチップ配置用UndoRedo>( null, new DGUndoを実行する<Cチップ配置用UndoRedo>( this.tチップ配置のUndo ), new DGRedoを実行する<Cチップ配置用UndoRedo>( this.tチップ配置のRedo ), redo, redo ) );
\r
344 int num = this.n現在の最大の小節番号を返す();
\r
345 if( c小節.n小節番号0to3599 == num )
\r
347 for( int i = num + 1; i <= ( num + 4 ); i++ )
\r
349 this.dic小節.Add( i, new C小節( i ) );
\r
350 this._Form.mgrUndoRedo管理者.tノードを追加する( new CUndoRedoセル<int>( null, new DGUndoを実行する<int>( this.t小節挿入のUndo ), new DGRedoを実行する<int>( this.t小節挿入のRedo ), i, i ) );
\r
353 this._Form.mgrUndoRedo管理者.tトランザクション記録を終了する();
\r
354 this._Form.tUndoRedo用GUIの有効・無効を設定する();
\r
355 this._Form.b未保存 = true;
\r
358 public void tチップ削除のRedo( Cチップ配置用UndoRedo ur変更前, Cチップ配置用UndoRedo ur変更後 )
\r
360 C小節 c小節 = this.p小節を返す( ur変更前.n小節番号0to );
\r
363 for( int i = 0; i < c小節.listチップ.Count; i++ )
\r
365 Cチップ cチップ = c小節.listチップ[ i ];
\r
366 if( ( cチップ.n位置grid == ur変更前.cc.n位置grid ) && ( cチップ.nレーン番号0to == ur変更前.cc.nレーン番号0to ) )
\r
368 c小節.listチップ.RemoveAt( i );
\r
369 this._Form.b未保存 = true;
\r
375 public void tチップ削除のUndo( Cチップ配置用UndoRedo ur変更前, Cチップ配置用UndoRedo ur変更後 )
\r
377 C小節 c小節 = this.p小節を返す( ur変更前.n小節番号0to );
\r
380 Cチップ item = new Cチップ();
\r
381 item.tコピーfrom( ur変更前.cc );
\r
382 c小節.listチップ.Add( item );
\r
383 this._Form.b未保存 = true;
\r
386 public void tチップ選択のRedo( Cチップ位置用UndoRedo ur変更前, Cチップ位置用UndoRedo ur変更後 )
\r
388 Cチップ cチップ = this.p指定位置にあるチップを返す( ur変更前.n小節番号0to, ur変更前.nレーン番号0to, ur変更前.n位置grid );
\r
391 cチップ.b確定選択中 = true;
\r
394 public void tチップ選択のUndo( Cチップ位置用UndoRedo ur変更前, Cチップ位置用UndoRedo ur変更後 )
\r
396 Cチップ cチップ = this.p指定位置にあるチップを返す( ur変更前.n小節番号0to, ur変更前.nレーン番号0to, ur変更前.n位置grid );
\r
399 cチップ.b確定選択中 = false;
\r
402 public void tチップ選択解除のRedo( Cチップ位置用UndoRedo ur変更前, Cチップ位置用UndoRedo ur変更後 )
\r
404 Cチップ cチップ = this.p指定位置にあるチップを返す( ur変更前.n小節番号0to, ur変更前.nレーン番号0to, ur変更前.n位置grid );
\r
407 cチップ.b確定選択中 = false;
\r
410 public void tチップ選択解除のUndo( Cチップ位置用UndoRedo ur変更前, Cチップ位置用UndoRedo ur変更後 )
\r
412 Cチップ cチップ = this.p指定位置にあるチップを返す( ur変更前.n小節番号0to, ur変更前.nレーン番号0to, ur変更前.n位置grid );
\r
415 cチップ.b確定選択中 = true;
\r
418 public void tチップ配置のRedo( Cチップ配置用UndoRedo ur変更前, Cチップ配置用UndoRedo ur変更後 )
\r
420 C小節 c小節 = this.p小節を返す( ur変更前.n小節番号0to );
\r
423 Cチップ item = new Cチップ();
\r
424 item.tコピーfrom( ur変更前.cc );
\r
425 c小節.listチップ.Add( item );
\r
426 this._Form.b未保存 = true;
\r
429 public void tチップ配置のUndo( Cチップ配置用UndoRedo ur変更前, Cチップ配置用UndoRedo ur変更後 )
\r
431 C小節 c小節 = this.p小節を返す( ur変更前.n小節番号0to );
\r
434 for( int i = 0; i < c小節.listチップ.Count; i++ )
\r
436 Cチップ cチップ = c小節.listチップ[ i ];
\r
437 if( ( cチップ.n位置grid == ur変更前.cc.n位置grid ) && ( cチップ.nレーン番号0to == ur変更前.cc.nレーン番号0to ) )
\r
439 c小節.listチップ.RemoveAt( i );
\r
440 this._Form.b未保存 = true;
\r
446 public void tチップ番号置換のRedo( Cチップ位置用UndoRedo ur変更前, Cチップ位置用UndoRedo ur変更後 )
\r
448 Cチップ cチップ = this.p指定位置にあるチップを返す( ur変更前.n小節番号0to, ur変更前.nレーン番号0to, ur変更前.n位置grid );
\r
451 cチップ.n値・整数1to1295 = ur変更後.n値・整数1to1295;
\r
452 this._Form.b未保存 = true;
\r
455 public void tチップ番号置換のUndo( Cチップ位置用UndoRedo ur変更前, Cチップ位置用UndoRedo ur変更後 )
\r
457 Cチップ cチップ = this.p指定位置にあるチップを返す( ur変更後.n小節番号0to, ur変更後.nレーン番号0to, ur変更後.n位置grid );
\r
460 cチップ.n値・整数1to1295 = ur変更前.n値・整数1to1295;
\r
461 this._Form.b未保存 = true;
\r
464 public void tチップ表裏反転のRedo( Cチップ位置用UndoRedo ur変更前, Cチップ位置用UndoRedo ur変更後 )
\r
466 Cチップ cチップ = this.p指定位置にあるチップを返す( ur変更前.n小節番号0to, ur変更前.nレーン番号0to, ur変更前.n位置grid );
\r
471 cチップ.nチャンネル番号00toFF = this.listレーン[ cチップ.nレーン番号0to ].nチャンネル番号・表00toFF;
\r
476 cチップ.nチャンネル番号00toFF = this.listレーン[ cチップ.nレーン番号0to ].nチャンネル番号・裏00toFF;
\r
479 this._Form.b未保存 = true;
\r
482 public void tチップ表裏反転のUndo( Cチップ位置用UndoRedo ur変更前, Cチップ位置用UndoRedo ur変更後 )
\r
484 Cチップ cチップ = this.p指定位置にあるチップを返す( ur変更前.n小節番号0to, ur変更前.nレーン番号0to, ur変更前.n位置grid );
\r
489 cチップ.nチャンネル番号00toFF = this.listレーン[ cチップ.nレーン番号0to ].nチャンネル番号・表00toFF;
\r
494 cチップ.nチャンネル番号00toFF = this.listレーン[ cチップ.nレーン番号0to ].nチャンネル番号・裏00toFF;
\r
497 this._Form.b未保存 = true;
\r
502 this.t初期化・listレーンの生成();
\r
503 this.t初期化・小節を10個まで作成する();
\r
504 this.t初期化・背景画像を生成する();
\r
505 this.t初期化・スクロールバーを初期設定する();
\r
507 public void t小節削除のRedo( int nダミー, int n削除する小節番号0to )
\r
509 this.dic小節.Remove( n削除する小節番号0to );
\r
510 int num = this.n現在の最大の小節番号を返す();
\r
511 for( int i = n削除する小節番号0to + 1; i <= num; i++ )
\r
513 C小節 c小節 = this.p小節を返す( i );
\r
516 this.dic小節.Remove( i );
\r
517 c小節.n小節番号0to3599 = i - 1;
\r
518 this.dic小節.Add( c小節.n小節番号0to3599, c小節 );
\r
521 this._Form.b未保存 = true;
\r
523 public void t小節削除のUndo( int n削除された小節番号0to, int nダミー )
\r
525 for( int i = this.n現在の最大の小節番号を返す(); i >= n削除された小節番号0to; i-- )
\r
527 C小節 c小節 = this.p小節を返す( i );
\r
530 this.dic小節.Remove( i );
\r
531 c小節.n小節番号0to3599 = i + 1;
\r
532 this.dic小節.Add( c小節.n小節番号0to3599, c小節 );
\r
535 this.dic小節.Add( n削除された小節番号0to, new C小節( n削除された小節番号0to ) );
\r
536 this._Form.b未保存 = true;
\r
538 public void t小節挿入のRedo( int nダミー, int n挿入する小節番号0to )
\r
540 for( int i = this.n現在の最大の小節番号を返す(); i >= n挿入する小節番号0to; i-- )
\r
542 C小節 c小節 = this.p小節を返す( i );
\r
545 this.dic小節.Remove( i );
\r
546 c小節.n小節番号0to3599 = i + 1;
\r
547 this.dic小節.Add( c小節.n小節番号0to3599, c小節 );
\r
550 this.dic小節.Add( n挿入する小節番号0to, new C小節( n挿入する小節番号0to ) );
\r
551 this._Form.b未保存 = true;
\r
553 public void t小節挿入のUndo( int n挿入された小節番号0to, int nダミー )
\r
555 this.dic小節.Remove( n挿入された小節番号0to );
\r
556 int num = this.n現在の最大の小節番号を返す();
\r
557 for( int i = n挿入された小節番号0to + 1; i <= num; i++ )
\r
559 C小節 c小節 = this.p小節を返す( i );
\r
562 this.dic小節.Remove( i );
\r
563 c小節.n小節番号0to3599 = i - 1;
\r
564 this.dic小節.Add( c小節.n小節番号0to3599, c小節 );
\r
567 this._Form.b未保存 = true;
\r
569 public void t小節長変更のRedo( C小節用UndoRedo ur変更前, C小節用UndoRedo ur変更後 )
\r
571 C小節 c小節 = this.p小節を返す( ur変更後.n小節番号0to );
\r
574 c小節.f小節長倍率 = ur変更後.f倍率;
\r
575 this._Form.b未保存 = true;
\r
578 public void t小節長変更のUndo( C小節用UndoRedo ur変更前, C小節用UndoRedo ur変更後 )
\r
580 C小節 c小節 = this.p小節を返す( ur変更前.n小節番号0to );
\r
583 c小節.f小節長倍率 = ur変更前.f倍率;
\r
584 this._Form.b未保存 = true;
\r
587 public void t垂直スクロールバーと譜面可視領域の上下位置の調整()
\r
589 VScrollBar bar = this._Form.vScrollBar譜面用垂直スクロールバー;
\r
590 PictureBox box = this._Form.pictureBox譜面パネル;
\r
592 bar.Maximum = this.n全小節の高さgridの合計を返す() - 1;
\r
593 bar.SmallChange = C小節.n基準の高さgrid / 0x10;
\r
594 bar.LargeChange = C小節.n基準の高さgrid;
\r
595 bar.Enabled = bar.Maximum > bar.LargeChange;
\r
598 this.n現在の譜面表示下辺の譜面先頭からの位置grid = ( ( bar.Maximum + 1 ) - bar.LargeChange ) - bar.Value;
\r
602 public void t水平スクロールバーと譜面パネル左右位置の調整()
\r
604 HScrollBar bar = this._Form.hScrollBar譜面用水平スクロールバー;
\r
605 SplitContainer container = this._Form.splitContainerタブと譜面を分割;
\r
606 PictureBox box = this._Form.pictureBox譜面パネル;
\r
608 bar.Maximum = box.Width - 1;
\r
609 bar.SmallChange = 5;
\r
610 bar.LargeChange = container.Panel2.Width;
\r
611 bar.Enabled = bar.Maximum > bar.LargeChange;
\r
614 int num = bar.Value;
\r
615 if( ( num + bar.LargeChange ) > bar.Maximum )
\r
617 num = ( bar.Maximum - bar.LargeChange ) + 1;
\r
620 box.Location = new Point( -num, 0 );
\r
624 public void t譜面を描画する( Graphics g, Size sz描画対象サイズdot, Rectangle rc可視領域dot )
\r
626 this.strfmt小節番号文字フォーマット.LineAlignment = StringAlignment.Center;
\r
627 this.strfmt小節番号文字フォーマット.Alignment = StringAlignment.Center;
\r
628 this.strfmtレーン名文字フォーマット.LineAlignment = StringAlignment.Near;
\r
629 this.strfmtレーン名文字フォーマット.Alignment = StringAlignment.Center;
\r
630 this.strfmtレーン割付チップ番号文字フォーマット.LineAlignment = StringAlignment.Near;
\r
631 this.strfmtレーン割付チップ番号文字フォーマット.Alignment = StringAlignment.Near;
\r
634 int num3 = this.n現在の譜面表示下辺の譜面先頭からの位置grid * C小節.n1グリッドの高さdot;
\r
635 int num4 = num3 + rc可視領域dot.Height;
\r
636 int maxBar = this.n現在の最大の小節番号を返す();
\r
638 while( bar <= maxBar )
\r
640 C小節 cs = this.p小節を返す( bar );
\r
643 num2 = h + cs.n小節長倍率を考慮した現在の小節の高さdot;
\r
650 Rectangle rectangle = new Rectangle( 0, sz描画対象サイズdot.Height - ( num2 - num3 ), sz描画対象サイズdot.Width, num2 - h );
\r
651 Rectangle rectangle2 = new Rectangle( rc可視領域dot.X, rectangle.Y, rc可視領域dot.Width, rectangle.Height );
\r
652 this.t譜面を描画する・1小節を描画する( g, cs, rectangle, rectangle2 );
\r
658 Rectangle rectangle3 = new Rectangle( 0, 0, sz描画対象サイズdot.Width, nレーン割付チップ番号表示高さdot );
\r
659 this.t譜面を描画する・レーン割付チップを描画する( g, rectangle3 );
\r
660 rectangle3 = new Rectangle( 0, 10, sz描画対象サイズdot.Width, nレーン番号表示高さdot );
\r
661 this.t譜面を描画する・レーン名を描画する( g, rectangle3 );
\r
665 /// 指定した種類のレーンを非表示にする
\r
667 /// <param name="eLaneType">非表示にするレーンの種類</param>
\r
668 public void tCollapseLanes( Cレーン.ELaneType eLaneType )
\r
670 // なお、格納/展開状態を、#DTXV_COLLAPSED_LANES とかでDTXファイルに残した方がいいかも。
\r
671 int count = this.listレーン.Count;
\r
672 for ( int i = 0; i < this.listレーン.Count; i++ )
\r
674 Cレーン c = listレーン[ i ];
\r
675 if ( c.eLaneType == eLaneType && c.bIsVisible == true ) // 対象レーンが見つかったら
\r
677 this.listレーン[ i ].bIsVisible = false;
\r
678 this.listレーン[ i ].n幅dot = 0;
\r
681 this.tRefreshDisplayLanes();
\r
684 /// 指定した種類のレーンを表示する
\r
686 /// <param name="eLaneType">表示にするレーンの種類</param>
\r
687 public void tExpandLanes( Cレーン.ELaneType eLaneType )
\r
689 // tCollapseLanes()の反対の処理をする。
\r
691 for ( int i = 0; i < this.listレーン.Count; i++ ) // 以下本番
\r
693 Cレーン c = listレーン[ i ];
\r
694 if ( c.eLaneType == eLaneType && c.bIsVisible == false ) // 対象レーンが見つかったら
\r
696 this.listレーン[ i ].bIsVisible = true;
\r
697 this.listレーン[ i ].n幅dot = Cレーン.LANEWIDTH;
\r
700 this.tRefreshDisplayLanes();
\r
704 /// レーンの表示/非表示を反映する
\r
706 /// <param name="eLaneType">表示にするレーンの種類</param>
\r
707 public void tRefreshDisplayLanes()
\r
709 this.tRecalc_n位置XdotX(); // レーン位置が変わったので、レーン毎のX座標を再計算
\r
710 this.t初期化・背景画像を生成する(); // レーン数が変わったので、レーン画像を納める背景も再生成
\r
711 this.t水平スクロールバーと譜面パネル左右位置の調整(); // レーン数が変わったので、スクロールバーの長さも再調整
\r
714 private void tRecalc_n位置XdotX() // n位置Xdotの再計算
\r
717 int count = this.listレーン.Count;
\r
718 for ( int i = 0; i < count; i++ )
\r
720 this.listレーン[ i ].n位置Xdot = x;
\r
721 x += this.listレーン[ i ].n幅dot;
\r
726 #region [ private ]
\r
727 //-----------------
\r
728 private Cメインフォーム _Form;
\r
729 private Brush brレーン割付番号文字ブラシ = new SolidBrush( Color.White );
\r
730 private Brush brレーン割付番号文字ブラシ影 = new SolidBrush( Color.Black );
\r
731 private Brush brレーン名文字ブラシ = new SolidBrush( Color.FromArgb( 0xff, 220, 220, 220 ) );
\r
732 private Brush brレーン名文字ブラシ影 = new SolidBrush( Color.Black );
\r
733 private Brush br小節番号文字ブラシ = new SolidBrush( Color.FromArgb( 80, 0xff, 0xff, 0xff ) );
\r
734 private Font ftレーン割付チップ番号文字フォント = new Font( "MS UI Gothic", 7f, FontStyle.Regular );
\r
735 private Font ftレーン番号文字フォント = new Font( "MS US Gothic", 8f, FontStyle.Regular );
\r
736 private Font ft小節番号文字フォント = new Font( "MS UI Gothic", 50f, FontStyle.Regular );
\r
737 private Pen penガイド線ペン = new Pen( Color.FromArgb( 50, 50, 50 ) );
\r
738 private Pen penレーン区分線ペン細 = new Pen( Color.Gray );
\r
739 private Pen penレーン区分線ペン太 = new Pen( Color.White, 2f );
\r
740 private Pen pen小節線ペン = new Pen( Color.White, 2f );
\r
741 private Pen pen拍線ペン = new Pen( Color.Gray );
\r
742 private StringFormat strfmtレーン割付チップ番号文字フォーマット = new StringFormat();
\r
743 private StringFormat strfmtレーン名文字フォーマット = new StringFormat();
\r
744 private StringFormat strfmt小節番号文字フォーマット = new StringFormat();
\r
746 private void t初期化・listレーンの生成()
\r
748 this.listレーン.Clear();
\r
749 int width = Cレーン.LANEWIDTH;
\r
752 this.listレーン.Add( new Cレーン( Cレーン.E種別.BPM, "BPM", 0x08, 0x03, true, Color.FromArgb( alpha, 160, 160, 160 ), 0, width, Cレーン.ELaneType.BPM, true ) );
\r
754 this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "LC", 0x1a, 0x1a, true, Color.FromArgb( alpha, 0, 0xff, 0xff ), 0, width, Cレーン.ELaneType.Drums, true ) );
\r
755 this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "HH", 0x11, 0x18, false, Color.FromArgb( alpha, 0, 0xff, 0xff ), 0, width, Cレーン.ELaneType.Drums, true ) );
\r
756 this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "SD", 0x12, 0x12, false, Color.FromArgb( alpha, 0xff, 0xff, 0 ), 0, width, Cレーン.ELaneType.Drums, true ) );
\r
757 this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "BD", 0x13, 0x13, false, Color.FromArgb( alpha, 0xff, 0x7f, 0x7f ), 0, width, Cレーン.ELaneType.Drums, true ) );
\r
758 this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "HT", 0x14, 0x14, false, Color.FromArgb( alpha, 0, 0xff, 0 ), 0, width, Cレーン.ELaneType.Drums, true ) );
\r
759 this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "LT", 0x15, 0x15, false, Color.FromArgb( alpha, 0xff, 0, 0 ), 0, width, Cレーン.ELaneType.Drums, true ) );
\r
760 this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "FT", 0x17, 0x17, false, Color.FromArgb( alpha, 0xff, 0, 0xff ), 0, width, Cレーン.ELaneType.Drums, true ) );
\r
761 this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "CY", 0x16, 0x19, false, Color.FromArgb( alpha, 0, 0xff, 0xff ), 0, width, Cレーン.ELaneType.Drums, true ) );
\r
762 this.listレーン.Add( new Cレーン( Cレーン.E種別.FI, "FI", 0x53, 0x53, true, Color.FromArgb( alpha, 0xff, 0xff, 0 ), 0, width, Cレーン.ELaneType.Drums, true ) );
\r
764 this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "BGM", 0x01, 0x01, true, Color.FromArgb( alpha, 160, 160, 160 ), 0, width, Cレーン.ELaneType.BGM, true ) );
\r
766 this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "SE1", 0x61, 0x61, true, Color.FromArgb( alpha, 160, 160, 160 ), 0, width, Cレーン.ELaneType.SE1_5, true ) );
\r
767 this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "SE2", 0x62, 0x62, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, width, Cレーン.ELaneType.SE1_5, true ) );
\r
768 this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "SE3", 0x63, 0x63, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, width, Cレーン.ELaneType.SE1_5, true ) );
\r
769 this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "SE4", 0x64, 0x64, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, width, Cレーン.ELaneType.SE1_5, true ) );
\r
770 this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "SE5", 0x65, 0x65, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, width, Cレーン.ELaneType.SE1_5, true ) );
\r
772 // SE6~32は、初期状態では非表示とする。(n幅dotを0にし、bIsVisibleをfalseにする)
\r
773 this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "SE6", 0x66, 0x66, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.SE6_32, false ) );
\r
774 this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "SE7", 0x67, 0x67, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.SE6_32, false ) );
\r
775 this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "SE8", 0x68, 0x68, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.SE6_32, false ) );
\r
776 this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "SE9", 0x69, 0x69, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.SE6_32, false ) );
\r
777 this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "S10", 0x70, 0x70, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.SE6_32, false ) );
\r
778 this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "S11", 0x71, 0x71, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.SE6_32, false ) );
\r
779 this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "S12", 0x72, 0x72, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.SE6_32, false ) );
\r
780 this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "S13", 0x73, 0x73, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.SE6_32, false ) );
\r
781 this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "S14", 0x74, 0x74, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.SE6_32, false ) );
\r
782 this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "S15", 0x75, 0x75, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.SE6_32, false ) );
\r
783 this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "S16", 0x76, 0x76, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.SE6_32, false ) );
\r
784 this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "S17", 0x77, 0x77, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.SE6_32, false ) );
\r
785 this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "S18", 0x78, 0x78, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.SE6_32, false ) );
\r
786 this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "S19", 0x79, 0x79, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.SE6_32, false ) );
\r
787 this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "S20", 0x80, 0x80, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.SE6_32, false ) );
\r
788 this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "S21", 0x81, 0x81, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.SE6_32, false ) );
\r
789 this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "S22", 0x82, 0x82, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.SE6_32, false ) );
\r
790 this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "S23", 0x83, 0x83, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.SE6_32, false ) );
\r
791 this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "S24", 0x84, 0x84, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.SE6_32, false ) );
\r
792 this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "S25", 0x85, 0x85, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.SE6_32, false ) );
\r
793 this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "S26", 0x86, 0x86, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.SE6_32, false ) );
\r
794 this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "S27", 0x87, 0x87, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.SE6_32, false ) );
\r
795 this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "S28", 0x88, 0x88, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.SE6_32, false ) );
\r
796 this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "S29", 0x89, 0x89, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.SE6_32, false ) );
\r
797 this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "S30", 0x90, 0x90, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.SE6_32, false ) );
\r
798 this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "S31", 0x91, 0x91, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.SE6_32, false ) );
\r
799 this.listレーン.Add( new Cレーン( Cレーン.E種別.WAV, "S32", 0x92, 0x92, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.SE6_32, false ) );
\r
801 this.listレーン.Add( new Cレーン( Cレーン.E種別.GtV, "GtV", 0, 0, true, Color.FromArgb( alpha, 160, 160, 160 ), 0, width, Cレーン.ELaneType.Guitar, true ) );
\r
802 this.listレーン.Add( new Cレーン( Cレーン.E種別.GtR, "GtR", 0, 0, false, Color.FromArgb( alpha, 0xff, 0, 0 ), 0, width, Cレーン.ELaneType.Guitar, true ) );
\r
803 this.listレーン.Add( new Cレーン( Cレーン.E種別.GtG, "GtG", 0, 0, false, Color.FromArgb( alpha, 0, 0xff, 0 ), 0, width, Cレーン.ELaneType.Guitar, true ) );
\r
804 this.listレーン.Add( new Cレーン( Cレーン.E種別.GtB, "GtB", 0, 0, false, Color.FromArgb( alpha, 0, 0x80, 0xff ), 0, width, Cレーン.ELaneType.Guitar, true ) );
\r
805 this.listレーン.Add( new Cレーン( Cレーン.E種別.GtW, "GtW", 0x28, 0x28, true, Color.FromArgb( alpha, 160, 160, 160 ), 0, width, Cレーン.ELaneType.Guitar, true ) );
\r
806 this.listレーン.Add( new Cレーン( Cレーン.E種別.BsV, "BsV", 0, 0, true, Color.FromArgb( alpha, 160, 160, 160 ), 0, width, Cレーン.ELaneType.Bass, true ) );
\r
807 this.listレーン.Add( new Cレーン( Cレーン.E種別.BsR, "BsR", 0, 0, false, Color.FromArgb( alpha, 0xff, 0, 0 ), 0, width, Cレーン.ELaneType.Bass, true ) );
\r
808 this.listレーン.Add( new Cレーン( Cレーン.E種別.BsG, "BsG", 0, 0, false, Color.FromArgb( alpha, 0, 0xff, 0 ), 0, width, Cレーン.ELaneType.Bass, true ) );
\r
809 this.listレーン.Add( new Cレーン( Cレーン.E種別.BsB, "BsB", 0, 0, false, Color.FromArgb( alpha, 0, 0x80, 0xff ), 0, width, Cレーン.ELaneType.Bass, true ) );
\r
810 this.listレーン.Add( new Cレーン( Cレーン.E種別.BsW, "BsW", 0xa8, 0xa8, true, Color.FromArgb( alpha, 160, 160, 160 ), 0, width, Cレーン.ELaneType.Bass, true ) );
\r
812 this.listレーン.Add( new Cレーン( Cレーン.E種別.AVI, "AVI", 0x54, 0x54, true, Color.FromArgb( alpha, 160, 160, 160 ), 0, width, Cレーン.ELaneType.AVI, true ) );
\r
814 this.listレーン.Add( new Cレーン( Cレーン.E種別.BMP, "BG1", 0x04, 0xc4, true, Color.FromArgb( alpha, 160, 160, 160 ), 0, width, Cレーン.ELaneType.BGA1_5, true ) );
\r
815 this.listレーン.Add( new Cレーン( Cレーン.E種別.BMP, "BG2", 0x07, 0xc7, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, width, Cレーン.ELaneType.BGA1_5, true ) );
\r
816 this.listレーン.Add( new Cレーン( Cレーン.E種別.BMP, "BG3", 0x55, 0xd5, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, width, Cレーン.ELaneType.BGA1_5, true ) );
\r
817 this.listレーン.Add( new Cレーン( Cレーン.E種別.BMP, "BG4", 0x56, 0xd6, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, width, Cレーン.ELaneType.BGA1_5, true ) );
\r
818 this.listレーン.Add( new Cレーン( Cレーン.E種別.BMP, "BG5", 0x57, 0xd7, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, width, Cレーン.ELaneType.BGA1_5, true ) );
\r
820 // BG6~8も、初期状態では非表示とする。(n幅dotを0にし、bIsVisibleをfalseにする)
\r
821 this.listレーン.Add( new Cレーン( Cレーン.E種別.BMP, "BG6", 0x58, 0xd8, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.BGA6_8, false ) );
\r
822 this.listレーン.Add( new Cレーン( Cレーン.E種別.BMP, "BG7", 0x59, 0xd9, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.BGA6_8, false ) );
\r
823 this.listレーン.Add( new Cレーン( Cレーン.E種別.BMP, "BG8", 0x60, 0xe0, false, Color.FromArgb( alpha, 160, 160, 160 ), 0, 0, Cレーン.ELaneType.BGA6_8, false ) );
\r
825 this.tRecalc_n位置XdotX(); // 0で固定初期化していたn位置XdotXを、ここで計算する。
\r
826 // (初期化の際に1つ1つまじめに計算しても良いが、単純にコード記述量が減るのでここでまとめて計算している)
\r
829 private void t初期化・スクロールバーを初期設定する()
\r
831 this._Form.hScrollBar譜面用水平スクロールバー.Value = 0;
\r
832 this._Form.vScrollBar譜面用垂直スクロールバー.Value = 0;
\r
833 this.t水平スクロールバーと譜面パネル左右位置の調整();
\r
834 this.t垂直スクロールバーと譜面可視領域の上下位置の調整();
\r
835 this._Form.vScrollBar譜面用垂直スクロールバー.Value = ( this._Form.vScrollBar譜面用垂直スクロールバー.Maximum + 1 ) - this._Form.vScrollBar譜面用垂直スクロールバー.LargeChange;
\r
837 private void t初期化・小節を10個まで作成する()
\r
839 for( int i = 0; i < 10; i++ )
\r
841 this.dic小節.Add( i, new C小節( i ) );
\r
844 private void t初期化・背景画像を生成する()
\r
847 foreach( Cレーン cレーン in this.listレーン )
\r
849 width += cレーン.n幅dot;
\r
851 this.bmp背景画像 = new Bitmap( width, 1 );
\r
852 Graphics graphics = Graphics.FromImage( this.bmp背景画像 );
\r
854 foreach( Cレーン cレーン in this.listレーン )
\r
856 graphics.FillRectangle( new SolidBrush( cレーン.col背景色 ), x, 0, cレーン.n幅dot, this.bmp背景画像.Height );
\r
859 graphics.Dispose();
\r
860 this._Form.pictureBox譜面パネル.Width = this.bmp背景画像.Width;
\r
861 this._Form.pictureBox譜面パネル.BackgroundImage = this.bmp背景画像;
\r
862 this._Form.pictureBox譜面パネル.BackgroundImageLayout = ImageLayout.Tile;
\r
864 private void t譜面を描画する・1小節を描画する( Graphics g, C小節 cs, Rectangle rc小節のPicBox内描画領域, Rectangle rc小節のPicBox内可視領域 )
\r
866 this.t譜面を描画する・1小節を描画する・小節番号を描画する( g, cs, rc小節のPicBox内可視領域 );
\r
867 this.t譜面を描画する・1小節を描画する・ガイド線を描画する( g, cs, rc小節のPicBox内描画領域 );
\r
868 this.t譜面を描画する・1小節を描画する・拍線を描画する( g, cs, rc小節のPicBox内描画領域 );
\r
869 this.t譜面を描画する・1小節を描画する・レーン区分線を描画する( g, cs, rc小節のPicBox内描画領域 );
\r
870 this.t譜面を描画する・1小節を描画する・小節線を描画する( g, cs, rc小節のPicBox内描画領域 );
\r
871 this.t譜面を描画する・1小節を描画する・チップを描画する( g, cs, rc小節のPicBox内描画領域 );
\r
873 private void t譜面を描画する・1小節を描画する・ガイド線を描画する( Graphics g, C小節 cs, Rectangle rc小節のPicBox内描画領域 )
\r
875 if( this.n現在のガイド幅grid > 1 )
\r
877 int num = cs.n小節長倍率を考慮した現在の小節の高さgrid;
\r
878 for( int i = 0; i < num; i += this.n現在のガイド幅grid )
\r
880 int num3 = rc小節のPicBox内描画領域.Bottom - ( i * C小節.n1グリッドの高さdot );
\r
881 g.DrawLine( this.penガイド線ペン, rc小節のPicBox内描画領域.X, num3, rc小節のPicBox内描画領域.Right, num3 );
\r
885 private void t譜面を描画する・1小節を描画する・チップを描画する( Graphics g, C小節 cs, Rectangle rc小節のPicBox内描画領域 )
\r
888 Rectangle rectangle = new Rectangle( 0, 0, 0, 0 );
\r
889 foreach( Cチップ cチップ in cs.listチップ )
\r
891 if( cチップ.n枠外レーン数 != 0 )
\r
895 int num = cチップ.n位置grid;
\r
896 Cレーン cレーン = this.listレーン[ cチップ.nレーン番号0to ];
\r
897 if ( !cレーン.bIsVisible )
\r
901 rectangle.X = cレーン.n位置Xdot;
\r
902 rectangle.Y = ( rc小節のPicBox内描画領域.Bottom - ( num * C小節.n1グリッドの高さdot ) ) - Cチップ.nチップの高さdot;
\r
903 rectangle.Width = cレーン.n幅dot;
\r
904 rectangle.Height = Cチップ.nチップの高さdot;
\r
907 switch( cレーン.eレーン種別 )
\r
915 if( ( ( cレーン.eレーン種別 != Cレーン.E種別.GtR ) || ( cチップ.n値・整数1to1295 != 2 ) ) && ( ( cレーン.eレーン種別 != Cレーン.E種別.BsR ) || ( cチップ.n値・整数1to1295 != 2 ) ) )
\r
917 Cチップ.t表チップを描画する( g, rectangle, -1, cレーン.col背景色 );
\r
920 rectangle.Width = cレーン.n幅dot * 3;
\r
921 Cチップ.tOPENチップを描画する( g, rectangle );
\r
925 Cチップ.t表チップを描画する( g, rectangle, cチップ.f値・浮動小数, cレーン.col背景色 );
\r
929 Cチップ.t表チップを描画する( g, rectangle, cチップ.n値・整数1to1295, cレーン.col背景色 );
\r
932 if( cチップ.bドラッグで選択中 || cチップ.b確定選択中 )
\r
934 Cチップ.tチップの周囲の太枠を描画する( g, rectangle );
\r
937 else if( cレーン.eレーン種別 == Cレーン.E種別.BPM )
\r
939 Cチップ.t裏チップを描画する( g, rectangle, cチップ.f値・浮動小数, cレーン.col背景色 );
\r
943 Cチップ.t裏チップを描画する( g, rectangle, cチップ.n値・整数1to1295, cレーン.col背景色 );
\r
947 private void t譜面を描画する・1小節を描画する・レーン区分線を描画する( Graphics g, C小節 cs, Rectangle rc小節のPicBox内描画領域 )
\r
950 foreach( Cレーン cレーン in this.listレーン )
\r
952 Pen pen = cレーン.b左側の線が太線 ? this.penレーン区分線ペン太 : this.penレーン区分線ペン細;
\r
953 g.DrawLine( pen, num, rc小節のPicBox内描画領域.Top, num, rc小節のPicBox内描画領域.Bottom );
\r
957 private void t譜面を描画する・1小節を描画する・小節線を描画する( Graphics g, C小節 cs, Rectangle rc小節のPicBox内描画領域 )
\r
959 Rectangle rectangle = rc小節のPicBox内描画領域;
\r
960 g.DrawLine( this.pen小節線ペン, rectangle.X, rectangle.Bottom, rectangle.Right, rectangle.Bottom );
\r
961 g.DrawLine( this.pen小節線ペン, rectangle.X, rectangle.Top, rectangle.Right, rectangle.Top );
\r
963 private void t譜面を描画する・1小節を描画する・小節番号を描画する( Graphics g, C小節 cs, Rectangle rc小節のPicBox内可視領域 )
\r
965 g.DrawString( C変換.str小節番号を文字列3桁に変換して返す( cs.n小節番号0to3599 ), this.ft小節番号文字フォント, this.br小節番号文字ブラシ, rc小節のPicBox内可視領域, this.strfmt小節番号文字フォーマット );
\r
967 private void t譜面を描画する・1小節を描画する・拍線を描画する( Graphics g, C小節 cs, Rectangle rc小節のPicBox内描画領域 )
\r
969 int num = cs.n小節長倍率を考慮した現在の小節の高さgrid;
\r
970 for( int i = 0; i < num; i += C小節.n基準の高さgrid / 4 )
\r
972 int num3 = rc小節のPicBox内描画領域.Bottom - ( i * C小節.n1グリッドの高さdot );
\r
973 g.DrawLine( this.pen拍線ペン, rc小節のPicBox内描画領域.X, num3, rc小節のPicBox内描画領域.Right, num3 );
\r
976 private void t譜面を描画する・レーン割付チップを描画する( Graphics g, Rectangle rc小節のPicBox内描画領域 )
\r
978 LinearGradientBrush brush = new LinearGradientBrush( rc小節のPicBox内描画領域, Color.FromArgb( 0xff, 0, 0, 100 ), Color.FromArgb( 0xff, 100, 100, 0xff ), LinearGradientMode.Vertical );
\r
979 g.FillRectangle( brush, rc小節のPicBox内描画領域 );
\r
981 Rectangle layoutRectangle = new Rectangle( 0, 0, 0, 0 );
\r
982 foreach( Cレーン cレーン in this.listレーン )
\r
984 if ( !cレーン.bIsVisible )
\r
988 layoutRectangle.X = ( rc小節のPicBox内描画領域.X + cレーン.n位置Xdot ) + 1;
\r
989 layoutRectangle.Y = rc小節のPicBox内描画領域.Y + 1;
\r
990 layoutRectangle.Width = cレーン.n幅dot;
\r
991 layoutRectangle.Height = rc小節のPicBox内描画領域.Height;
\r
992 if ( cレーン.nレーン割付チップ・表0or1to1295 > 0 )
\r
994 string s = C変換.str数値を36進数2桁に変換して返す( cレーン.nレーン割付チップ・表0or1to1295 );
\r
995 g.DrawString( s, this.ftレーン割付チップ番号文字フォント, this.brレーン割付番号文字ブラシ影, layoutRectangle, this.strfmtレーン割付チップ番号文字フォーマット );
\r
996 layoutRectangle.X--;
\r
997 layoutRectangle.Y--;
\r
998 g.DrawString( s, this.ftレーン割付チップ番号文字フォント, this.brレーン割付番号文字ブラシ, layoutRectangle, this.strfmtレーン割付チップ番号文字フォーマット );
\r
999 layoutRectangle.X++;
\r
1000 layoutRectangle.Y++;
\r
1002 layoutRectangle.X += cレーン.n幅dot / 2;
\r
1003 if ( cレーン.nレーン割付チップ・裏0or1to1295 > 0 )
\r
1005 string str2 = C変換.str数値を36進数2桁に変換して返す( cレーン.nレーン割付チップ・裏0or1to1295 );
\r
1006 g.DrawString( str2, this.ftレーン割付チップ番号文字フォント, this.brレーン割付番号文字ブラシ影, layoutRectangle, this.strfmtレーン割付チップ番号文字フォーマット );
\r
1007 layoutRectangle.X--;
\r
1008 layoutRectangle.Y--;
\r
1009 g.DrawString( str2, this.ftレーン割付チップ番号文字フォント, this.brレーン割付番号文字ブラシ, layoutRectangle, this.strfmtレーン割付チップ番号文字フォーマット );
\r
1013 private void t譜面を描画する・レーン名を描画する( Graphics g, Rectangle rcレーン名のPicBox内描画領域 )
\r
1015 LinearGradientBrush brush = new LinearGradientBrush( rcレーン名のPicBox内描画領域, Color.FromArgb( 0xff, 100, 100, 0xff ), Color.FromArgb( 0, 0, 0, 0xff ), LinearGradientMode.Vertical );
\r
1016 g.FillRectangle( brush, rcレーン名のPicBox内描画領域 );
\r
1018 Rectangle layoutRectangle = new Rectangle( 0, 0, 0, 0 );
\r
1019 foreach( Cレーン cレーン in this.listレーン )
\r
1021 if ( !cレーン.bIsVisible )
\r
1025 layoutRectangle.X = ( rcレーン名のPicBox内描画領域.X + cレーン.n位置Xdot ) + 2;
\r
1026 layoutRectangle.Y = rcレーン名のPicBox内描画領域.Y + 2;
\r
1027 layoutRectangle.Width = cレーン.n幅dot;
\r
1028 layoutRectangle.Height = 0x18;
\r
1029 g.DrawString( cレーン.strレーン名, this.ftレーン番号文字フォント, this.brレーン名文字ブラシ影, layoutRectangle, this.strfmtレーン名文字フォーマット );
\r
1030 layoutRectangle.X -= 2;
\r
1031 layoutRectangle.Y -= 2;
\r
1032 g.DrawString( cレーン.strレーン名, this.ftレーン番号文字フォント, this.brレーン名文字ブラシ, layoutRectangle, this.strfmtレーン名文字フォーマット );
\r
1035 //-----------------
\r